cashscript_py.helpers.schnorr module

BCH-compatible Schnorr (R,s) signatures.

Implements the BCH 2019-05-15 Schnorr variant (Ref: https://reference.cash/protocol/forks/2019-05-15-schnorr): - Sign/verify over secp256k1. - e = SHA256(r || compressed_pubkey || m) mod n - R selection with Jacobi(R.y) == 1 (flip k -> n - k if needed) - Signature format: 64 bytes r||s for OP_CHECKSIG/VERIFY (append hashtype externally).

Optionally supports deterministic RFC6979-style nonces with a 16-byte “additional data” tag.

schnorr_sign(priv: bytes, m32: bytes, deterministic: bool = False) bytes[source]

Sign a 32-byte message digest using BCH Schnorr (R,s).

Returns:

r(32) || s(32).

Return type:

64-byte signature

schnorr_verify(sig64: bytes, m32: bytes, pubkey_comp: bytes) bool[source]

Verify a 64-byte BCH Schnorr signature r||s for a 32-byte message digest.

Returns:

True if valid, else False.