mirror of
https://github.com/aljazceru/nutshell.git
synced 2025-12-20 18:44:20 +01:00
fix: do not serialize-deserialize secret for p2pk signature check (#398)
This commit is contained in:
@@ -68,16 +68,16 @@ class P2PKSecret(Secret):
|
|||||||
return int(n_sigs) if n_sigs else None
|
return int(n_sigs) if n_sigs else None
|
||||||
|
|
||||||
|
|
||||||
def sign_p2pk_sign(message: bytes, private_key: PrivateKey):
|
def sign_p2pk_sign(message: bytes, private_key: PrivateKey) -> bytes:
|
||||||
# ecdsa version
|
# ecdsa version
|
||||||
# signature = private_key.ecdsa_serialize(private_key.ecdsa_sign(message))
|
# signature = private_key.ecdsa_serialize(private_key.ecdsa_sign(message))
|
||||||
signature = private_key.schnorr_sign(
|
signature = private_key.schnorr_sign(
|
||||||
hashlib.sha256(message).digest(), None, raw=True
|
hashlib.sha256(message).digest(), None, raw=True
|
||||||
)
|
)
|
||||||
return signature.hex()
|
return signature
|
||||||
|
|
||||||
|
|
||||||
def verify_p2pk_signature(message: bytes, pubkey: PublicKey, signature: bytes):
|
def verify_p2pk_signature(message: bytes, pubkey: PublicKey, signature: bytes) -> bool:
|
||||||
# ecdsa version
|
# ecdsa version
|
||||||
# return pubkey.ecdsa_verify(message, pubkey.ecdsa_deserialize(signature))
|
# return pubkey.ecdsa_verify(message, pubkey.ecdsa_deserialize(signature))
|
||||||
return pubkey.schnorr_verify(
|
return pubkey.schnorr_verify(
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ class LedgerSpendingConditions:
|
|||||||
logger.trace(f"verifying signature {input_sig} by pubkey {pubkey}.")
|
logger.trace(f"verifying signature {input_sig} by pubkey {pubkey}.")
|
||||||
logger.trace(f"Message: {p2pk_secret.serialize().encode('utf-8')}")
|
logger.trace(f"Message: {p2pk_secret.serialize().encode('utf-8')}")
|
||||||
if verify_p2pk_signature(
|
if verify_p2pk_signature(
|
||||||
message=p2pk_secret.serialize().encode("utf-8"),
|
message=proof.secret.encode("utf-8"),
|
||||||
pubkey=PublicKey(bytes.fromhex(pubkey), raw=True),
|
pubkey=PublicKey(bytes.fromhex(pubkey), raw=True),
|
||||||
signature=bytes.fromhex(input_sig),
|
signature=bytes.fromhex(input_sig),
|
||||||
):
|
):
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ class WalletP2PK(SupportsPrivateKey, SupportsDb):
|
|||||||
sign_p2pk_sign(
|
sign_p2pk_sign(
|
||||||
message=proof.secret.encode("utf-8"),
|
message=proof.secret.encode("utf-8"),
|
||||||
private_key=private_key,
|
private_key=private_key,
|
||||||
)
|
).hex()
|
||||||
for proof in proofs
|
for proof in proofs
|
||||||
]
|
]
|
||||||
logger.debug(f"Signatures: {signatures}")
|
logger.debug(f"Signatures: {signatures}")
|
||||||
@@ -95,7 +95,7 @@ class WalletP2PK(SupportsPrivateKey, SupportsDb):
|
|||||||
sign_p2pk_sign(
|
sign_p2pk_sign(
|
||||||
message=output.B_.encode("utf-8"),
|
message=output.B_.encode("utf-8"),
|
||||||
private_key=private_key,
|
private_key=private_key,
|
||||||
)
|
).hex()
|
||||||
for output in outputs
|
for output in outputs
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user