mirror of
https://github.com/codex-storage/nim-poseidon2.git
synced 2025-02-22 15:58:31 +00:00
Merge pull request #15 from codex-storage/integers-to-field
integers to field elements
This commit is contained in:
commit
cfb4f97023
@ -8,5 +8,6 @@ export sponge
|
|||||||
export compress
|
export compress
|
||||||
export merkle
|
export merkle
|
||||||
export toBytes
|
export toBytes
|
||||||
|
export toF
|
||||||
export elements
|
export elements
|
||||||
export types
|
export types
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import ./types
|
import ./types
|
||||||
import constantine/math/arithmetic
|
import constantine/math/arithmetic
|
||||||
import constantine/math/io/io_bigints
|
import constantine/math/io/io_bigints
|
||||||
|
import constantine/math/io/io_fields
|
||||||
import constantine/math/config/curves
|
import constantine/math/config/curves
|
||||||
|
|
||||||
export curves
|
export curves
|
||||||
@ -35,3 +36,10 @@ iterator elements*(bytes: openArray[byte], _: type F): F =
|
|||||||
let finalChunk = bytes[chunkStart..<bytes.len] & endMarker
|
let finalChunk = bytes[chunkStart..<bytes.len] & endMarker
|
||||||
let finalElement = F.fromOpenArray(finalChunk)
|
let finalElement = F.fromOpenArray(finalChunk)
|
||||||
yield finalElement
|
yield finalElement
|
||||||
|
|
||||||
|
# Remark: since `fromInt()` does not work at compile time, this doesn't either
|
||||||
|
func toF*(a: SomeInteger | SomeUnsignedInt) : F =
|
||||||
|
when a is SomeInteger:
|
||||||
|
fromInt(result, a)
|
||||||
|
else:
|
||||||
|
fromUInt(result, a)
|
||||||
|
@ -18,12 +18,6 @@ func getZero*() : F =
|
|||||||
setZero(z)
|
setZero(z)
|
||||||
return z
|
return z
|
||||||
|
|
||||||
# Remark: since `fromInt()` does not work at compile time, this doesn't either
|
|
||||||
func toF*(a: int) : F =
|
|
||||||
var y : F
|
|
||||||
y.fromInt(a)
|
|
||||||
return y
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
const zero* : F = getZero()
|
const zero* : F = getZero()
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import std/unittest
|
import std/unittest
|
||||||
import constantine/math/arithmetic
|
import constantine/math/arithmetic
|
||||||
import poseidon2/types
|
import poseidon2/io
|
||||||
import poseidon2/permutation
|
import poseidon2/permutation
|
||||||
import poseidon2/compress
|
import poseidon2/compress
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import std/unittest
|
import std/unittest
|
||||||
import std/sequtils
|
import std/sequtils
|
||||||
import constantine/math/io/io_bigints
|
import constantine/math/io/io_bigints
|
||||||
|
import constantine/math/io/io_fields
|
||||||
import constantine/math/arithmetic
|
import constantine/math/arithmetic
|
||||||
import poseidon2/types
|
import poseidon2/types
|
||||||
import poseidon2/io
|
import poseidon2/io
|
||||||
@ -54,3 +55,29 @@ suite "conversion to/from bytes":
|
|||||||
var expected: array[32, byte]
|
var expected: array[32, byte]
|
||||||
marshal(expected, element.toBig(), littleEndian)
|
marshal(expected, element.toBig(), littleEndian)
|
||||||
check element.toBytes() == expected
|
check element.toBytes() == expected
|
||||||
|
|
||||||
|
suite "conversion from integers":
|
||||||
|
|
||||||
|
test "converts unsigned integers to a field element":
|
||||||
|
|
||||||
|
proc checkConversion[I](integer: I) =
|
||||||
|
var expected: F
|
||||||
|
fromUint(expected, integer)
|
||||||
|
check bool(integer.toF == expected)
|
||||||
|
|
||||||
|
checkConversion(0x11'u8)
|
||||||
|
checkConversion(0x1122'u16)
|
||||||
|
checkConversion(0x11223344'u32)
|
||||||
|
checkConversion(0x1122334455667788'u64)
|
||||||
|
|
||||||
|
test "converts signed integers to a field element":
|
||||||
|
|
||||||
|
proc checkConversion[I](integer: I) =
|
||||||
|
var expected: F
|
||||||
|
fromInt(expected, integer)
|
||||||
|
check bool(integer.toF == expected)
|
||||||
|
|
||||||
|
checkConversion(0x11'i8)
|
||||||
|
checkConversion(0x1122'i16)
|
||||||
|
checkConversion(0x11223344'i32)
|
||||||
|
checkConversion(0x1122334455667788'i64)
|
||||||
|
@ -3,9 +3,9 @@ import std/unittest
|
|||||||
import constantine/math/arithmetic
|
import constantine/math/arithmetic
|
||||||
import constantine/math/io/io_fields
|
import constantine/math/io/io_fields
|
||||||
import constantine/math/io/io_bigints
|
import constantine/math/io/io_bigints
|
||||||
import constantine/math/config/curves
|
|
||||||
|
|
||||||
import poseidon2/types
|
import poseidon2/types
|
||||||
|
import poseidon2/io
|
||||||
import poseidon2/permutation
|
import poseidon2/permutation
|
||||||
|
|
||||||
suite "permutation":
|
suite "permutation":
|
||||||
|
@ -5,6 +5,7 @@ import constantine/math/io/io_fields
|
|||||||
import constantine/math/arithmetic
|
import constantine/math/arithmetic
|
||||||
|
|
||||||
import poseidon2/types
|
import poseidon2/types
|
||||||
|
import poseidon2/io
|
||||||
import poseidon2
|
import poseidon2
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
|
Loading…
x
Reference in New Issue
Block a user