mirror of
https://github.com/logos-storage/nim-poseidon2.git
synced 2026-01-03 22:23:07 +00:00
29 lines
894 B
Nim
29 lines
894 B
Nim
import ./types
|
|
import ./merkle
|
|
import ./sponge
|
|
|
|
type SpongeMerkle* = object
|
|
merkle: Merkle
|
|
|
|
func init*(_: type SpongeMerkle): SpongeMerkle =
|
|
SpongeMerkle(merkle: Merkle.init())
|
|
|
|
func update*(spongemerkle: var SpongeMerkle, chunk: openArray[byte]) =
|
|
let digest = Sponge.digest(chunk, rate = 2)
|
|
spongemerkle.merkle.update(digest)
|
|
|
|
func finish*(spongemerkle: var SpongeMerkle): F =
|
|
return spongemerkle.merkle.finish()
|
|
|
|
func digest*(_: type SpongeMerkle, bytes: openArray[byte], chunkSize: int): F =
|
|
## Hashes chunks of data with a sponge of rate 2, and combines the
|
|
## resulting chunk hashes in a merkle root.
|
|
var spongemerkle = SpongeMerkle.init()
|
|
var index = 0
|
|
while index < bytes.len:
|
|
let start = index
|
|
let finish = min(index + chunkSize, bytes.len)
|
|
spongemerkle.update(bytes.toOpenArray(start, finish - 1))
|
|
index += chunkSize
|
|
return spongemerkle.finish()
|