mirror of
https://github.com/logos-storage/nim-poseidon2.git
synced 2026-01-04 06:33:11 +00:00
22 lines
696 B
Nim
22 lines
696 B
Nim
import ./types
|
|
import constantine/math/arithmetic
|
|
import constantine/math/io/io_bigints
|
|
|
|
func unmarshal*(_: type F, bytes: openArray[byte]): F =
|
|
assert bytes.len <= 31
|
|
var padded: array[32, byte]
|
|
copyMem(addr padded[0], unsafeAddr bytes[0], bytes.len)
|
|
let bigint = B.unmarshal(padded, littleEndian)
|
|
return F.fromBig(bigint)
|
|
|
|
func unmarshal*(_: type seq[F], bytes: openArray[byte]): seq[F] =
|
|
const chunkLen = 31
|
|
var elements: seq[F]
|
|
var chunkStart = 0
|
|
while chunkStart < bytes.len:
|
|
let chunkEnd = min(chunkStart + 31, bytes.len)
|
|
let element = F.unmarshal(bytes.toOpenArray(chunkStart, chunkEnd - 1))
|
|
elements.add(element)
|
|
chunkStart += chunkLen
|
|
return elements
|