Allow for keyed compression

This commit is contained in:
Mark Spanbroek 2023-11-13 13:08:09 +01:00 committed by markspanbroek
parent 6fddd3e39e
commit 8b7a4a3151
3 changed files with 18 additions and 2 deletions

View File

@ -2,9 +2,9 @@ import ./types
import ./permutation
# 2-to-1 compression
func compress*(a, b : F) : F =
func compress*(a, b : F, key = zero) : F =
var x = a
var y = b
var z : F = zero
var z = key
permInplace(x, y, z)
return x

View File

@ -0,0 +1,15 @@
import std/unittest
import constantine/math/arithmetic
import poseidon2/types
import poseidon2/permutation
import poseidon2/compress
suite "compress":
test "uses permutation to compress two elements":
check bool(compress(1.toF, 2.toF) == (1.toF, 2.toF, 0.toF).perm[0])
check bool(compress(3.toF, 4.toF) == (3.toF, 4.toF, 0.toF).perm[0])
test "allows for keyed compression":
check bool(compress(1.toF, 2.toF, key=3.toF) == (1.toF, 2.toF, 3.toF).perm[0])
check bool(compress(4.toF, 5.toF, key=6.toF) == (4.toF, 5.toF, 6.toF).perm[0])

View File

@ -1,5 +1,6 @@
import ./poseidon2/testPermutation
import ./poseidon2/testSponge
import ./poseidon2/testCompress
import ./poseidon2/testPoseidon2
import ./poseidon2/testIo
import ./poseidon2/testReadme