@ -15,16 +15,31 @@ func TestBlake2bVersion(t *testing.T) {
assert . Equal ( t , "e57ba154fb2c47811dc1a2369b27e25a44915b4e4ece4eb8ec74850cb78e01b1" , hex . EncodeToString ( h [ : ] ) )
assert . Equal ( t , "e57ba154fb2c47811dc1a2369b27e25a44915b4e4ece4eb8ec74850cb78e01b1" , hex . EncodeToString ( h [ : ] ) )
}
}
func TestPoseidon ( t * testing . T ) {
func TestPoseidonHash ( t * testing . T ) {
b0 := big . NewInt ( 0 )
b1 := big . NewInt ( 1 )
b1 := big . NewInt ( 1 )
b2 := big . NewInt ( 2 )
b2 := big . NewInt ( 2 )
h , err := Hash ( [ ] * big . Int { b1 , b2 } )
h , err := Hash ( [ T ] * big . Int { b1 , b2 , b0 , b0 , b0 , b0 } )
assert . Nil ( t , err )
assert . Equal ( t , "12242166908188651009877250812424843524687801523336557272219921456462821518061" , h . String ( ) )
b3 := big . NewInt ( 3 )
b4 := big . NewInt ( 4 )
h , err = Hash ( [ T ] * big . Int { b3 , b4 , b0 , b0 , b0 , b0 } )
assert . Nil ( t , err )
assert . Equal ( t , "17185195740979599334254027721507328033796809509313949281114643312710535000993" , h . String ( ) )
}
func TestPoseidonHashArbitraryLen ( t * testing . T ) {
b1 := big . NewInt ( 1 )
b2 := big . NewInt ( 2 )
h , err := HashSlice ( [ ] * big . Int { b1 , b2 } )
assert . Nil ( t , err )
assert . Nil ( t , err )
assert . Equal ( t , "4932297968297298434239270129193057052722409868268166443802652458940273154855" , h . String ( ) )
assert . Equal ( t , "4932297968297298434239270129193057052722409868268166443802652458940273154855" , h . String ( ) )
b3 := big . NewInt ( 3 )
b3 := big . NewInt ( 3 )
b4 := big . NewInt ( 4 )
b4 := big . NewInt ( 4 )
h , err = Hash ( [ ] * big . Int { b3 , b4 } )
h , err = HashSlice ( [ ] * big . Int { b3 , b4 } )
assert . Nil ( t , err )
assert . Nil ( t , err )
assert . Equal ( t , "4635491972858758537477743930622086396911540895966845494943021655521913507504" , h . String ( ) )
assert . Equal ( t , "4635491972858758537477743930622086396911540895966845494943021655521913507504" , h . String ( ) )
@ -36,7 +51,7 @@ func TestPoseidon(t *testing.T) {
b10 := big . NewInt ( 10 )
b10 := big . NewInt ( 10 )
b11 := big . NewInt ( 11 )
b11 := big . NewInt ( 11 )
b12 := big . NewInt ( 12 )
b12 := big . NewInt ( 12 )
h , err = Hash ( [ ] * big . Int { b1 , b2 , b3 , b4 , b5 , b6 , b7 , b8 , b9 , b10 , b11 , b12 } )
h , err = HashSlice ( [ ] * big . Int { b1 , b2 , b3 , b4 , b5 , b6 , b7 , b8 , b9 , b10 , b11 , b12 } )
assert . Nil ( t , err )
assert . Nil ( t , err )
assert . Equal ( t , "15278801138972282646981503374384603641625274360649669926363020545395022098027" , h . String ( ) )
assert . Equal ( t , "15278801138972282646981503374384603641625274360649669926363020545395022098027" , h . String ( ) )
@ -53,7 +68,7 @@ func TestPoseidon(t *testing.T) {
utils . SetBigIntFromLEBytes ( v , msg [ ( len ( msg ) / n ) * n : ] )
utils . SetBigIntFromLEBytes ( v , msg [ ( len ( msg ) / n ) * n : ] )
msgElems = append ( msgElems , v )
msgElems = append ( msgElems , v )
}
}
hmsg , err := Hash ( msgElems )
hmsg , err := HashSlice ( msgElems )
assert . Nil ( t , err )
assert . Nil ( t , err )
assert . Equal ( t , "16019700159595764790637132363672701294192939959594423814006267756172551741065" , hmsg . String ( ) )
assert . Equal ( t , "16019700159595764790637132363672701294192939959594423814006267756172551741065" , hmsg . String ( ) )
@ -69,33 +84,30 @@ func TestPoseidon(t *testing.T) {
utils . SetBigIntFromLEBytes ( v , msg2 [ ( len ( msg2 ) / n ) * n : ] )
utils . SetBigIntFromLEBytes ( v , msg2 [ ( len ( msg2 ) / n ) * n : ] )
msg2Elems = append ( msg2Elems , v )
msg2Elems = append ( msg2Elems , v )
}
}
hmsg2 , err := Hash ( msg2Elems )
hmsg2 , err := HashSlice ( msg2Elems )
assert . Nil ( t , err )
assert . Nil ( t , err )
assert . Equal ( t , "2978613163687734485261639854325792381691890647104372645321246092227111432722" , hmsg2 . String ( ) )
assert . Equal ( t , "2978613163687734485261639854325792381691890647104372645321246092227111432722" , hmsg2 . String ( ) )
hmsg2 = HashBytes ( msg2 )
assert . Equal ( t , "2978613163687734485261639854325792381691890647104372645321246092227111432722" , hmsg2 . String ( ) )
}
}
func TestPoseidonBrokenChunks ( t * testing . T ) {
h1 , err := Hash ( [ ] * big . Int { big . NewInt ( 0 ) , big . NewInt ( 1 ) , big . NewInt ( 2 ) , big . NewInt ( 3 ) , big . NewInt ( 4 ) ,
func TestPoseidonHashArbitraryLenBrokenChunks ( t * testing . T ) {
h1 , err := HashSlice ( [ ] * big . Int { big . NewInt ( 0 ) , big . NewInt ( 1 ) , big . NewInt ( 2 ) , big . NewInt ( 3 ) , big . NewInt ( 4 ) ,
big . NewInt ( 5 ) , big . NewInt ( 6 ) , big . NewInt ( 7 ) , big . NewInt ( 8 ) , big . NewInt ( 9 ) } )
big . NewInt ( 5 ) , big . NewInt ( 6 ) , big . NewInt ( 7 ) , big . NewInt ( 8 ) , big . NewInt ( 9 ) } )
assert . Nil ( t , err )
assert . Nil ( t , err )
h2 , err := Hash ( [ ] * big . Int { big . NewInt ( 5 ) , big . NewInt ( 6 ) , big . NewInt ( 7 ) , big . NewInt ( 8 ) , big . NewInt ( 9 ) ,
h2 , err := HashSlice ( [ ] * big . Int { big . NewInt ( 5 ) , big . NewInt ( 6 ) , big . NewInt ( 7 ) , big . NewInt ( 8 ) , big . NewInt ( 9 ) ,
big . NewInt ( 0 ) , big . NewInt ( 1 ) , big . NewInt ( 2 ) , big . NewInt ( 3 ) , big . NewInt ( 4 ) } )
big . NewInt ( 0 ) , big . NewInt ( 1 ) , big . NewInt ( 2 ) , big . NewInt ( 3 ) , big . NewInt ( 4 ) } )
assert . Nil ( t , err )
assert . Nil ( t , err )
assert . NotEqual ( t , h1 , h2 )
assert . NotEqual ( t , h1 , h2 )
}
}
func TestPoseidonBrokenPadding ( t * testing . T ) {
h1 , err := Hash ( [ ] * big . Int { big . NewInt ( int64 ( 1 ) ) } )
func TestPoseidonHashArbitraryLen BrokenPadding ( t * testing . T ) {
h1 , err := HashSlice ( [ ] * big . Int { big . NewInt ( int64 ( 1 ) ) } )
assert . Nil ( t , err )
assert . Nil ( t , err )
h2 , err := Hash ( [ ] * big . Int { big . NewInt ( int64 ( 1 ) ) , big . NewInt ( int64 ( 0 ) ) } )
h2 , err := HashSlice ( [ ] * big . Int { big . NewInt ( int64 ( 1 ) ) , big . NewInt ( int64 ( 0 ) ) } )
assert . Nil ( t , err )
assert . Nil ( t , err )
assert . NotEqual ( t , h1 , h2 )
assert . NotEqual ( t , h1 , h2 )
}
}
func BenchmarkPoseidon ( b * testing . B ) {
func BenchmarkPoseidonHashSmallValues ( b * testing . B ) {
b12 := big . NewInt ( int64 ( 12 ) )
b12 := big . NewInt ( int64 ( 12 ) )
b45 := big . NewInt ( int64 ( 45 ) )
b45 := big . NewInt ( int64 ( 45 ) )
b78 := big . NewInt ( int64 ( 78 ) )
b78 := big . NewInt ( int64 ( 78 ) )
@ -103,17 +115,16 @@ func BenchmarkPoseidon(b *testing.B) {
bigArray4 := [ ] * big . Int { b12 , b45 , b78 , b41 }
bigArray4 := [ ] * big . Int { b12 , b45 , b78 , b41 }
for i := 0 ; i < b . N ; i ++ {
for i := 0 ; i < b . N ; i ++ {
Hash ( bigArray4 ) //nolint:errcheck
HashSlice ( bigArray4 ) //nolint:errcheck
}
}
}
}
func BenchmarkPoseidonLarge ( b * testing . B ) {
b12 := utils . NewIntFromString ( "11384336176656855268977457483345535180380036354188103142384839473266348197733" )
b45 := utils . NewIntFromString ( "11384336176656855268977457483345535180380036354188103142384839473266348197733" )
b78 := utils . NewIntFromString ( "11384336176656855268977457483345535180380036354188103142384839473266348197733" )
b41 := utils . NewIntFromString ( "11384336176656855268977457483345535180380036354188103142384839473266348197733" )
func BenchmarkPoseidonHash ( b * testing . B ) {
b0 := big . NewInt ( 0 )
b1 := utils . NewIntFromString ( "12242166908188651009877250812424843524687801523336557272219921456462821518061" )
b2 := utils . NewIntFromString ( "12242166908188651009877250812424843524687801523336557272219921456462821518061" )
bigArray4 := [ ] * big . Int { b12 , b45 , b78 , b41 }
bigArray4 := [ T ] * big . Int { b1 , b 2, b0 , b0 , b0 , b0 }
for i := 0 ; i < b . N ; i ++ {
for i := 0 ; i < b . N ; i ++ {
Hash ( bigArray4 ) //nolint:errcheck
Hash ( bigArray4 ) //nolint:errcheck