Merge #850: add secp256k1_ec_pubkey_cmp method
6eceec6d56add `secp256k1_xonly_pubkey_cmp` method (Andrew Poelstra)0d9561ae87add `secp256k1_ec_pubkey_cmp` method (Andrew Poelstra) Pull request description: ACKs for top commit: elichai: Code review ACK6eceec6d56jonasnick: ACK6eceec6d56real-or-random: ACK6eceec6d56Tree-SHA512: f95cbf65f16c88a4adfa1ea7cc6ddabab14baa3b68fa069e78e6faad4852cdbfaea42ee72590d2e0b8f3159cf9b37969511550eb6b2d256b101e2147711cc817
This commit is contained in:
@@ -322,6 +322,32 @@ int secp256k1_ec_pubkey_serialize(const secp256k1_context* ctx, unsigned char *o
|
||||
return ret;
|
||||
}
|
||||
|
||||
int secp256k1_ec_pubkey_cmp(const secp256k1_context* ctx, const secp256k1_pubkey* pubkey0, const secp256k1_pubkey* pubkey1) {
|
||||
unsigned char out[2][33];
|
||||
const secp256k1_pubkey* pk[2];
|
||||
int i;
|
||||
|
||||
VERIFY_CHECK(ctx != NULL);
|
||||
pk[0] = pubkey0; pk[1] = pubkey1;
|
||||
for (i = 0; i < 2; i++) {
|
||||
size_t out_size = sizeof(out[i]);
|
||||
/* If the public key is NULL or invalid, ec_pubkey_serialize will call
|
||||
* the illegal_callback and return 0. In that case we will serialize the
|
||||
* key as all zeros which is less than any valid public key. This
|
||||
* results in consistent comparisons even if NULL or invalid pubkeys are
|
||||
* involved and prevents edge cases such as sorting algorithms that use
|
||||
* this function and do not terminate as a result. */
|
||||
if (!secp256k1_ec_pubkey_serialize(ctx, out[i], &out_size, pk[i], SECP256K1_EC_COMPRESSED)) {
|
||||
/* Note that ec_pubkey_serialize should already set the output to
|
||||
* zero in that case, but it's not guaranteed by the API, we can't
|
||||
* test it and writing a VERIFY_CHECK is more complex than
|
||||
* explicitly memsetting (again). */
|
||||
memset(out[i], 0, sizeof(out[i]));
|
||||
}
|
||||
}
|
||||
return secp256k1_memcmp_var(out[0], out[1], sizeof(out[0]));
|
||||
}
|
||||
|
||||
static void secp256k1_ecdsa_signature_load(const secp256k1_context* ctx, secp256k1_scalar* r, secp256k1_scalar* s, const secp256k1_ecdsa_signature* sig) {
|
||||
(void)ctx;
|
||||
if (sizeof(secp256k1_scalar) == 32) {
|
||||
|
||||
Reference in New Issue
Block a user