update ffi

This commit is contained in:
Dmitriy Ryajov 2024-01-25 15:37:21 -06:00
parent 5743d10220
commit 261588d56e
No known key found for this signature in database
GPG Key ID: DA8C680CE7C657A4
3 changed files with 51 additions and 28 deletions

View File

@ -54,6 +54,14 @@ type Inputs* = object
elms*: ptr array[32, byte]
len*: uint
type VerifyingKey* = object
alpha1*: G1
beta2*: G2
gamma2*: G2
delta2*: G2
ic*: ptr G1
icLen*: uint
## # Safety
#
proc init_circom_compat*(r1cs_path: pointer,
@ -65,18 +73,32 @@ proc release_circom_compat*(ctx_ptr: ptr ptr CircomCompatCtx): void {.importc: "
proc release_buffer*(buff_ptr: ptr ptr Buffer): void {.importc: "release_buffer".}
## # Safety
#
proc prove_circuit*(ctx_ptr: ptr CircomCompatCtx,
proof_ptr: ptr ptr Proof,
inputs_ptr: ptr ptr Inputs): int32 {.importc: "prove_circuit".}
proc release_proof*(proof_ptr: ptr ptr Proof): void {.importc: "release_proof".}
proc release_inputs*(inputs_ptr: ptr ptr Inputs): void {.importc: "release_inputs".}
proc release_key*(key_ptr: ptr ptr VerifyingKey): void {.importc: "release_key".}
## # Safety
#
proc verify_circuit*(ctx_ptr: ptr CircomCompatCtx,
compress: bool,
proof: ptr Proof,
inputs: ptr Inputs): int32 {.importc: "verify_circuit".}
proc prove_circuit*(ctx_ptr: ptr CircomCompatCtx,
proof_ptr: ptr ptr Proof): int32 {.importc: "prove_circuit".}
## # Safety
#
proc get_pub_inputs*(ctx_ptr: ptr CircomCompatCtx,
inputs_ptr: ptr ptr Inputs): int32 {.importc: "get_pub_inputs".}
## # Safety
#
proc get_verifying_key*(ctx_ptr: ptr CircomCompatCtx,
vk_ptr: ptr ptr VerifyingKey): int32 {.importc: "get_verifying_key".}
## # Safety
#
proc verify_circuit*(proof: ptr Proof,
inputs: ptr Inputs,
pvk: ptr VerifyingKey): int32 {.importc: "verify_circuit".}
## # Safety
#

View File

@ -9,32 +9,33 @@ suite "Test circom compat nim":
wasmPath = "vendor/circom-compat-ffi/fixtures/mycircuit.wasm".cstring
var ctx: ptr CircomCompatCtx
let res = init_circom_compat(
check init_circom_compat(
r1csPath,
wasmPath,
nil,
ctx.addr)
ctx.addr) == ERR_OK
check ctx.push_input_numeric_i8("a".cstring, 3) == ERR_OK
check ctx.push_input_numeric_i8("b".cstring, 11) == ERR_OK
check ctx.push_input_i8("a".cstring, 3) == ERR_OK
check ctx.push_input_i8("b".cstring, 11) == ERR_OK
var proofBytes: ptr Buffer
var publicBytes: ptr Buffer
var proofPtr: ptr Proof
var inputsPtr: ptr Inputs
var vkPtr: ptr VerifyingKey
check ctx.prove_circuit(proofBytes.addr, publicBytes.addr) == ERR_OK
check ctx.get_pub_inputs(inputsPtr.addr) == ERR_OK
check ctx.prove_circuit(proofPtr.addr) == ERR_OK
check proofBytes.len > 0
check publicBytes.len > 0
check ctx.get_verifying_key(vkPtr.addr) == ERR_OK
check verify_circuit(proofPtr, inputsPtr, vkPtr) == ERR_OK
check ctx.verify_circuit(proofBytes, publicBytes) == ERR_OK
release_proof(proofPtr.addr)
check proofPtr == nil
release_inputs(inputsPtr.addr)
check inputsPtr == nil
release_key(vkPtr.addr)
check vkPtr == nil
ctx.addr.release_circom_compat()
check ctx == nil
proofBytes.addr.release_buffer()
check proofBytes == nil
publicBytes.addr.release_buffer()
check publicBytes == nil
check res == ERR_OK

@ -1 +1 @@
Subproject commit d6bb7a6b309072b98ebc42fe8f07170477541f53
Subproject commit 6028d1e0fc9d2cea9f4a0d7a6a55eca13d9f1017