@@ -30,6 +30,65 @@ func TestSha256(t *testing.T) {
3030 })
3131}
3232
33+ // https://github.com/Jim8y/neo/blob/560d35783e428d31e3681eaa7ee9ed00a8a50d09/tests/Neo.UnitTests/SmartContract/Native/UT_CryptoLib.cs#L340
34+ func TestKeccak256_Compat (t * testing.T ) {
35+ c := newCrypto ()
36+ ic := & interop.Context {VM : vm .New ()}
37+
38+ testCases := []struct {
39+ name string
40+ input []byte
41+ expectedHash string
42+ fail bool
43+ }{
44+ {"bad arg type" , nil , "" , true },
45+ {"good" , []byte {1 , 0 }, "628bf3596747d233f1e6533345700066bf458fa48daedaf04a7be6c392902476" , false },
46+ {"hello world" , []byte ("Hello, World!" ), "acaf3289d7b601cbd114fb36c4d29c85bbfd5e133f14cb355c3fd8d99367964f" , false },
47+ {"keccak" , []byte ("Keccak" ), "868c016b666c7d3698636ee1bd023f3f065621514ab61bf26f062c175fdbe7f2" , false },
48+ {"cryptography" , []byte ("Cryptography" ), "53d49d225dd2cfe77d8c5e2112bcc9efe77bea1c7aa5e5ede5798a36e99e2d29" , false },
49+ {"testing123" , []byte ("Testing123" ), "3f82db7b16b0818a1c6b2c6152e265f682d5ebcf497c9aad776ad38bc39cb6ca" , false },
50+ {"long string" , []byte ("This is a longer string for Keccak256 testing purposes." ), "24115e5c2359f85f6840b42acd2f7ea47bc239583e576d766fa173bf711bdd2f" , false },
51+ {"blank string" , []byte ("" ), "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" , false },
52+ }
53+
54+ for _ , tc := range testCases {
55+ t .Run (tc .name , func (t * testing.T ) {
56+ if tc .fail {
57+ require .Panics (t , func () {
58+ _ = c .keccak256 (ic , []stackitem.Item {stackitem .NewInterop (nil )})
59+ })
60+ } else {
61+ result := c .keccak256 (ic , []stackitem.Item {stackitem .NewByteArray (tc .input )}).Value ().([]byte )
62+ outputHashHex := hex .EncodeToString (result )
63+ require .Equal (t , tc .expectedHash , outputHashHex )
64+ }
65+ })
66+ }
67+ t .Run ("keccak errors" , func (t * testing.T ) {
68+ failureTestCases := []struct {
69+ name string
70+ item stackitem.Item
71+ }{
72+ {
73+ name : "Nil item" ,
74+ item : stackitem .NewInterop (nil ),
75+ },
76+ {
77+ name : "Non-byteable type" ,
78+ item : stackitem .NewArray ([]stackitem.Item {stackitem .NewBool (true )}),
79+ },
80+ }
81+
82+ for _ , tc := range failureTestCases {
83+ t .Run (tc .name , func (t * testing.T ) {
84+ require .Panics (t , func () {
85+ _ = c .keccak256 (ic , []stackitem.Item {tc .item })
86+ }, "keccak256 should panic with incorrect argument types" )
87+ })
88+ }
89+ })
90+ }
91+
3392func TestRIPEMD160 (t * testing.T ) {
3493 c := newCrypto ()
3594 ic := & interop.Context {VM : vm .New ()}
0 commit comments