mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-10-10 19:43:13 +02:00
tests: add deterministic signing mode to ECDSA
This does the following: * Adds a rfc6979 argument to test_framework/key.py's sign_ecdsa to select (deterministic) RFC6979-based nonce generation. * Add a flag in feature_taproot.py's framework called "deterministic". * Make the Schnorr signing in feature_taproot.py randomized by default, reverting to the old deterministic (aux_rnd=0x0000...00) behavior if the deterministic context flag is set. * Make the ECDSA signing in feature_taproot.py use RFC6979-based nonces when the deterministic context flag is set (keeping the old randomized behavior otherwise).
This commit is contained in:
@@ -253,14 +253,18 @@ def default_key_tweaked(ctx):
|
||||
def default_signature(ctx):
|
||||
"""Default expression for "signature": BIP340 signature or ECDSA signature depending on mode."""
|
||||
sighash = get(ctx, "sighash")
|
||||
deterministic = get(ctx, "deterministic")
|
||||
if get(ctx, "mode") == "taproot":
|
||||
key = get(ctx, "key_tweaked")
|
||||
flip_r = get(ctx, "flag_flip_r")
|
||||
flip_p = get(ctx, "flag_flip_p")
|
||||
return sign_schnorr(key, sighash, flip_r=flip_r, flip_p=flip_p)
|
||||
aux = bytes([0] * 32)
|
||||
if not deterministic:
|
||||
aux = random.getrandbits(256).to_bytes(32, 'big')
|
||||
return sign_schnorr(key, sighash, flip_r=flip_r, flip_p=flip_p, aux=aux)
|
||||
else:
|
||||
key = get(ctx, "key")
|
||||
return key.sign_ecdsa(sighash)
|
||||
return key.sign_ecdsa(sighash, rfc6979=deterministic)
|
||||
|
||||
def default_hashtype_actual(ctx):
|
||||
"""Default expression for "hashtype_actual": hashtype, unless mismatching SIGHASH_SINGLE in taproot."""
|
||||
@@ -392,6 +396,8 @@ DEFAULT_CONTEXT = {
|
||||
"leaf": None,
|
||||
# The input arguments to provide to the executed script
|
||||
"inputs": [],
|
||||
# Use deterministic signing nonces
|
||||
"deterministic": False,
|
||||
|
||||
# == Parameters to be set before evaluation: ==
|
||||
# - mode: what spending style to use ("taproot", "witv0", or "legacy").
|
||||
|
Reference in New Issue
Block a user