Make ec_privkey functions aliases for ec_seckey_negate, ec_seckey_tweak_add and ec_seckey_mul
This commit is contained in:
parent
22911ee6da
commit
41fc785602
@ -592,6 +592,13 @@ SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_create(
|
|||||||
* If this function returns 0, seckey will be some
|
* If this function returns 0, seckey will be some
|
||||||
* unspecified value. (cannot be NULL)
|
* unspecified value. (cannot be NULL)
|
||||||
*/
|
*/
|
||||||
|
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_negate(
|
||||||
|
const secp256k1_context* ctx,
|
||||||
|
unsigned char *seckey
|
||||||
|
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
|
||||||
|
|
||||||
|
/** Same as secp256k1_ec_seckey_negate, but DEPRECATED. Will be removed in
|
||||||
|
* future versions. */
|
||||||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_negate(
|
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_negate(
|
||||||
const secp256k1_context* ctx,
|
const secp256k1_context* ctx,
|
||||||
unsigned char *seckey
|
unsigned char *seckey
|
||||||
@ -621,6 +628,14 @@ SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_negate(
|
|||||||
* 32-byte arrays the chance of being out of range is
|
* 32-byte arrays the chance of being out of range is
|
||||||
* negligible (around 1 in 2^128). (cannot be NULL)
|
* negligible (around 1 in 2^128). (cannot be NULL)
|
||||||
*/
|
*/
|
||||||
|
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_tweak_add(
|
||||||
|
const secp256k1_context* ctx,
|
||||||
|
unsigned char *seckey,
|
||||||
|
const unsigned char *tweak
|
||||||
|
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
|
||||||
|
|
||||||
|
/** Same as secp256k1_ec_seckey_tweak_add, but DEPRECATED. Will be removed in
|
||||||
|
* future versions. */
|
||||||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_add(
|
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_add(
|
||||||
const secp256k1_context* ctx,
|
const secp256k1_context* ctx,
|
||||||
unsigned char *seckey,
|
unsigned char *seckey,
|
||||||
@ -655,6 +670,14 @@ SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_add(
|
|||||||
* 32-byte arrays the chance of being out of range is
|
* 32-byte arrays the chance of being out of range is
|
||||||
* negligible (around 1 in 2^128). (cannot be NULL)
|
* negligible (around 1 in 2^128). (cannot be NULL)
|
||||||
*/
|
*/
|
||||||
|
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_tweak_mul(
|
||||||
|
const secp256k1_context* ctx,
|
||||||
|
unsigned char *seckey,
|
||||||
|
const unsigned char *tweak
|
||||||
|
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
|
||||||
|
|
||||||
|
/** Same as secp256k1_ec_seckey_tweak_mul, but DEPRECATED. Will be removed in
|
||||||
|
* future versions. */
|
||||||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_mul(
|
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_mul(
|
||||||
const secp256k1_context* ctx,
|
const secp256k1_context* ctx,
|
||||||
unsigned char *seckey,
|
unsigned char *seckey,
|
||||||
|
@ -554,7 +554,7 @@ int secp256k1_ec_pubkey_create(const secp256k1_context* ctx, secp256k1_pubkey *p
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int secp256k1_ec_privkey_negate(const secp256k1_context* ctx, unsigned char *seckey) {
|
int secp256k1_ec_seckey_negate(const secp256k1_context* ctx, unsigned char *seckey) {
|
||||||
secp256k1_scalar sec;
|
secp256k1_scalar sec;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
VERIFY_CHECK(ctx != NULL);
|
VERIFY_CHECK(ctx != NULL);
|
||||||
@ -569,6 +569,10 @@ int secp256k1_ec_privkey_negate(const secp256k1_context* ctx, unsigned char *sec
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int secp256k1_ec_privkey_negate(const secp256k1_context* ctx, unsigned char *seckey) {
|
||||||
|
return secp256k1_ec_seckey_negate(ctx, seckey);
|
||||||
|
}
|
||||||
|
|
||||||
int secp256k1_ec_pubkey_negate(const secp256k1_context* ctx, secp256k1_pubkey *pubkey) {
|
int secp256k1_ec_pubkey_negate(const secp256k1_context* ctx, secp256k1_pubkey *pubkey) {
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
secp256k1_ge p;
|
secp256k1_ge p;
|
||||||
@ -584,7 +588,7 @@ int secp256k1_ec_pubkey_negate(const secp256k1_context* ctx, secp256k1_pubkey *p
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int secp256k1_ec_privkey_tweak_add(const secp256k1_context* ctx, unsigned char *seckey, const unsigned char *tweak) {
|
int secp256k1_ec_seckey_tweak_add(const secp256k1_context* ctx, unsigned char *seckey, const unsigned char *tweak) {
|
||||||
secp256k1_scalar term;
|
secp256k1_scalar term;
|
||||||
secp256k1_scalar sec;
|
secp256k1_scalar sec;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
@ -605,6 +609,10 @@ int secp256k1_ec_privkey_tweak_add(const secp256k1_context* ctx, unsigned char *
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int secp256k1_ec_privkey_tweak_add(const secp256k1_context* ctx, unsigned char *seckey, const unsigned char *tweak) {
|
||||||
|
return secp256k1_ec_seckey_tweak_add(ctx, seckey, tweak);
|
||||||
|
}
|
||||||
|
|
||||||
int secp256k1_ec_pubkey_tweak_add(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *tweak) {
|
int secp256k1_ec_pubkey_tweak_add(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *tweak) {
|
||||||
secp256k1_ge p;
|
secp256k1_ge p;
|
||||||
secp256k1_scalar term;
|
secp256k1_scalar term;
|
||||||
@ -629,7 +637,7 @@ int secp256k1_ec_pubkey_tweak_add(const secp256k1_context* ctx, secp256k1_pubkey
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int secp256k1_ec_privkey_tweak_mul(const secp256k1_context* ctx, unsigned char *seckey, const unsigned char *tweak) {
|
int secp256k1_ec_seckey_tweak_mul(const secp256k1_context* ctx, unsigned char *seckey, const unsigned char *tweak) {
|
||||||
secp256k1_scalar factor;
|
secp256k1_scalar factor;
|
||||||
secp256k1_scalar sec;
|
secp256k1_scalar sec;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
@ -649,6 +657,10 @@ int secp256k1_ec_privkey_tweak_mul(const secp256k1_context* ctx, unsigned char *
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int secp256k1_ec_privkey_tweak_mul(const secp256k1_context* ctx, unsigned char *seckey, const unsigned char *tweak) {
|
||||||
|
return secp256k1_ec_seckey_tweak_mul(ctx, seckey, tweak);
|
||||||
|
}
|
||||||
|
|
||||||
int secp256k1_ec_pubkey_tweak_mul(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *tweak) {
|
int secp256k1_ec_pubkey_tweak_mul(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *tweak) {
|
||||||
secp256k1_ge p;
|
secp256k1_ge p;
|
||||||
secp256k1_scalar factor;
|
secp256k1_scalar factor;
|
||||||
|
61
src/tests.c
61
src/tests.c
@ -3989,13 +3989,13 @@ void run_eckey_edge_case_test(void) {
|
|||||||
pubkey_negone = pubkey;
|
pubkey_negone = pubkey;
|
||||||
/* Tweak of zero leaves the value unchanged. */
|
/* Tweak of zero leaves the value unchanged. */
|
||||||
memset(ctmp2, 0, 32);
|
memset(ctmp2, 0, 32);
|
||||||
CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp, ctmp2) == 1);
|
CHECK(secp256k1_ec_seckey_tweak_add(ctx, ctmp, ctmp2) == 1);
|
||||||
CHECK(memcmp(orderc, ctmp, 31) == 0 && ctmp[31] == 0x40);
|
CHECK(memcmp(orderc, ctmp, 31) == 0 && ctmp[31] == 0x40);
|
||||||
memcpy(&pubkey2, &pubkey, sizeof(pubkey));
|
memcpy(&pubkey2, &pubkey, sizeof(pubkey));
|
||||||
CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 1);
|
CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 1);
|
||||||
CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
|
CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
|
||||||
/* Multiply tweak of zero zeroizes the output. */
|
/* Multiply tweak of zero zeroizes the output. */
|
||||||
CHECK(secp256k1_ec_privkey_tweak_mul(ctx, ctmp, ctmp2) == 0);
|
CHECK(secp256k1_ec_seckey_tweak_mul(ctx, ctmp, ctmp2) == 0);
|
||||||
CHECK(memcmp(zeros, ctmp, 32) == 0);
|
CHECK(memcmp(zeros, ctmp, 32) == 0);
|
||||||
CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, ctmp2) == 0);
|
CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, ctmp2) == 0);
|
||||||
CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0);
|
CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0);
|
||||||
@ -4007,20 +4007,20 @@ void run_eckey_edge_case_test(void) {
|
|||||||
ctmp2[31] = 0x01;
|
ctmp2[31] = 0x01;
|
||||||
CHECK(secp256k1_ec_seckey_verify(ctx, ctmp2) == 1);
|
CHECK(secp256k1_ec_seckey_verify(ctx, ctmp2) == 1);
|
||||||
CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 0);
|
CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 0);
|
||||||
CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp, ctmp2) == 0);
|
CHECK(secp256k1_ec_seckey_tweak_add(ctx, ctmp, ctmp2) == 0);
|
||||||
CHECK(memcmp(zeros, ctmp, 32) == 0);
|
CHECK(memcmp(zeros, ctmp, 32) == 0);
|
||||||
memcpy(ctmp, orderc, 32);
|
memcpy(ctmp, orderc, 32);
|
||||||
CHECK(secp256k1_ec_privkey_tweak_mul(ctx, ctmp, ctmp2) == 0);
|
CHECK(secp256k1_ec_seckey_tweak_mul(ctx, ctmp, ctmp2) == 0);
|
||||||
CHECK(memcmp(zeros, ctmp, 32) == 0);
|
CHECK(memcmp(zeros, ctmp, 32) == 0);
|
||||||
/* If seckey_tweak_add or seckey_tweak_mul are called with an overflowing
|
/* If seckey_tweak_add or seckey_tweak_mul are called with an overflowing
|
||||||
tweak, the seckey is zeroized. */
|
tweak, the seckey is zeroized. */
|
||||||
memcpy(ctmp, orderc, 32);
|
memcpy(ctmp, orderc, 32);
|
||||||
ctmp[31] = 0x40;
|
ctmp[31] = 0x40;
|
||||||
CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp, orderc) == 0);
|
CHECK(secp256k1_ec_seckey_tweak_add(ctx, ctmp, orderc) == 0);
|
||||||
CHECK(memcmp(zeros, ctmp, 32) == 0);
|
CHECK(memcmp(zeros, ctmp, 32) == 0);
|
||||||
memcpy(ctmp, orderc, 32);
|
memcpy(ctmp, orderc, 32);
|
||||||
ctmp[31] = 0x40;
|
ctmp[31] = 0x40;
|
||||||
CHECK(secp256k1_ec_privkey_tweak_mul(ctx, ctmp, orderc) == 0);
|
CHECK(secp256k1_ec_seckey_tweak_mul(ctx, ctmp, orderc) == 0);
|
||||||
CHECK(memcmp(zeros, ctmp, 32) == 0);
|
CHECK(memcmp(zeros, ctmp, 32) == 0);
|
||||||
memcpy(ctmp, orderc, 32);
|
memcpy(ctmp, orderc, 32);
|
||||||
ctmp[31] = 0x40;
|
ctmp[31] = 0x40;
|
||||||
@ -4039,7 +4039,7 @@ void run_eckey_edge_case_test(void) {
|
|||||||
ctmp[31] = 0x40;
|
ctmp[31] = 0x40;
|
||||||
memset(ctmp2, 0, 32);
|
memset(ctmp2, 0, 32);
|
||||||
ctmp2[31] = 1;
|
ctmp2[31] = 1;
|
||||||
CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp2, ctmp) == 0);
|
CHECK(secp256k1_ec_seckey_tweak_add(ctx, ctmp2, ctmp) == 0);
|
||||||
CHECK(memcmp(zeros, ctmp2, 32) == 0);
|
CHECK(memcmp(zeros, ctmp2, 32) == 0);
|
||||||
ctmp2[31] = 1;
|
ctmp2[31] = 1;
|
||||||
CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 0);
|
CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 0);
|
||||||
@ -4047,7 +4047,7 @@ void run_eckey_edge_case_test(void) {
|
|||||||
memcpy(&pubkey, &pubkey2, sizeof(pubkey));
|
memcpy(&pubkey, &pubkey2, sizeof(pubkey));
|
||||||
/* Tweak computation wraps and results in a key of 1. */
|
/* Tweak computation wraps and results in a key of 1. */
|
||||||
ctmp2[31] = 2;
|
ctmp2[31] = 2;
|
||||||
CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp2, ctmp) == 1);
|
CHECK(secp256k1_ec_seckey_tweak_add(ctx, ctmp2, ctmp) == 1);
|
||||||
CHECK(memcmp(ctmp2, zeros, 31) == 0 && ctmp2[31] == 1);
|
CHECK(memcmp(ctmp2, zeros, 31) == 0 && ctmp2[31] == 1);
|
||||||
ctmp2[31] = 2;
|
ctmp2[31] = 2;
|
||||||
CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 1);
|
CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 1);
|
||||||
@ -4095,16 +4095,16 @@ void run_eckey_edge_case_test(void) {
|
|||||||
CHECK(ecount == 2);
|
CHECK(ecount == 2);
|
||||||
ecount = 0;
|
ecount = 0;
|
||||||
memset(ctmp2, 0, 32);
|
memset(ctmp2, 0, 32);
|
||||||
CHECK(secp256k1_ec_privkey_tweak_add(ctx, NULL, ctmp2) == 0);
|
CHECK(secp256k1_ec_seckey_tweak_add(ctx, NULL, ctmp2) == 0);
|
||||||
CHECK(ecount == 1);
|
CHECK(ecount == 1);
|
||||||
CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp, NULL) == 0);
|
CHECK(secp256k1_ec_seckey_tweak_add(ctx, ctmp, NULL) == 0);
|
||||||
CHECK(ecount == 2);
|
CHECK(ecount == 2);
|
||||||
ecount = 0;
|
ecount = 0;
|
||||||
memset(ctmp2, 0, 32);
|
memset(ctmp2, 0, 32);
|
||||||
ctmp2[31] = 1;
|
ctmp2[31] = 1;
|
||||||
CHECK(secp256k1_ec_privkey_tweak_mul(ctx, NULL, ctmp2) == 0);
|
CHECK(secp256k1_ec_seckey_tweak_mul(ctx, NULL, ctmp2) == 0);
|
||||||
CHECK(ecount == 1);
|
CHECK(ecount == 1);
|
||||||
CHECK(secp256k1_ec_privkey_tweak_mul(ctx, ctmp, NULL) == 0);
|
CHECK(secp256k1_ec_seckey_tweak_mul(ctx, ctmp, NULL) == 0);
|
||||||
CHECK(ecount == 2);
|
CHECK(ecount == 2);
|
||||||
ecount = 0;
|
ecount = 0;
|
||||||
CHECK(secp256k1_ec_pubkey_create(ctx, NULL, ctmp) == 0);
|
CHECK(secp256k1_ec_pubkey_create(ctx, NULL, ctmp) == 0);
|
||||||
@ -4184,26 +4184,31 @@ void run_eckey_negate_test(void) {
|
|||||||
random_scalar_order_b32(seckey);
|
random_scalar_order_b32(seckey);
|
||||||
memcpy(seckey_tmp, seckey, 32);
|
memcpy(seckey_tmp, seckey, 32);
|
||||||
|
|
||||||
/* Verify negation changes the key and changes it back */
|
/* Verify negation changes the key and changes it back */
|
||||||
CHECK(secp256k1_ec_privkey_negate(ctx, seckey) == 1);
|
CHECK(secp256k1_ec_seckey_negate(ctx, seckey) == 1);
|
||||||
CHECK(memcmp(seckey, seckey_tmp, 32) != 0);
|
CHECK(memcmp(seckey, seckey_tmp, 32) != 0);
|
||||||
CHECK(secp256k1_ec_privkey_negate(ctx, seckey) == 1);
|
CHECK(secp256k1_ec_seckey_negate(ctx, seckey) == 1);
|
||||||
CHECK(memcmp(seckey, seckey_tmp, 32) == 0);
|
CHECK(memcmp(seckey, seckey_tmp, 32) == 0);
|
||||||
|
|
||||||
/* Negating all 0s fails */
|
/* Check that privkey alias gives same result */
|
||||||
|
CHECK(secp256k1_ec_seckey_negate(ctx, seckey) == 1);
|
||||||
|
CHECK(secp256k1_ec_privkey_negate(ctx, seckey_tmp) == 1);
|
||||||
|
CHECK(memcmp(seckey, seckey_tmp, 32) == 0);
|
||||||
|
|
||||||
|
/* Negating all 0s fails */
|
||||||
memset(seckey, 0, 32);
|
memset(seckey, 0, 32);
|
||||||
memset(seckey_tmp, 0, 32);
|
memset(seckey_tmp, 0, 32);
|
||||||
CHECK(secp256k1_ec_privkey_negate(ctx, seckey) == 0);
|
CHECK(secp256k1_ec_seckey_negate(ctx, seckey) == 0);
|
||||||
/* Check that seckey is not modified */
|
/* Check that seckey is not modified */
|
||||||
CHECK(memcmp(seckey, seckey_tmp, 32) == 0);
|
CHECK(memcmp(seckey, seckey_tmp, 32) == 0);
|
||||||
|
|
||||||
/* Negating an overflowing seckey fails and the seckey is zeroed. In this
|
/* Negating an overflowing seckey fails and the seckey is zeroed. In this
|
||||||
* test, the seckey has 16 random bytes to ensure that ec_privkey_negate
|
* test, the seckey has 16 random bytes to ensure that ec_seckey_negate
|
||||||
* doesn't just set seckey to a constant value in case of failure. */
|
* doesn't just set seckey to a constant value in case of failure. */
|
||||||
random_scalar_order_b32(seckey);
|
random_scalar_order_b32(seckey);
|
||||||
memset(seckey, 0xFF, 16);
|
memset(seckey, 0xFF, 16);
|
||||||
memset(seckey_tmp, 0, 32);
|
memset(seckey_tmp, 0, 32);
|
||||||
CHECK(secp256k1_ec_privkey_negate(ctx, seckey) == 0);
|
CHECK(secp256k1_ec_seckey_negate(ctx, seckey) == 0);
|
||||||
CHECK(memcmp(seckey, seckey_tmp, 32) == 0);
|
CHECK(memcmp(seckey, seckey_tmp, 32) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4346,15 +4351,22 @@ void test_ecdsa_end_to_end(void) {
|
|||||||
if (secp256k1_rand_int(3) == 0) {
|
if (secp256k1_rand_int(3) == 0) {
|
||||||
int ret1;
|
int ret1;
|
||||||
int ret2;
|
int ret2;
|
||||||
|
int ret3;
|
||||||
unsigned char rnd[32];
|
unsigned char rnd[32];
|
||||||
|
unsigned char privkey_tmp[32];
|
||||||
secp256k1_pubkey pubkey2;
|
secp256k1_pubkey pubkey2;
|
||||||
secp256k1_rand256_test(rnd);
|
secp256k1_rand256_test(rnd);
|
||||||
ret1 = secp256k1_ec_privkey_tweak_add(ctx, privkey, rnd);
|
memcpy(privkey_tmp, privkey, 32);
|
||||||
|
ret1 = secp256k1_ec_seckey_tweak_add(ctx, privkey, rnd);
|
||||||
ret2 = secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, rnd);
|
ret2 = secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, rnd);
|
||||||
|
/* Check that privkey alias gives same result */
|
||||||
|
ret3 = secp256k1_ec_privkey_tweak_add(ctx, privkey_tmp, rnd);
|
||||||
CHECK(ret1 == ret2);
|
CHECK(ret1 == ret2);
|
||||||
|
CHECK(ret2 == ret3);
|
||||||
if (ret1 == 0) {
|
if (ret1 == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
CHECK(memcmp(privkey, privkey_tmp, 32) == 0);
|
||||||
CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey2, privkey) == 1);
|
CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey2, privkey) == 1);
|
||||||
CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
|
CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
|
||||||
}
|
}
|
||||||
@ -4363,15 +4375,22 @@ void test_ecdsa_end_to_end(void) {
|
|||||||
if (secp256k1_rand_int(3) == 0) {
|
if (secp256k1_rand_int(3) == 0) {
|
||||||
int ret1;
|
int ret1;
|
||||||
int ret2;
|
int ret2;
|
||||||
|
int ret3;
|
||||||
unsigned char rnd[32];
|
unsigned char rnd[32];
|
||||||
|
unsigned char privkey_tmp[32];
|
||||||
secp256k1_pubkey pubkey2;
|
secp256k1_pubkey pubkey2;
|
||||||
secp256k1_rand256_test(rnd);
|
secp256k1_rand256_test(rnd);
|
||||||
ret1 = secp256k1_ec_privkey_tweak_mul(ctx, privkey, rnd);
|
memcpy(privkey_tmp, privkey, 32);
|
||||||
|
ret1 = secp256k1_ec_seckey_tweak_mul(ctx, privkey, rnd);
|
||||||
ret2 = secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, rnd);
|
ret2 = secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, rnd);
|
||||||
|
/* Check that privkey alias gives same result */
|
||||||
|
ret3 = secp256k1_ec_privkey_tweak_mul(ctx, privkey_tmp, rnd);
|
||||||
CHECK(ret1 == ret2);
|
CHECK(ret1 == ret2);
|
||||||
|
CHECK(ret2 == ret3);
|
||||||
if (ret1 == 0) {
|
if (ret1 == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
CHECK(memcmp(privkey, privkey_tmp, 32) == 0);
|
||||||
CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey2, privkey) == 1);
|
CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey2, privkey) == 1);
|
||||||
CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
|
CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
|
||||||
}
|
}
|
||||||
|
@ -73,19 +73,19 @@ int main(void) {
|
|||||||
CHECK(ret == 1);
|
CHECK(ret == 1);
|
||||||
|
|
||||||
VALGRIND_MAKE_MEM_UNDEFINED(key, 32);
|
VALGRIND_MAKE_MEM_UNDEFINED(key, 32);
|
||||||
ret = secp256k1_ec_privkey_negate(ctx, key);
|
ret = secp256k1_ec_seckey_negate(ctx, key);
|
||||||
VALGRIND_MAKE_MEM_DEFINED(&ret, sizeof(ret));
|
VALGRIND_MAKE_MEM_DEFINED(&ret, sizeof(ret));
|
||||||
CHECK(ret == 1);
|
CHECK(ret == 1);
|
||||||
|
|
||||||
VALGRIND_MAKE_MEM_UNDEFINED(key, 32);
|
VALGRIND_MAKE_MEM_UNDEFINED(key, 32);
|
||||||
VALGRIND_MAKE_MEM_UNDEFINED(msg, 32);
|
VALGRIND_MAKE_MEM_UNDEFINED(msg, 32);
|
||||||
ret = secp256k1_ec_privkey_tweak_add(ctx, key, msg);
|
ret = secp256k1_ec_seckey_tweak_add(ctx, key, msg);
|
||||||
VALGRIND_MAKE_MEM_DEFINED(&ret, sizeof(ret));
|
VALGRIND_MAKE_MEM_DEFINED(&ret, sizeof(ret));
|
||||||
CHECK(ret == 1);
|
CHECK(ret == 1);
|
||||||
|
|
||||||
VALGRIND_MAKE_MEM_UNDEFINED(key, 32);
|
VALGRIND_MAKE_MEM_UNDEFINED(key, 32);
|
||||||
VALGRIND_MAKE_MEM_UNDEFINED(msg, 32);
|
VALGRIND_MAKE_MEM_UNDEFINED(msg, 32);
|
||||||
ret = secp256k1_ec_privkey_tweak_mul(ctx, key, msg);
|
ret = secp256k1_ec_seckey_tweak_mul(ctx, key, msg);
|
||||||
VALGRIND_MAKE_MEM_DEFINED(&ret, sizeof(ret));
|
VALGRIND_MAKE_MEM_DEFINED(&ret, sizeof(ret));
|
||||||
CHECK(ret == 1);
|
CHECK(ret == 1);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user