Skip to content

Commit

Permalink
Fix constant names. Add groth16_CalcPublicBufferSize function. Used i…
Browse files Browse the repository at this point in the history
…t to
  • Loading branch information
OBrezhniev committed Dec 27, 2023
1 parent f9e9974 commit 83ee2f3
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 24 deletions.
23 changes: 13 additions & 10 deletions src/main_prover.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,29 +26,33 @@ int main(int argc, char **argv)
std::string proofFilename = argv[3];
std::string publicFilename = argv[4];

BinFileUtils::FileLoader zkeyFileLoader(zkeyFilename);
BinFileUtils::FileLoader wtnsFileLoader(wtnsFilename);

char proofBuffer[BufferSize];
char publicBuffer[BufferSize];

size_t publicBufferSize = groth16_CalcPublicBufferSize(
zkeyFileLoader.dataBuffer(),
zkeyFileLoader.dataSize()
);

char publicBuffer[publicBufferSize];

size_t proofSize = sizeof(proofBuffer);
size_t publicSize = sizeof(publicBuffer);
char errorMessage[256];
int error = 0;

BinFileUtils::FileLoader zkeyFileLoader(zkeyFilename);
BinFileUtils::FileLoader wtnsFileLoader(wtnsFilename);

error = groth16_prover(zkeyFileLoader.dataBuffer(), zkeyFileLoader.dataSize(),
wtnsFileLoader.dataBuffer(), wtnsFileLoader.dataSize(),
proofBuffer, &proofSize,
publicBuffer, &publicSize,
errorMessage, sizeof(errorMessage));

if (error == PPROVER_ERROR_SHORT_BUFFER) {

if (error == PROVER_ERROR_SHORT_BUFFER) {
std::cerr << "Error: Short buffer for proof or public" << '\n';
return EXIT_FAILURE;
}

else if (error) {
} else if (error) {
std::cerr << errorMessage << '\n';
return EXIT_FAILURE;
}
Expand All @@ -66,7 +70,6 @@ int main(int argc, char **argv)
} catch (std::exception* e) {
std::cerr << e->what() << '\n';
return EXIT_FAILURE;

} catch (std::exception& e) {
std::cerr << e.what() << '\n';
return EXIT_FAILURE;
Expand Down
27 changes: 19 additions & 8 deletions src/prover.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ using json = nlohmann::json;

static size_t ProofBufferMinSize()
{
return 726;
return 810;
}

static size_t PublicBufferMinSize(size_t count)
{
return count * 81 + 3;
return count * 82 + 4;
}

static void VerifyPrimes(mpz_srcptr zkey_prime, mpz_srcptr wtns_prime)
Expand Down Expand Up @@ -54,6 +54,17 @@ std::string BuildPublicString(AltBn128::FrElement *wtnsData, size_t nPublic)
return jsonPublic.dump();
}

unsigned long groth16_CalcPublicBufferSize(const void *zkey_buffer, unsigned long zkey_size) {
try {
BinFileUtils::BinFile zkey(zkey_buffer, zkey_size, "zkey", 1);
auto zkeyHeader = ZKeyUtils::loadHeader(&zkey);
return PublicBufferMinSize(zkeyHeader->nPublic);
} catch (...) {
}

return 0;
}

int
groth16_prover(const void *zkey_buffer, unsigned long zkey_size,
const void *wtns_buffer, unsigned long wtns_size,
Expand All @@ -76,7 +87,7 @@ groth16_prover(const void *zkey_buffer, unsigned long zkey_size,
*proof_size = proofMinSize;
*public_size = publicMinSize;

return PPROVER_ERROR_SHORT_BUFFER;
return PROVER_ERROR_SHORT_BUFFER;
}

VerifyPrimes(zkeyHeader->rPrime, wtnsHeader->prime);
Expand Down Expand Up @@ -112,7 +123,7 @@ groth16_prover(const void *zkey_buffer, unsigned long zkey_size,
*proof_size = stringProofSize;
*public_size = stringPublicSize;

return PPROVER_ERROR_SHORT_BUFFER;
return PROVER_ERROR_SHORT_BUFFER;
}

std::strncpy(proof_buffer, stringProof.data(), *proof_size);
Expand All @@ -123,22 +134,22 @@ groth16_prover(const void *zkey_buffer, unsigned long zkey_size,
if (error_msg) {
strncpy(error_msg, e.what(), error_msg_maxsize);
}
return PPROVER_ERROR;
return PROVER_ERROR;

} catch (std::exception *e) {

if (error_msg) {
strncpy(error_msg, e->what(), error_msg_maxsize);
}
delete e;
return PPROVER_ERROR;
return PROVER_ERROR;

} catch (...) {
if (error_msg) {
strncpy(error_msg, "unknown error", error_msg_maxsize);
}
return PPROVER_ERROR;
return PROVER_ERROR;
}

return PRPOVER_OK;
return PROVER_OK;
}
18 changes: 12 additions & 6 deletions src/prover.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,23 @@ extern "C" {
#endif

//Error codes returned by the functions.
#define PRPOVER_OK 0x0
#define PPROVER_ERROR 0x1
#define PPROVER_ERROR_SHORT_BUFFER 0x2
#define PROVER_OK 0x0
#define PROVER_ERROR 0x1
#define PROVER_ERROR_SHORT_BUFFER 0x2

/**
* Calculates buffer size to output public signals as json string
* @returns buffer size in bytes or 0 in case of an error
*/
unsigned long groth16_CalcPublicBufferSize(const void *zkey_buffer, unsigned long zkey_size);

/**
* groth16_prover
* @return error code:
* PRPOVER_OK - in case of success.
* PPROVER_ERROR - in case of an error.
* PROVER_OK - in case of success
* PPOVER_ERROR - in case of an error
* PROVER_ERROR_SHORT_BUFFER - in case of a short buffer error, also updates proof_size and public_size with actual proof and public sizess
*/

int
groth16_prover(const void *zkey_buffer, unsigned long zkey_size,
const void *wtns_buffer, unsigned long wtns_size,
Expand Down

0 comments on commit 83ee2f3

Please sign in to comment.