diff --git a/poseidon2/sponge.nim b/poseidon2/sponge.nim index 274f4b2..7da8851 100644 --- a/poseidon2/sponge.nim +++ b/poseidon2/sponge.nim @@ -65,3 +65,9 @@ func digest*(_: type Sponge, elements: openArray[F], rate: static int): F = for element in elements: sponge.update(element) return sponge.finish() + +func digest*(_: type Sponge, bytes: openArray[byte], rate: static int): F = + var sponge = Sponge.init(rate) + for element in bytes.elements(F): + sponge.update(element) + return sponge.finish() diff --git a/tests/poseidon2/testSponge.nim b/tests/poseidon2/testSponge.nim index 266992a..37e58a6 100644 --- a/tests/poseidon2/testSponge.nim +++ b/tests/poseidon2/testSponge.nim @@ -1,6 +1,8 @@ import std/unittest +import std/sequtils import constantine/math/io/io_fields +import constantine/math/arithmetic import poseidon2/types import poseidon2 @@ -48,3 +50,9 @@ suite "sponge": xs.add( toF(i) ) let h = Sponge.digest(xs, rate = 2) check toDecimal(h) == expectedSpongeResultsRate2[n] + + test "sponge with byte array as input": + let bytes = toSeq 1'u8..80'u8 + let elements = toSeq bytes.elements(F) + let expected = Sponge.digest(elements, rate = 2) + check bool(Sponge.digest(bytes, rate = 2) == expected)