2424{.push raises : [].}
2525
2626import tables
27+ import sequtils
2728import nimcrypto/ [sha, sha2, keccak, blake2, hash, utils]
2829import poseidon2
2930import varint, vbuffer, multicodec, multibase
@@ -180,9 +181,14 @@ proc shake_256hash(data: openArray[byte], output: var openArray[byte]) =
180181 discard sctx.output (addr output[0 ], uint (len (output)))
181182 sctx.clear ()
182183
183- proc poseidon2hash (data: openArray [byte ], output: var openArray [byte ]) =
184+ proc poseidon2_sponge_rate2 (data: openArray [byte ], output: var openArray [byte ]) =
184185 if len (output) > 0 :
185- var digest = poseidon2.merkleRoot (data).toBytes ()
186+ var digest = poseidon2.Sponge .digest (data).toBytes ()
187+ copyMem (addr output[0 ], addr digest[0 ], uint (len (output)))
188+
189+ proc poseidon2_merkle_2kb_sponge (data: openArray [byte ], output: var openArray [byte ]) =
190+ if len (output) > 0 :
191+ var digest = poseidon2.SpongeMerkle .digest (data, 2048 ).toBytes ()
186192 copyMem (addr output[0 ], addr digest[0 ], uint (len (output)))
187193
188194const
@@ -322,7 +328,8 @@ const
322328 MHash (mcodec: multiCodec (" blake2s-240" ), size: 30 , coder: blake2Shash),
323329 MHash (mcodec: multiCodec (" blake2s-248" ), size: 31 , coder: blake2Shash),
324330 MHash (mcodec: multiCodec (" blake2s-256" ), size: 32 , coder: blake2Shash),
325- MHash (mcodec: multiCodec (" poseidon2-alt_bn_128-a2-cdx1" ), size: 32 , coder: poseidon2hash)
331+ MHash (mcodec: multiCodec (" poseidon2-alt_bn_128-sponge-r2" ), size: 32 , coder: poseidon2_sponge_rate2),
332+ MHash (mcodec: multiCodec (" poseidon2-alt_bn_128-mekle-2kb" ), size: 32 , coder: poseidon2_merkle_2kb_sponge)
326333 ]
327334
328335proc initMultiHashCodeTable (): Table [MultiCodec , MHash ] {.compileTime .} =
@@ -331,6 +338,7 @@ proc initMultiHashCodeTable(): Table[MultiCodec, MHash] {.compileTime.} =
331338
332339const
333340 CodeHashes = initMultiHashCodeTable ()
341+ MultiHashCodecsList * = HashesList .mapIt ( it.mcodec )
334342
335343proc digestImplWithHash (hash: MHash , data: openArray [byte ]): MultiHash =
336344 var buffer: array [MaxHashSize , byte ]
0 commit comments