diff --git a/poseidon2/compress.nim b/poseidon2/compress.nim index b0ce10e..85c5d8c 100644 --- a/poseidon2/compress.nim +++ b/poseidon2/compress.nim @@ -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 diff --git a/tests/poseidon2/testCompress.nim b/tests/poseidon2/testCompress.nim new file mode 100644 index 0000000..9f51492 --- /dev/null +++ b/tests/poseidon2/testCompress.nim @@ -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]) diff --git a/tests/test.nim b/tests/test.nim index 2313cae..da47d22 100644 --- a/tests/test.nim +++ b/tests/test.nim @@ -1,5 +1,6 @@ import ./poseidon2/testPermutation import ./poseidon2/testSponge +import ./poseidon2/testCompress import ./poseidon2/testPoseidon2 import ./poseidon2/testIo import ./poseidon2/testReadme