diff --git a/include/secp256k1.h b/include/secp256k1.h index 0b2620d..2bc6909 100644 --- a/include/secp256k1.h +++ b/include/secp256k1.h @@ -5,6 +5,8 @@ extern "C" { # endif +#include + /* These rules specify the order of arguments in API calls: * * 1. Context pointers go first, followed by output arguments, combined @@ -228,7 +230,7 @@ SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_parse( const secp256k1_context_t* ctx, secp256k1_pubkey_t* pubkey, const unsigned char *input, - int inputlen + size_t inputlen ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); /** Serialize a pubkey object into a serialized byte sequence. @@ -246,7 +248,7 @@ SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_parse( int secp256k1_ec_pubkey_serialize( const secp256k1_context_t* ctx, unsigned char *output, - int *outputlen, + size_t *outputlen, const secp256k1_pubkey_t* pubkey, int compressed ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); @@ -265,7 +267,7 @@ int secp256k1_ecdsa_signature_parse_der( const secp256k1_context_t* ctx, secp256k1_ecdsa_signature_t* sig, const unsigned char *input, - int inputlen + size_t inputlen ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); /** Serialize an ECDSA signature in DER format. @@ -282,7 +284,7 @@ int secp256k1_ecdsa_signature_parse_der( int secp256k1_ecdsa_signature_serialize_der( const secp256k1_context_t* ctx, unsigned char *output, - int *outputlen, + size_t *outputlen, const secp256k1_ecdsa_signature_t* sig ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); @@ -406,7 +408,7 @@ SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_create( SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_export( const secp256k1_context_t* ctx, unsigned char *privkey, - int *privkeylen, + size_t *privkeylen, const unsigned char *seckey, int compressed ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); @@ -429,7 +431,7 @@ SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_import( const secp256k1_context_t* ctx, unsigned char *seckey, const unsigned char *privkey, - int privkeylen + size_t privkeylen ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); /** Tweak a private key by adding tweak to it. diff --git a/src/bench_recover.c b/src/bench_recover.c index 3167ee7..f59b0a2 100644 --- a/src/bench_recover.c +++ b/src/bench_recover.c @@ -23,7 +23,7 @@ void bench_recover(void* arg) { for (i = 0; i < 20000; i++) { int j; - int pubkeylen = 33; + size_t pubkeylen = 33; secp256k1_ecdsa_recoverable_signature_t sig; CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(data->ctx, &sig, data->sig, i % 2)); CHECK(secp256k1_ecdsa_recover(data->ctx, &pubkey, &sig, data->msg)); diff --git a/src/bench_schnorr_verify.c b/src/bench_schnorr_verify.c index 192a383..251a174 100644 --- a/src/bench_schnorr_verify.c +++ b/src/bench_schnorr_verify.c @@ -16,7 +16,7 @@ typedef struct { unsigned char key[32]; unsigned char sig[64]; unsigned char pubkey[33]; - int pubkeylen; + size_t pubkeylen; } benchmark_schnorr_sig_t; typedef struct { diff --git a/src/bench_sign.c b/src/bench_sign.c index 2f4107f..97ecdb1 100644 --- a/src/bench_sign.c +++ b/src/bench_sign.c @@ -28,7 +28,7 @@ static void bench_sign(void* arg) { unsigned char sig[74]; for (i = 0; i < 20000; i++) { - int siglen = 74; + size_t siglen = 74; int j; secp256k1_ecdsa_signature_t signature; CHECK(secp256k1_ecdsa_sign(data->ctx, &signature, data->msg, data->key, NULL, NULL)); diff --git a/src/bench_verify.c b/src/bench_verify.c index f07cbb6..99fe3a5 100644 --- a/src/bench_verify.c +++ b/src/bench_verify.c @@ -16,9 +16,9 @@ typedef struct { unsigned char msg[32]; unsigned char key[32]; unsigned char sig[72]; - int siglen; + size_t siglen; unsigned char pubkey[33]; - int pubkeylen; + size_t pubkeylen; } benchmark_verify_t; static void benchmark_verify(void* arg) { diff --git a/src/ecdsa.h b/src/ecdsa.h index c361728..0d9d00a 100644 --- a/src/ecdsa.h +++ b/src/ecdsa.h @@ -7,12 +7,14 @@ #ifndef _SECP256K1_ECDSA_ #define _SECP256K1_ECDSA_ +#include + #include "scalar.h" #include "group.h" #include "ecmult.h" -static int secp256k1_ecdsa_sig_parse(secp256k1_scalar_t *r, secp256k1_scalar_t *s, const unsigned char *sig, int size); -static int secp256k1_ecdsa_sig_serialize(unsigned char *sig, int *size, const secp256k1_scalar_t *r, const secp256k1_scalar_t *s); +static int secp256k1_ecdsa_sig_parse(secp256k1_scalar_t *r, secp256k1_scalar_t *s, const unsigned char *sig, size_t size); +static int secp256k1_ecdsa_sig_serialize(unsigned char *sig, size_t *size, const secp256k1_scalar_t *r, const secp256k1_scalar_t *s); static int secp256k1_ecdsa_sig_verify(const secp256k1_ecmult_context_t *ctx, const secp256k1_scalar_t* r, const secp256k1_scalar_t* s, const secp256k1_ge_t *pubkey, const secp256k1_scalar_t *message); static int secp256k1_ecdsa_sig_sign(const secp256k1_ecmult_gen_context_t *ctx, secp256k1_scalar_t* r, secp256k1_scalar_t* s, const secp256k1_scalar_t *seckey, const secp256k1_scalar_t *message, const secp256k1_scalar_t *nonce, int *recid); static int secp256k1_ecdsa_sig_recover(const secp256k1_ecmult_context_t *ctx, const secp256k1_scalar_t* r, const secp256k1_scalar_t* s, secp256k1_ge_t *pubkey, const secp256k1_scalar_t *message, int recid); diff --git a/src/ecdsa_impl.h b/src/ecdsa_impl.h index c0c44fa..7bfc145 100644 --- a/src/ecdsa_impl.h +++ b/src/ecdsa_impl.h @@ -46,12 +46,12 @@ static const secp256k1_fe_t secp256k1_ecdsa_const_p_minus_order = SECP256K1_FE_C 0, 0, 0, 1, 0x45512319UL, 0x50B75FC4UL, 0x402DA172UL, 0x2FC9BAEEUL ); -static int secp256k1_ecdsa_sig_parse(secp256k1_scalar_t *rr, secp256k1_scalar_t *rs, const unsigned char *sig, int size) { +static int secp256k1_ecdsa_sig_parse(secp256k1_scalar_t *rr, secp256k1_scalar_t *rs, const unsigned char *sig, size_t size) { unsigned char ra[32] = {0}, sa[32] = {0}; const unsigned char *rp; const unsigned char *sp; - int lenr; - int lens; + size_t lenr; + size_t lens; int overflow; if (sig[0] != 0x30) { return 0; @@ -109,10 +109,10 @@ static int secp256k1_ecdsa_sig_parse(secp256k1_scalar_t *rr, secp256k1_scalar_t return 1; } -static int secp256k1_ecdsa_sig_serialize(unsigned char *sig, int *size, const secp256k1_scalar_t* ar, const secp256k1_scalar_t* as) { +static int secp256k1_ecdsa_sig_serialize(unsigned char *sig, size_t *size, const secp256k1_scalar_t* ar, const secp256k1_scalar_t* as) { unsigned char r[33] = {0}, s[33] = {0}; unsigned char *rp = r, *sp = s; - int lenR = 33, lenS = 33; + size_t lenR = 33, lenS = 33; secp256k1_scalar_get_b32(&r[1], ar); secp256k1_scalar_get_b32(&s[1], as); while (lenR > 1 && rp[0] == 0 && rp[1] < 0x80) { lenR--; rp++; } diff --git a/src/eckey.h b/src/eckey.h index 53b8184..1357013 100644 --- a/src/eckey.h +++ b/src/eckey.h @@ -7,16 +7,18 @@ #ifndef _SECP256K1_ECKEY_ #define _SECP256K1_ECKEY_ +#include + #include "group.h" #include "scalar.h" #include "ecmult.h" #include "ecmult_gen.h" -static int secp256k1_eckey_pubkey_parse(secp256k1_ge_t *elem, const unsigned char *pub, int size); -static int secp256k1_eckey_pubkey_serialize(secp256k1_ge_t *elem, unsigned char *pub, int *size, int compressed); +static int secp256k1_eckey_pubkey_parse(secp256k1_ge_t *elem, const unsigned char *pub, size_t size); +static int secp256k1_eckey_pubkey_serialize(secp256k1_ge_t *elem, unsigned char *pub, size_t *size, int compressed); -static int secp256k1_eckey_privkey_parse(secp256k1_scalar_t *key, const unsigned char *privkey, int privkeylen); -static int secp256k1_eckey_privkey_serialize(const secp256k1_ecmult_gen_context_t *ctx, unsigned char *privkey, int *privkeylen, const secp256k1_scalar_t *key, int compressed); +static int secp256k1_eckey_privkey_parse(secp256k1_scalar_t *key, const unsigned char *privkey, size_t privkeylen); +static int secp256k1_eckey_privkey_serialize(const secp256k1_ecmult_gen_context_t *ctx, unsigned char *privkey, size_t *privkeylen, const secp256k1_scalar_t *key, int compressed); static int secp256k1_eckey_privkey_tweak_add(secp256k1_scalar_t *key, const secp256k1_scalar_t *tweak); static int secp256k1_eckey_pubkey_tweak_add(const secp256k1_ecmult_context_t *ctx, secp256k1_ge_t *key, const secp256k1_scalar_t *tweak); diff --git a/src/eckey_impl.h b/src/eckey_impl.h index a332bd3..1893571 100644 --- a/src/eckey_impl.h +++ b/src/eckey_impl.h @@ -14,7 +14,7 @@ #include "group.h" #include "ecmult_gen.h" -static int secp256k1_eckey_pubkey_parse(secp256k1_ge_t *elem, const unsigned char *pub, int size) { +static int secp256k1_eckey_pubkey_parse(secp256k1_ge_t *elem, const unsigned char *pub, size_t size) { if (size == 33 && (pub[0] == 0x02 || pub[0] == 0x03)) { secp256k1_fe_t x; return secp256k1_fe_set_b32(&x, pub+1) && secp256k1_ge_set_xo_var(elem, &x, pub[0] == 0x03); @@ -33,7 +33,7 @@ static int secp256k1_eckey_pubkey_parse(secp256k1_ge_t *elem, const unsigned cha } } -static int secp256k1_eckey_pubkey_serialize(secp256k1_ge_t *elem, unsigned char *pub, int *size, int compressed) { +static int secp256k1_eckey_pubkey_serialize(secp256k1_ge_t *elem, unsigned char *pub, size_t *size, int compressed) { if (secp256k1_ge_is_infinity(elem)) { return 0; } @@ -51,7 +51,7 @@ static int secp256k1_eckey_pubkey_serialize(secp256k1_ge_t *elem, unsigned char return 1; } -static int secp256k1_eckey_privkey_parse(secp256k1_scalar_t *key, const unsigned char *privkey, int privkeylen) { +static int secp256k1_eckey_privkey_parse(secp256k1_scalar_t *key, const unsigned char *privkey, size_t privkeylen) { unsigned char c[32] = {0}; const unsigned char *end = privkey + privkeylen; int lenb = 0; @@ -94,10 +94,10 @@ static int secp256k1_eckey_privkey_parse(secp256k1_scalar_t *key, const unsigned return !overflow; } -static int secp256k1_eckey_privkey_serialize(const secp256k1_ecmult_gen_context_t *ctx, unsigned char *privkey, int *privkeylen, const secp256k1_scalar_t *key, int compressed) { +static int secp256k1_eckey_privkey_serialize(const secp256k1_ecmult_gen_context_t *ctx, unsigned char *privkey, size_t *privkeylen, const secp256k1_scalar_t *key, int compressed) { secp256k1_gej_t rp; secp256k1_ge_t r; - int pubkeylen = 0; + size_t pubkeylen = 0; secp256k1_ecmult_gen(ctx, &rp, key); secp256k1_ge_set_gej(&r, &rp); if (compressed) { diff --git a/src/modules/ecdh/tests_impl.h b/src/modules/ecdh/tests_impl.h index 271eb28..84f95ea 100644 --- a/src/modules/ecdh/tests_impl.h +++ b/src/modules/ecdh/tests_impl.h @@ -20,7 +20,7 @@ void test_ecdh_generator_basepoint(void) { unsigned char output_ecdh[32]; unsigned char output_ser[32]; unsigned char point_ser[33]; - int point_ser_len = sizeof(point_ser); + size_t point_ser_len = sizeof(point_ser); secp256k1_scalar_t s; random_scalar_order(&s); diff --git a/src/secp256k1.c b/src/secp256k1.c index 3334dd3..41b279b 100644 --- a/src/secp256k1.c +++ b/src/secp256k1.c @@ -141,7 +141,7 @@ static void secp256k1_pubkey_save(secp256k1_pubkey_t* pubkey, secp256k1_ge_t* ge } } -int secp256k1_ec_pubkey_parse(const secp256k1_context_t* ctx, secp256k1_pubkey_t* pubkey, const unsigned char *input, int inputlen) { +int secp256k1_ec_pubkey_parse(const secp256k1_context_t* ctx, secp256k1_pubkey_t* pubkey, const unsigned char *input, size_t inputlen) { secp256k1_ge_t Q; (void)ctx; @@ -154,7 +154,7 @@ int secp256k1_ec_pubkey_parse(const secp256k1_context_t* ctx, secp256k1_pubkey_t return 1; } -int secp256k1_ec_pubkey_serialize(const secp256k1_context_t* ctx, unsigned char *output, int *outputlen, const secp256k1_pubkey_t* pubkey, int compressed) { +int secp256k1_ec_pubkey_serialize(const secp256k1_context_t* ctx, unsigned char *output, size_t *outputlen, const secp256k1_pubkey_t* pubkey, int compressed) { secp256k1_ge_t Q; (void)ctx; @@ -186,7 +186,7 @@ static void secp256k1_ecdsa_signature_save(secp256k1_ecdsa_signature_t* sig, con } } -int secp256k1_ecdsa_signature_parse_der(const secp256k1_context_t* ctx, secp256k1_ecdsa_signature_t* sig, const unsigned char *input, int inputlen) { +int secp256k1_ecdsa_signature_parse_der(const secp256k1_context_t* ctx, secp256k1_ecdsa_signature_t* sig, const unsigned char *input, size_t inputlen) { secp256k1_scalar_t r, s; (void)ctx; @@ -202,7 +202,7 @@ int secp256k1_ecdsa_signature_parse_der(const secp256k1_context_t* ctx, secp256k } } -int secp256k1_ecdsa_signature_serialize_der(const secp256k1_context_t* ctx, unsigned char *output, int *outputlen, const secp256k1_ecdsa_signature_t* sig) { +int secp256k1_ecdsa_signature_serialize_der(const secp256k1_context_t* ctx, unsigned char *output, size_t *outputlen, const secp256k1_ecdsa_signature_t* sig) { secp256k1_scalar_t r, s; (void)ctx; @@ -438,7 +438,7 @@ int secp256k1_ec_pubkey_tweak_mul(const secp256k1_context_t* ctx, secp256k1_pubk return ret; } -int secp256k1_ec_privkey_export(const secp256k1_context_t* ctx, unsigned char *privkey, int *privkeylen, const unsigned char *seckey, int compressed) { +int secp256k1_ec_privkey_export(const secp256k1_context_t* ctx, unsigned char *privkey, size_t *privkeylen, const unsigned char *seckey, int compressed) { secp256k1_scalar_t key; int ret = 0; VERIFY_CHECK(ctx != NULL); @@ -453,7 +453,7 @@ int secp256k1_ec_privkey_export(const secp256k1_context_t* ctx, unsigned char *p return ret; } -int secp256k1_ec_privkey_import(const secp256k1_context_t* ctx, unsigned char *seckey, const unsigned char *privkey, int privkeylen) { +int secp256k1_ec_privkey_import(const secp256k1_context_t* ctx, unsigned char *seckey, const unsigned char *privkey, size_t privkeylen) { secp256k1_scalar_t key; int ret = 0; ARG_CHECK(seckey != NULL); diff --git a/src/tests.c b/src/tests.c index 41a59aa..27e69e1 100644 --- a/src/tests.c +++ b/src/tests.c @@ -1378,7 +1378,7 @@ void test_point_times_order(const secp256k1_gej_t *point) { secp256k1_gej_t res1, res2; secp256k1_ge_t res3; unsigned char pub[65]; - int psize = 65; + size_t psize = 65; random_scalar_order_test(&x); secp256k1_scalar_negate(&nx, &x); secp256k1_ecmult(&ctx->ecmult_ctx, &res1, point, &x, &x); /* calc res1 = x * point + x * G; */ @@ -1845,12 +1845,12 @@ void test_ecdsa_end_to_end(void) { unsigned char privkey2[32]; secp256k1_ecdsa_signature_t signature[5]; unsigned char sig[74]; - int siglen = 74; + size_t siglen = 74; unsigned char pubkeyc[65]; - int pubkeyclen = 65; + size_t pubkeyclen = 65; secp256k1_pubkey_t pubkey; unsigned char seckey[300]; - int seckeylen = 300; + size_t seckeylen = 300; /* Generate a random key and message. */ { @@ -1949,7 +1949,7 @@ void test_random_pubkeys(void) { unsigned char in[65]; /* Generate some randomly sized pubkeys. */ uint32_t r = secp256k1_rand32(); - int len = (r & 3) == 0 ? 65 : 33; + size_t len = (r & 3) == 0 ? 65 : 33; r>>=2; if ((r & 3) == 0) { len = (r & 252) >> 3; @@ -1975,7 +1975,7 @@ void test_random_pubkeys(void) { unsigned char out[65]; unsigned char firstb; int res; - int size = len; + size_t size = len; firstb = in[0]; /* If the pubkey can be parsed, it should round-trip... */ CHECK(secp256k1_eckey_pubkey_serialize(&elem, out, &size, len == 33)); @@ -2046,7 +2046,7 @@ void test_ecdsa_edge_cases(void) { /*Signature where s would be zero.*/ { unsigned char signature[72]; - int siglen; + size_t siglen; const unsigned char nonce[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2152,7 +2152,7 @@ void test_ecdsa_edge_cases(void) { 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41, }; - int outlen = 300; + size_t outlen = 300; CHECK(!secp256k1_ec_privkey_export(ctx, privkey, &outlen, seckey, 0)); CHECK(!secp256k1_ec_privkey_export(ctx, privkey, &outlen, seckey, 1)); } @@ -2165,7 +2165,7 @@ void run_ecdsa_edge_cases(void) { #ifdef ENABLE_OPENSSL_TESTS EC_KEY *get_openssl_key(const secp256k1_scalar_t *key) { unsigned char privkey[300]; - int privkeylen; + size_t privkeylen; const unsigned char* pbegin = privkey; int compr = secp256k1_rand32() & 1; EC_KEY *ec_key = EC_KEY_new_by_curve_name(NID_secp256k1); @@ -2184,7 +2184,7 @@ void test_ecdsa_openssl(void) { secp256k1_scalar_t key, msg; EC_KEY *ec_key; unsigned int sigsize = 80; - int secp_sigsize = 80; + size_t secp_sigsize = 80; unsigned char message[32]; unsigned char signature[80]; secp256k1_rand256_test(message);