arnaucube
arnaucube/keccak256-circomPublic Self-hosted repository
keccak256-circom/go-keccak256-bits-impl/stepmappings.go
go-keccak256-bits-impl/stepmappings.goRaw
  1package keccak
  2
  3func theta(a [25 * 64]bool) [25 * 64]bool {
  4	var c0, c1, c2, c3, c4, d [64]bool
  5	var r [25 * 64]bool
  6
  7	copy(c0[:], xor(xor(xor(xor(a[0:1*64], a[5*64:6*64]), a[10*64:11*64]), a[15*64:16*64]), a[20*64:21*64]))
  8	copy(c1[:], xor(xor(xor(xor(a[1*64:2*64], a[6*64:7*64]), a[11*64:12*64]), a[16*64:17*64]), a[21*64:22*64]))
  9	copy(c2[:], xor(xor(xor(xor(a[2*64:3*64], a[7*64:8*64]), a[12*64:13*64]), a[17*64:18*64]), a[22*64:23*64]))
 10	copy(c3[:], xor(xor(xor(xor(a[3*64:4*64], a[8*64:9*64]), a[13*64:14*64]), a[18*64:19*64]), a[23*64:24*64]))
 11	copy(c4[:], xor(xor(xor(xor(a[4*64:5*64], a[9*64:10*64]), a[14*64:15*64]), a[19*64:20*64]), a[24*64:25*64]))
 12
 13	copy(d[:], xor(c4[:], or(leftShift(c1[:], 1), rightShift(c1[:], (64-1)))))
 14	copy(r[0:1*64], xor(a[0:1*64], d[:]))
 15	copy(r[5*64:6*64], xor(a[5*64:6*64], d[:]))
 16	copy(r[10*64:11*64], xor(a[10*64:11*64], d[:]))
 17	copy(r[15*64:16*64], xor(a[15*64:16*64], d[:]))
 18	copy(r[20*64:21*64], xor(a[20*64:21*64], d[:]))
 19
 20	copy(d[:], xor(c0[:], or(leftShift(c2[:], 1), rightShift(c2[:], (64-1)))))
 21	copy(r[1*64:2*64], xor(a[1*64:2*64], d[:]))
 22	copy(r[6*64:7*64], xor(a[6*64:7*64], d[:]))
 23	copy(r[11*64:12*64], xor(a[11*64:12*64], d[:]))
 24	copy(r[16*64:17*64], xor(a[16*64:17*64], d[:]))
 25	copy(r[21*64:22*64], xor(a[21*64:22*64], d[:]))
 26
 27	copy(d[:], xor(c1[:], or(leftShift(c3[:], 1), rightShift(c3[:], (64-1)))))
 28	copy(r[2*64:3*64], xor(a[2*64:3*64], d[:]))
 29	copy(r[7*64:8*64], xor(a[7*64:8*64], d[:]))
 30	copy(r[12*64:13*64], xor(a[12*64:13*64], d[:]))
 31	copy(r[17*64:18*64], xor(a[17*64:18*64], d[:]))
 32	copy(r[22*64:23*64], xor(a[22*64:23*64], d[:]))
 33
 34	copy(d[:], xor(c2[:], or(leftShift(c4[:], 1), rightShift(c4[:], (64-1)))))
 35	copy(r[3*64:4*64], xor(a[3*64:4*64], d[:]))
 36	copy(r[8*64:9*64], xor(a[8*64:9*64], d[:]))
 37	copy(r[13*64:14*64], xor(a[13*64:14*64], d[:]))
 38	copy(r[18*64:19*64], xor(a[18*64:19*64], d[:]))
 39	copy(r[23*64:24*64], xor(a[23*64:24*64], d[:]))
 40
 41	copy(d[:], xor(c3[:], or(leftShift(c0[:], 1), rightShift(c0[:], (64-1)))))
 42	copy(r[4*64:5*64], xor(a[4*64:5*64], d[:]))
 43	copy(r[9*64:10*64], xor(a[9*64:10*64], d[:]))
 44	copy(r[14*64:15*64], xor(a[14*64:15*64], d[:]))
 45	copy(r[19*64:20*64], xor(a[19*64:20*64], d[:]))
 46	copy(r[24*64:25*64], xor(a[24*64:25*64], d[:]))
 47	return r
 48}
 49
 50func rhopi(a [25 * 64]bool) [25 * 64]bool {
 51	var t, tAux [64]bool
 52	var r [25 * 64]bool
 53
 54	copy(r[0:1*64], a[0:1*64])
 55
 56	copy(t[:], a[1*64:2*64])
 57
 58	copy(tAux[:], a[10*64:11*64])
 59	copy(r[10*64:11*64], or(leftShift(t[:], 1), rightShift(t[:], 64-1)))
 60	copy(t[:], tAux[:])
 61
 62	copy(tAux[:], a[7*64:8*64])
 63	copy(r[7*64:8*64], or(leftShift(t[:], 3), rightShift(t[:], 64-3)))
 64	copy(t[:], tAux[:])
 65
 66	copy(tAux[:], a[11*64:12*64])
 67	copy(r[11*64:12*64], or(leftShift(t[:], 6), rightShift(t[:], 64-6)))
 68	copy(t[:], tAux[:])
 69
 70	copy(tAux[:], a[17*64:18*64])
 71	copy(r[17*64:18*64], or(leftShift(t[:], 10), rightShift(t[:], 64-10)))
 72	copy(t[:], tAux[:])
 73
 74	copy(tAux[:], a[18*64:19*64])
 75	copy(r[18*64:19*64], or(leftShift(t[:], 15), rightShift(t[:], 64-15)))
 76	copy(t[:], tAux[:])
 77
 78	copy(tAux[:], a[3*64:4*64])
 79	copy(r[3*64:4*64], or(leftShift(t[:], 21), rightShift(t[:], 64-21)))
 80	copy(t[:], tAux[:])
 81
 82	copy(tAux[:], a[5*64:6*64])
 83	copy(r[5*64:6*64], or(leftShift(t[:], 28), rightShift(t[:], 64-28)))
 84	copy(t[:], tAux[:])
 85
 86	copy(tAux[:], a[16*64:17*64])
 87	copy(r[16*64:17*64], or(leftShift(t[:], 36), rightShift(t[:], 64-36)))
 88	copy(t[:], tAux[:])
 89
 90	copy(tAux[:], a[8*64:9*64])
 91	copy(r[8*64:9*64], or(leftShift(t[:], 45), rightShift(t[:], 64-45)))
 92	copy(t[:], tAux[:])
 93
 94	copy(tAux[:], a[21*64:22*64])
 95	copy(r[21*64:22*64], or(leftShift(t[:], 55), rightShift(t[:], 64-55)))
 96	copy(t[:], tAux[:])
 97
 98	copy(tAux[:], a[24*64:25*64])
 99	copy(r[24*64:25*64], or(leftShift(t[:], 2), rightShift(t[:], 64-2)))
100	copy(t[:], tAux[:])
101
102	copy(tAux[:], a[4*64:5*64])
103	copy(r[4*64:5*64], or(leftShift(t[:], 14), rightShift(t[:], 64-14)))
104	copy(t[:], tAux[:])
105
106	copy(tAux[:], a[15*64:16*64])
107	copy(r[15*64:16*64], or(leftShift(t[:], 27), rightShift(t[:], 64-27)))
108	copy(t[:], tAux[:])
109
110	copy(tAux[:], a[23*64:24*64])
111	copy(r[23*64:24*64], or(leftShift(t[:], 41), rightShift(t[:], 64-41)))
112	copy(t[:], tAux[:])
113
114	copy(tAux[:], a[19*64:20*64])
115	copy(r[19*64:20*64], or(leftShift(t[:], 56), rightShift(t[:], 64-56)))
116	copy(t[:], tAux[:])
117
118	copy(tAux[:], a[13*64:14*64])
119	copy(r[13*64:14*64], or(leftShift(t[:], 8), rightShift(t[:], 64-8)))
120	copy(t[:], tAux[:])
121
122	copy(tAux[:], a[12*64:13*64])
123	copy(r[12*64:13*64], or(leftShift(t[:], 25), rightShift(t[:], 64-25)))
124	copy(t[:], tAux[:])
125
126	copy(tAux[:], a[2*64:3*64])
127	copy(r[2*64:3*64], or(leftShift(t[:], 43), rightShift(t[:], 64-43)))
128	copy(t[:], tAux[:])
129
130	copy(tAux[:], a[20*64:21*64])
131	copy(r[20*64:21*64], or(leftShift(t[:], 62), rightShift(t[:], 64-62)))
132	copy(t[:], tAux[:])
133
134	copy(tAux[:], a[14*64:15*64])
135	copy(r[14*64:15*64], or(leftShift(t[:], 18), rightShift(t[:], 64-18)))
136	copy(t[:], tAux[:])
137
138	copy(tAux[:], a[22*64:23*64])
139	copy(r[22*64:23*64], or(leftShift(t[:], 39), rightShift(t[:], 64-39)))
140	copy(t[:], tAux[:])
141
142	copy(tAux[:], a[9*64:10*64])
143	copy(r[9*64:10*64], or(leftShift(t[:], 61), rightShift(t[:], 64-61)))
144	copy(t[:], tAux[:])
145
146	copy(tAux[:], a[6*64:7*64])
147	copy(r[6*64:7*64], or(leftShift(t[:], 20), rightShift(t[:], 64-20)))
148	copy(t[:], tAux[:])
149
150	copy(r[1*64:2*64], or(leftShift(t[:], 44), rightShift(t[:], 64-44)))
151	return r
152}