Changeset View
Changeset View
Standalone View
Standalone View
src/secp256k1/src/modules/recovery/tests_impl.h
Show All 19 Lines | static int recovery_test_nonce_function(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) { | ||||
} | } | ||||
/* On the second run, return an overflow to force a third run */ | /* On the second run, return an overflow to force a third run */ | ||||
if (counter == 1) { | if (counter == 1) { | ||||
memset(nonce32, 0xff, 32); | memset(nonce32, 0xff, 32); | ||||
return 1; | return 1; | ||||
} | } | ||||
/* On the next run, return a valid nonce, but flip a coin as to whether or not to fail signing. */ | /* On the next run, return a valid nonce, but flip a coin as to whether or not to fail signing. */ | ||||
memset(nonce32, 1, 32); | memset(nonce32, 1, 32); | ||||
return secp256k1_rand_bits(1); | return secp256k1_testrand_bits(1); | ||||
} | } | ||||
void test_ecdsa_recovery_api(void) { | void test_ecdsa_recovery_api(void) { | ||||
/* Setup contexts that just count errors */ | /* Setup contexts that just count errors */ | ||||
secp256k1_context *none = secp256k1_context_create(SECP256K1_CONTEXT_NONE); | secp256k1_context *none = secp256k1_context_create(SECP256K1_CONTEXT_NONE); | ||||
secp256k1_context *sign = secp256k1_context_create(SECP256K1_CONTEXT_SIGN); | secp256k1_context *sign = secp256k1_context_create(SECP256K1_CONTEXT_SIGN); | ||||
secp256k1_context *vrfy = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY); | secp256k1_context *vrfy = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY); | ||||
secp256k1_context *both = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); | secp256k1_context *both = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); | ||||
▲ Show 20 Lines • Show All 153 Lines • ▼ Show 20 Lines | void test_ecdsa_recovery_end_to_end(void) { | ||||
CHECK(secp256k1_ecdsa_recoverable_signature_convert(ctx, &signature[4], &rsignature[4]) == 1); | CHECK(secp256k1_ecdsa_recoverable_signature_convert(ctx, &signature[4], &rsignature[4]) == 1); | ||||
CHECK(secp256k1_ecdsa_verify(ctx, &signature[4], message, &pubkey) == 1); | CHECK(secp256k1_ecdsa_verify(ctx, &signature[4], message, &pubkey) == 1); | ||||
/* Parse compact (with recovery id) and recover. */ | /* Parse compact (with recovery id) and recover. */ | ||||
CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsignature[4], sig, recid) == 1); | CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsignature[4], sig, recid) == 1); | ||||
CHECK(secp256k1_ecdsa_recover(ctx, &recpubkey, &rsignature[4], message) == 1); | CHECK(secp256k1_ecdsa_recover(ctx, &recpubkey, &rsignature[4], message) == 1); | ||||
CHECK(memcmp(&pubkey, &recpubkey, sizeof(pubkey)) == 0); | CHECK(memcmp(&pubkey, &recpubkey, sizeof(pubkey)) == 0); | ||||
/* Serialize/destroy/parse signature and verify again. */ | /* Serialize/destroy/parse signature and verify again. */ | ||||
CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(ctx, sig, &recid, &rsignature[4]) == 1); | CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(ctx, sig, &recid, &rsignature[4]) == 1); | ||||
sig[secp256k1_rand_bits(6)] += 1 + secp256k1_rand_int(255); | sig[secp256k1_testrand_bits(6)] += 1 + secp256k1_testrand_int(255); | ||||
CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsignature[4], sig, recid) == 1); | CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsignature[4], sig, recid) == 1); | ||||
CHECK(secp256k1_ecdsa_recoverable_signature_convert(ctx, &signature[4], &rsignature[4]) == 1); | CHECK(secp256k1_ecdsa_recoverable_signature_convert(ctx, &signature[4], &rsignature[4]) == 1); | ||||
CHECK(secp256k1_ecdsa_verify(ctx, &signature[4], message, &pubkey) == 0); | CHECK(secp256k1_ecdsa_verify(ctx, &signature[4], message, &pubkey) == 0); | ||||
/* Recover again */ | /* Recover again */ | ||||
CHECK(secp256k1_ecdsa_recover(ctx, &recpubkey, &rsignature[4], message) == 0 || | CHECK(secp256k1_ecdsa_recover(ctx, &recpubkey, &rsignature[4], message) == 0 || | ||||
memcmp(&pubkey, &recpubkey, sizeof(pubkey)) != 0); | memcmp(&pubkey, &recpubkey, sizeof(pubkey)) != 0); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 186 Lines • Show Last 20 Lines |