keccak256-circom/go-keccak256-bits-impl/keccak_test.go
go-keccak256-bits-impl/keccak_test.goRaw
1package keccak
2
3import (
4 "encoding/hex"
5 "testing"
6
7 "github.com/ethereum/go-ethereum/crypto"
8 qt "github.com/frankban/quicktest"
9)
10
11func TestKeccak(t *testing.T) {
12 testKeccak(t, []byte("test"), "9c22ff5f21f0b81b113e63f7db6da94fedef11b2119b4088b89664fb9a3cb658")
13 testKeccak(t, make([]byte, 32), "290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563")
14 testKeccak(t, make([]byte, 100), "913fb9e1f6f1c6d910fd574a5cad8857aa43bfba24e401ada4f56090d4d997a7")
15}
16
17func testKeccak(t *testing.T, input []byte, expectedHex string) {
18 expected := crypto.Keccak256(input)
19
20 hBits := ComputeKeccak(bytesToBits(input))
21 h := bitsToBytes(hBits)
22
23 qt.Assert(t, h, qt.DeepEquals, expected)
24 qt.Assert(t, hex.EncodeToString(h), qt.Equals, expectedHex)
25}
26
27func TestPad(t *testing.T) {
28 b := make([]byte, 32)
29 for i := 0; i < len(b); i++ {
30 b[i] = byte(i)
31 }
32 bBits := bytesToBits(b)
33 fBits := pad(bBits)
34
35 qt.Assert(t, bitsToBytes(fBits[:]), qt.DeepEquals,
36 []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
37 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
38 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
39 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
40 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
41 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
42 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128})
43}
44
45func TestKeccakfRound(t *testing.T) {
46 s, _ := newS()
47
48 s = keccakfRound(s, 0)
49 qt.Assert(t, bitsToU64Array(s[:]), qt.DeepEquals,
50 []uint64{
51 26388279066651, 246290629787648, 26388279902208,
52 25165850, 246290605457408, 7784628352, 844424965783552,
53 2305843009213694083, 844432714760192,
54 2305843009249345539, 637534226, 14848, 641204224,
55 14354, 3670528, 6308236288, 2130304761856,
56 648518346341354496, 6309216256, 648520476645130240,
57 4611706359392501763, 792677514882318336,
58 20340965113972, 4611732197915754499,
59 792633534417207412})
60
61 s = keccakfRound(s, 20)
62 qt.Assert(t, bitsToU64Array(s[:]), qt.DeepEquals,
63 []uint64{17728382861289829725, 13654073086381141005,
64 9912591532945168756, 2030068283137172501, 5084683018496047808,
65 151244976540463006, 11718217461613725815, 11636071286320763433,
66 15039144509240642782, 11629028282864249197,
67 2594633730779457624, 14005558505838459171, 4612881094252610438,
68 2828009553220809993, 4838578484623267135, 1006588603063111352,
69 11109191860075454495, 1187545859779038208,
70 14661669042642437042, 5345317080454741069, 8196674451365552863,
71 635818354583088260, 13515759754032305626, 1708499319988748543,
72 7509292798507899312})
73
74}
75
76func TestKeccakf(t *testing.T) {
77 s, _ := newS()
78
79 s = keccakf(s)
80
81 qt.Assert(t, bitsToU64Array(s[:]), qt.DeepEquals,
82 []uint64{9472389783892099349, 2159377575142921216,
83 17826682512249813373, 2325963263767348549,
84 15086930817298358378, 11661812091723830419,
85 3517755057770134847, 5223775837645169598, 933274647126506074,
86 3451250694486589320, 825065683101361807, 6192414258352188799,
87 14426505790672879210, 3326742392640380689,
88 16749975585634164134, 17847697619892908514,
89 11598434253200954839, 6049795840392747215, 8610635351954084385,
90 18234131770974529925, 15330347418010067760,
91 12047099911907354591, 4763389569697138851, 6779624089296570504,
92 15083668107635345971})
93
94 // compute again keccakf on the current state
95 // s = keccakf(s)
96 // qt.Assert(t, bitsToU64Array(s[:]), qt.DeepEquals, []uint64{})
97}
98
99func TestFinal(t *testing.T) {
100 b := make([]byte, 32)
101 for i := 0; i < len(b); i++ {
102 b[i] = byte(i)
103 }
104 bBits := bytesToBits(b)
105 fBits := final(bBits)
106
107 qt.Assert(t, bitsToU64Array(fBits[:]), qt.DeepEquals,
108 []uint64{16953415415620100490, 7495738965189503699,
109 12723370805759944158, 3295955328722933810,
110 12121371508560456016, 174876831679863147, 15944933357501475584,
111 7502339663607726274, 12048918224562833898,
112 16715284461100269102, 15582559130083209842,
113 1743886467337678829, 2424196198791253761, 1116417308245482383,
114 10367365997906434042, 1849801549382613906,
115 13294939539683415102, 4478091053375708790, 2969967870313332958,
116 14618962068930014237, 2721742233407503451,
117 12003265593030191290, 8109318293656735684, 6346795302983965746,
118 12210038122000333046})
119}