2013-04-01 07:52:58 +02:00
|
|
|
#include "num.c"
|
|
|
|
#include "field.c"
|
|
|
|
#include "group.c"
|
|
|
|
#include "ecmult.c"
|
|
|
|
#include "ecdsa.c"
|
2013-03-31 06:34:15 +02:00
|
|
|
|
2013-04-01 07:21:05 +02:00
|
|
|
void secp256k1_start(void) {
|
2013-03-31 06:34:15 +02:00
|
|
|
secp256k1_num_start();
|
|
|
|
secp256k1_fe_start();
|
2013-03-31 17:02:52 +02:00
|
|
|
secp256k1_ge_start();
|
2013-04-01 06:29:30 +02:00
|
|
|
secp256k1_ecmult_start();
|
2013-03-31 06:34:15 +02:00
|
|
|
}
|
|
|
|
|
2013-04-01 07:21:05 +02:00
|
|
|
void secp256k1_stop(void) {
|
2013-04-01 06:29:30 +02:00
|
|
|
secp256k1_ecmult_stop();
|
2013-03-31 17:02:52 +02:00
|
|
|
secp256k1_ge_stop();
|
2013-03-31 06:34:15 +02:00
|
|
|
secp256k1_fe_stop();
|
|
|
|
secp256k1_num_stop();
|
|
|
|
}
|
|
|
|
|
2013-04-01 07:21:05 +02:00
|
|
|
int secp256k1_ecdsa_verify(const unsigned char *msg, int msglen, const unsigned char *sig, int siglen, const unsigned char *pubkey, int pubkeylen) {
|
2013-03-24 10:38:35 +01:00
|
|
|
int ret = -3;
|
|
|
|
secp256k1_num_t m;
|
|
|
|
secp256k1_num_init(&m);
|
2013-04-01 07:21:05 +02:00
|
|
|
secp256k1_ecdsa_sig_t s;
|
|
|
|
secp256k1_ecdsa_sig_init(&s);
|
2013-03-31 17:02:52 +02:00
|
|
|
secp256k1_gej_t q;
|
2013-03-24 10:38:35 +01:00
|
|
|
secp256k1_num_set_bin(&m, msg, msglen);
|
2013-04-01 07:21:05 +02:00
|
|
|
|
|
|
|
if (!secp256k1_ecdsa_pubkey_parse(&q, pubkey, pubkeylen)) {
|
2013-03-24 10:38:35 +01:00
|
|
|
ret = -1;
|
|
|
|
goto end;
|
|
|
|
}
|
2013-04-01 07:21:05 +02:00
|
|
|
if (!secp256k1_ecdsa_sig_parse(&s, sig, siglen)) {
|
2013-03-24 10:38:35 +01:00
|
|
|
ret = -2;
|
|
|
|
goto end;
|
|
|
|
}
|
2013-04-01 07:21:05 +02:00
|
|
|
if (!secp256k1_ecdsa_sig_verify(&s, &q, &m)) {
|
2013-03-24 10:38:35 +01:00
|
|
|
ret = 0;
|
|
|
|
goto end;
|
2013-03-16 15:51:55 +01:00
|
|
|
}
|
2013-03-24 10:38:35 +01:00
|
|
|
ret = 1;
|
|
|
|
end:
|
2013-04-01 07:21:05 +02:00
|
|
|
secp256k1_ecdsa_sig_free(&s);
|
2013-03-24 10:38:35 +01:00
|
|
|
secp256k1_num_free(&m);
|
|
|
|
return ret;
|
2013-03-16 15:51:55 +01:00
|
|
|
}
|
|
|
|
|