Perform keccak-f in-place.
parent
5ee886a4b3
commit
e40b3562fb
|
@ -1,10 +1,10 @@
|
||||||
package keccak
|
package keccak
|
||||||
|
|
||||||
// roundGeneric implements one round of the keccak-f[1600] permutation.
|
// roundGeneric implements one round of the keccak-f[1600] permutation.
|
||||||
func roundGeneric(a [5][5]uint64) [5][5]uint64 {
|
func roundGeneric(a *[5][5]uint64) {
|
||||||
// Theta
|
// Theta
|
||||||
var c [5]uint64
|
var c [5]uint64
|
||||||
for x := range a {
|
for x := range *a {
|
||||||
c[x] = a[0][x] ^ a[1][x] ^ a[2][x] ^ a[3][x] ^ a[4][x]
|
c[x] = a[0][x] ^ a[1][x] ^ a[2][x] ^ a[3][x] ^ a[4][x]
|
||||||
}
|
}
|
||||||
for x := range a[0] {
|
for x := range a[0] {
|
||||||
|
@ -18,7 +18,7 @@ func roundGeneric(a [5][5]uint64) [5][5]uint64 {
|
||||||
|
|
||||||
// Rho and pi
|
// Rho and pi
|
||||||
var b [5][5]uint64
|
var b [5][5]uint64
|
||||||
for y := range a {
|
for y := range *a {
|
||||||
for x := range a[0] {
|
for x := range a[0] {
|
||||||
x0 := y
|
x0 := y
|
||||||
y0 := (x*2 + y*3) % 5
|
y0 := (x*2 + y*3) % 5
|
||||||
|
@ -35,8 +35,6 @@ func roundGeneric(a [5][5]uint64) [5][5]uint64 {
|
||||||
a[y][3] = b[y][3] ^ ^c[4] & c[0]
|
a[y][3] = b[y][3] ^ ^c[4] & c[0]
|
||||||
a[y][4] = b[y][4] ^ ^c[0] & c[1]
|
a[y][4] = b[y][4] ^ ^c[0] & c[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
return a
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -49,16 +49,15 @@ loop:
|
||||||
b = b[8:]
|
b = b[8:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
d.a = keccakf(d.a)
|
keccakf(&d.a)
|
||||||
d.len = 0
|
d.len = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func keccakf(a [5][5]uint64) [5][5]uint64 {
|
func keccakf(a *[5][5]uint64) {
|
||||||
for i := 0; i < 24; i++ {
|
for i := 0; i < 24; i++ {
|
||||||
a = roundGeneric(a)
|
roundGeneric(a)
|
||||||
a[0][0] ^= RC[i]
|
a[0][0] ^= RC[i]
|
||||||
}
|
}
|
||||||
return a
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d0 *digest) Sum(b []byte) []byte {
|
func (d0 *digest) Sum(b []byte) []byte {
|
||||||
|
|
Loading…
Reference in New Issue