#include "num.cpp" #include "field.cpp" #include "group.cpp" #include "ecmult.cpp" #include "ecdsa.cpp" namespace secp256k1 { extern "C" void secp256k1_start(void) { secp256k1_num_start(); secp256k1_fe_start(); secp256k1_ge_start(); secp256k1_ecmult_start(); } extern "C" void secp256k1_stop(void) { secp256k1_ecmult_stop(); secp256k1_ge_stop(); secp256k1_fe_stop(); secp256k1_num_stop(); } extern "C" int secp256k1_ecdsa_verify(const unsigned char *msg, int msglen, const unsigned char *sig, int siglen, const unsigned char *pubkey, int pubkeylen) { int ret = -3; secp256k1_num_t m; secp256k1_num_init(&m); Signature s; secp256k1_gej_t q; secp256k1_num_set_bin(&m, msg, msglen); if (!ParsePubKey(q, pubkey, pubkeylen)) { ret = -1; goto end; } if (!s.Parse(sig, siglen)) { fprintf(stderr, "Can't parse signature: "); for (int i=0; i