Changeset View
Changeset View
Standalone View
Standalone View
src/secp256k1/src/secp256k1.c
Show First 20 Lines • Show All 513 Lines • ▼ Show 20 Lines | int secp256k1_ec_pubkey_create(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *seckey) { | ||||
int ret = 0; | int ret = 0; | ||||
VERIFY_CHECK(ctx != NULL); | VERIFY_CHECK(ctx != NULL); | ||||
ARG_CHECK(pubkey != NULL); | ARG_CHECK(pubkey != NULL); | ||||
memset(pubkey, 0, sizeof(*pubkey)); | memset(pubkey, 0, sizeof(*pubkey)); | ||||
ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx)); | ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx)); | ||||
ARG_CHECK(seckey != NULL); | ARG_CHECK(seckey != NULL); | ||||
secp256k1_scalar_set_b32(&sec, seckey, &overflow); | secp256k1_scalar_set_b32(&sec, seckey, &overflow); | ||||
ret = (!overflow) & (!secp256k1_scalar_is_zero(&sec)); | ret = !overflow && !secp256k1_scalar_is_zero(&sec); | ||||
if (ret) { | if (ret) { | ||||
secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pj, &sec); | secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pj, &sec); | ||||
secp256k1_ge_set_gej(&p, &pj); | secp256k1_ge_set_gej(&p, &pj); | ||||
secp256k1_pubkey_save(pubkey, &p); | secp256k1_pubkey_save(pubkey, &p); | ||||
} | } | ||||
secp256k1_scalar_clear(&sec); | secp256k1_scalar_clear(&sec); | ||||
return ret; | return ret; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 169 Lines • Show Last 20 Lines |