Skip to content

Commit f001034

Browse files
committed
Separate helper functions for pubkey_create and seckey_tweak_add
This is in preparation for allowing code reuse by keypair functions
1 parent 910d9c2 commit f001034

File tree

1 file changed

+28
-14
lines changed

1 file changed

+28
-14
lines changed

src/secp256k1.c

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -549,26 +549,33 @@ int secp256k1_ec_seckey_verify(const secp256k1_context* ctx, const unsigned char
549549
return ret;
550550
}
551551

552-
int secp256k1_ec_pubkey_create(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *seckey) {
552+
static int secp256k1_ec_pubkey_create_helper(const secp256k1_ecmult_gen_context *ecmult_gen_ctx, secp256k1_scalar *seckey_scalar, secp256k1_ge *p, const unsigned char *seckey) {
553553
secp256k1_gej pj;
554+
int ret;
555+
556+
ret = secp256k1_scalar_set_b32_seckey(seckey_scalar, seckey);
557+
secp256k1_scalar_cmov(seckey_scalar, &secp256k1_scalar_one, !ret);
558+
559+
secp256k1_ecmult_gen(ecmult_gen_ctx, &pj, seckey_scalar);
560+
secp256k1_ge_set_gej(p, &pj);
561+
return ret;
562+
}
563+
564+
int secp256k1_ec_pubkey_create(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *seckey) {
554565
secp256k1_ge p;
555-
secp256k1_scalar sec;
566+
secp256k1_scalar seckey_scalar;
556567
int ret = 0;
557568
VERIFY_CHECK(ctx != NULL);
558569
ARG_CHECK(pubkey != NULL);
559570
memset(pubkey, 0, sizeof(*pubkey));
560571
ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));
561572
ARG_CHECK(seckey != NULL);
562573

563-
ret = secp256k1_scalar_set_b32_seckey(&sec, seckey);
564-
secp256k1_scalar_cmov(&sec, &secp256k1_scalar_one, !ret);
565-
566-
secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pj, &sec);
567-
secp256k1_ge_set_gej(&p, &pj);
574+
ret = secp256k1_ec_pubkey_create_helper(&ctx->ecmult_gen_ctx, &seckey_scalar, &p, seckey);
568575
secp256k1_pubkey_save(pubkey, &p);
569576
memczero(pubkey, sizeof(*pubkey), !ret);
570577

571-
secp256k1_scalar_clear(&sec);
578+
secp256k1_scalar_clear(&seckey_scalar);
572579
return ret;
573580
}
574581

@@ -606,24 +613,31 @@ int secp256k1_ec_pubkey_negate(const secp256k1_context* ctx, secp256k1_pubkey *p
606613
return ret;
607614
}
608615

609-
int secp256k1_ec_seckey_tweak_add(const secp256k1_context* ctx, unsigned char *seckey, const unsigned char *tweak) {
616+
617+
static int secp256k1_ec_seckey_tweak_add_helper(secp256k1_scalar *sec, const unsigned char *tweak) {
610618
secp256k1_scalar term;
619+
int overflow = 0;
620+
int ret = 0;
621+
622+
secp256k1_scalar_set_b32(&term, tweak, &overflow);
623+
ret = (!overflow) & secp256k1_eckey_privkey_tweak_add(sec, &term);
624+
secp256k1_scalar_clear(&term);
625+
return ret;
626+
}
627+
628+
int secp256k1_ec_seckey_tweak_add(const secp256k1_context* ctx, unsigned char *seckey, const unsigned char *tweak) {
611629
secp256k1_scalar sec;
612630
int ret = 0;
613-
int overflow = 0;
614631
VERIFY_CHECK(ctx != NULL);
615632
ARG_CHECK(seckey != NULL);
616633
ARG_CHECK(tweak != NULL);
617634

618-
secp256k1_scalar_set_b32(&term, tweak, &overflow);
619635
ret = secp256k1_scalar_set_b32_seckey(&sec, seckey);
620-
621-
ret &= (!overflow) & secp256k1_eckey_privkey_tweak_add(&sec, &term);
636+
ret &= secp256k1_ec_seckey_tweak_add_helper(&sec, tweak);
622637
secp256k1_scalar_cmov(&sec, &secp256k1_scalar_zero, !ret);
623638
secp256k1_scalar_get_b32(seckey, &sec);
624639

625640
secp256k1_scalar_clear(&sec);
626-
secp256k1_scalar_clear(&term);
627641
return ret;
628642
}
629643

0 commit comments

Comments
 (0)