diff --git a/goldilocks_hash/cbits/goldilocks.c b/cbits/goldilocks.c similarity index 100% rename from goldilocks_hash/cbits/goldilocks.c rename to cbits/goldilocks.c diff --git a/goldilocks_hash/cbits/goldilocks.h b/cbits/goldilocks.h similarity index 100% rename from goldilocks_hash/cbits/goldilocks.h rename to cbits/goldilocks.h diff --git a/goldilocks_hash/cbits/monolith_constants.inc b/cbits/monolith_constants.inc similarity index 100% rename from goldilocks_hash/cbits/monolith_constants.inc rename to cbits/monolith_constants.inc diff --git a/goldilocks_hash/cbits/monolith_conv_uint64.inc b/cbits/monolith_conv_uint64.inc similarity index 100% rename from goldilocks_hash/cbits/monolith_conv_uint64.inc rename to cbits/monolith_conv_uint64.inc diff --git a/goldilocks_hash/cbits/poseidon2_constants.inc b/cbits/poseidon2_constants.inc similarity index 100% rename from goldilocks_hash/cbits/poseidon2_constants.inc rename to cbits/poseidon2_constants.inc diff --git a/goldilocks_hash.nimble b/goldilocks_hash.nimble index deb26e3..0366fe6 100644 --- a/goldilocks_hash.nimble +++ b/goldilocks_hash.nimble @@ -1,5 +1,6 @@ -version = "0.0.1" -author = "Balazs Komuves" +version = "0.0.1" +author = "Balazs Komuves" description = "Airthmetic hash functions (Poseidon2, Monolith) over the Goldilocks field" -license = "MIT" +license = "MIT" +installDirs = @["cbits"] diff --git a/goldilocks_hash/goldilocks.nim b/goldilocks_hash/goldilocks.nim index b7ecc08..d13db8d 100644 --- a/goldilocks_hash/goldilocks.nim +++ b/goldilocks_hash/goldilocks.nim @@ -1,11 +1,22 @@ -{. compile: "../goldilocks_hash/cbits/goldilocks.c" .} +import os import ./types -func neg* (x: F ): F {. header: "../goldilocks_hash/cbits/goldilocks.h", importc: "goldilocks_neg", cdecl .} -func `+`* (x, y: F): F {. header: "../goldilocks_hash/cbits/goldilocks.h", importc: "goldilocks_add", cdecl .} -func `-`* (x, y: F): F {. header: "../goldilocks_hash/cbits/goldilocks.h", importc: "goldilocks_sub", cdecl .} -func `*`* (x, y: F): F {. header: "../goldilocks_hash/cbits/goldilocks.h", importc: "goldilocks_mul", cdecl .} +#------------------------------------------------------------------------------- +# build system hack + +const + root = currentSourcePath.parentDir.parentDir + +{. passc: "-I" & root & "/cbits" .} +{. compile: root & "/cbits/goldilocks.c" .} + +#------------------------------------------------------------------------------- + +func neg* (x: F ): F {. header: "goldilocks.h", importc: "goldilocks_neg", cdecl .} +func `+`* (x, y: F): F {. header: "goldilocks.h", importc: "goldilocks_add", cdecl .} +func `-`* (x, y: F): F {. header: "goldilocks.h", importc: "goldilocks_sub", cdecl .} +func `*`* (x, y: F): F {. header: "goldilocks.h", importc: "goldilocks_mul", cdecl .} proc `+=`* (x: var F, y: F) = x = x + y proc `-=`* (x: var F, y: F) = x = x - y diff --git a/goldilocks_hash/monolith/compress.nim b/goldilocks_hash/monolith/compress.nim index d2d660f..adb7ca4 100644 --- a/goldilocks_hash/monolith/compress.nim +++ b/goldilocks_hash/monolith/compress.nim @@ -1,7 +1,7 @@ import ../types -proc c_compress(a, b: var Digest, key: uint64, output: var Digest) {. header: "../goldilocks_hash/cbits/goldilocks.h", importc: "goldilocks_monolith_keyed_compress", cdecl .} +proc c_compress(a, b: var Digest, key: uint64, output: var Digest) {. header: "goldilocks.h", importc: "goldilocks_monolith_keyed_compress", cdecl .} # keyed compression function func compress*(a, b: Digest, key: uint64 = 0) : Digest = diff --git a/goldilocks_hash/monolith/permutation.nim b/goldilocks_hash/monolith/permutation.nim index 9b1b8a1..45cb2fb 100644 --- a/goldilocks_hash/monolith/permutation.nim +++ b/goldilocks_hash/monolith/permutation.nim @@ -2,8 +2,8 @@ import ../types # the Monolith permutation (mutable, in-place version) -proc permInPlace* (state: var State) {. header: "../goldilocks_hash/cbits/goldilocks.h", importc: "goldilocks_monolith_permutation", cdecl .} -proc permInPlaceF12*(state: var F12 ) {. header: "../goldilocks_hash/cbits/goldilocks.h", importc: "goldilocks_monolith_permutation", cdecl .} +proc permInPlace* (state: var State) {. header: "goldilocks.h", importc: "goldilocks_monolith_permutation", cdecl .} +proc permInPlaceF12*(state: var F12 ) {. header: "goldilocks.h", importc: "goldilocks_monolith_permutation", cdecl .} # the Monolith permutation (pure version) func perm*(state: State): State = diff --git a/goldilocks_hash/monolith/sponge.nim b/goldilocks_hash/monolith/sponge.nim index e121d01..5ed454d 100644 --- a/goldilocks_hash/monolith/sponge.nim +++ b/goldilocks_hash/monolith/sponge.nim @@ -79,8 +79,8 @@ func digestNim*(rate: static int = 8, elements: openArray[F]): Digest = #--------------------------------------- -proc digestFeltsRawC(rate: int, len: int, input: ptr F , hash: var F4) {. header: "../goldilocks_hash/cbits/goldilocks.h", importc: "goldilocks_monolith_felts_digest", cdecl .} -proc digestBytesRawC(rate: int, len: int, input: ptr byte, hash: var F4) {. header: "../goldilocks_hash/cbits/goldilocks.h", importc: "goldilocks_monolith_bytes_digest", cdecl .} +proc digestFeltsRawC(rate: int, len: int, input: ptr F , hash: var F4) {. header: "goldilocks.h", importc: "goldilocks_monolith_felts_digest", cdecl .} +proc digestBytesRawC(rate: int, len: int, input: ptr byte, hash: var F4) {. header: "goldilocks.h", importc: "goldilocks_monolith_bytes_digest", cdecl .} func digestFeltsC*(rate: static int = 8, felts: openArray[F]): Digest = var digest : F4 diff --git a/goldilocks_hash/poseidon2/compress.nim b/goldilocks_hash/poseidon2/compress.nim index 30201ad..b3a5ebf 100644 --- a/goldilocks_hash/poseidon2/compress.nim +++ b/goldilocks_hash/poseidon2/compress.nim @@ -1,7 +1,7 @@ import ../types -proc c_compress(a, b: var Digest, key: uint64, output: var Digest) {. header: "../goldilocks_hash/cbits/goldilocks.h", importc: "goldilocks_poseidon2_keyed_compress", cdecl .} +proc c_compress(a, b: var Digest, key: uint64, output: var Digest) {. header: "goldilocks.h", importc: "goldilocks_poseidon2_keyed_compress", cdecl .} # keyed compression function func compress*(a, b: Digest, key: uint64 = 0) : Digest = diff --git a/goldilocks_hash/poseidon2/permutation.nim b/goldilocks_hash/poseidon2/permutation.nim index a033f5a..8d66d63 100644 --- a/goldilocks_hash/poseidon2/permutation.nim +++ b/goldilocks_hash/poseidon2/permutation.nim @@ -2,8 +2,8 @@ import ../types # the Poseidon2 permutation (mutable, in-place version) -proc permInPlace* (state: var State) {. header: "../goldilocks_hash/cbits/goldilocks.h", importc: "goldilocks_poseidon2_permutation", cdecl .} -proc permInPlaceF12*(state: var F12 ) {. header: "../goldilocks_hash/cbits/goldilocks.h", importc: "goldilocks_poseidon2_permutation", cdecl .} +proc permInPlace* (state: var State) {. header: "goldilocks.h", importc: "goldilocks_poseidon2_permutation", cdecl .} +proc permInPlaceF12*(state: var F12 ) {. header: "goldilocks.h", importc: "goldilocks_poseidon2_permutation", cdecl .} # the Poseidon2 permutation (pure version) func perm*(state: State): State = diff --git a/goldilocks_hash/poseidon2/sponge.nim b/goldilocks_hash/poseidon2/sponge.nim index b004ef4..1f1834e 100644 --- a/goldilocks_hash/poseidon2/sponge.nim +++ b/goldilocks_hash/poseidon2/sponge.nim @@ -79,8 +79,8 @@ func digestNim*(rate: static int = 8, elements: openArray[F]): Digest = #--------------------------------------- -proc digestFeltsRawC(rate: int, len: int, input: ptr F , hash: var F4) {. header: "../goldilocks_hash/cbits/goldilocks.h", importc: "goldilocks_poseidon2_felts_digest", cdecl .} -proc digestBytesRawC(rate: int, len: int, input: ptr byte, hash: var F4) {. header: "../goldilocks_hash/cbits/goldilocks.h", importc: "goldilocks_poseidon2_bytes_digest", cdecl .} +proc digestFeltsRawC(rate: int, len: int, input: ptr F , hash: var F4) {. header: "goldilocks.h", importc: "goldilocks_poseidon2_felts_digest", cdecl .} +proc digestBytesRawC(rate: int, len: int, input: ptr byte, hash: var F4) {. header: "goldilocks.h", importc: "goldilocks_poseidon2_bytes_digest", cdecl .} func digestFeltsC*(rate: static int = 8, felts: openArray[F]): Digest = var digest : F4