diff --git a/Makefile b/Makefile index 0474079..13dafb0 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ .PHONY: rlnlib rlnlib: - cd lib/rln && cargo build --release + cd lib/rln && cargo build --release --target=aarch64-apple-darwin cbindgen --config ../cbindgen.toml --crate rln --output librln.h --lang c mv lib/rln/target/release/librln.* lib/ diff --git a/lib/librln.d b/lib/librln.d index b115406..863f40b 100644 --- a/lib/librln.d +++ b/lib/librln.d @@ -1 +1 @@ -/Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/target/release/librln.rlib: /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/circuit/mod.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/circuit/polynomial.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/circuit/poseidon.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/circuit/rln.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/ffi.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/lib.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/merkle.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/poseidon.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/public.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/utils.rs +/Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/target/aarch64-apple-darwin/release/librln.dylib: /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/circuit/mod.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/circuit/polynomial.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/circuit/poseidon.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/circuit/rln.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/ffi.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/lib.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/merkle.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/poseidon.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/public.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/utils.rs diff --git a/lib/librln.rlib b/lib/librln.rlib index 6b0b650..efe37ed 100644 Binary files a/lib/librln.rlib and b/lib/librln.rlib differ diff --git a/pkg/rln/rln.go b/pkg/rln/rln.go new file mode 100644 index 0000000..b6b8b7b --- /dev/null +++ b/pkg/rln/rln.go @@ -0,0 +1,51 @@ +package rln + +/* +#cgo LDFLAGS: -L${SRCDIR}/../../lib/ -llibrln -ldl -lm +#include "./../../lib/librln.h" +*/ +import "C" +import "unsafe" + +type Buffer struct { + Ptr *[]byte + Len uint +} + +type RLN struct { + ptr *C.RLN_Bn256 +} + +//func (r *RLN) CircuitFromParams(depth int, parameters []byte) bool { +// return C.new_circuit_from_params(depth, toBuffer(parameters), r.ptr) +//} +// +//func (r *RLN) GenerateProof(input, output []byte) bool { +// //bool generate_proof(const struct RLN_Bn256 *ctx, +// // const struct Buffer *input_buffer, +// //struct Buffer *output_buffer); +// +// return C.generate_proof(r.ptr, toBuffer(input), toBuffer(output)); +//} + +func (r *RLN) GenerateKey() { + C.key_gen(r.ptr, &Buffer{}) + //bool key_gen(const struct RLN_Bn256 *ctx, struct Buffer *keypair_buffer); + +} + +func toBuffer(data []byte) C.Buffer { + dataPtr, dataLen := sliceToPtr(data) + return C.Buffer{ + ptr: dataPtr, + len: C.int(dataLen), + } +} + +func sliceToPtr(slice []byte) (*C.uchar, C.int) { + if len(slice) == 0 { + return nil, 0 + } else { + return (*C.uchar)(unsafe.Pointer(&slice[0])), C.int(len(slice)) + } +} diff --git a/rln.go b/rln.go index 23d708c..4c8a123 100644 --- a/rln.go +++ b/rln.go @@ -1,11 +1,9 @@ package main -/* -#cgo CFLAGS: -I../lib -#include "./lib/librln.h" -*/ -import "C" +import "github.com/decanus/go-rln/pkg/rln" func main() { + r := &rln.RLN{} + r.GenerateKey() //C }