Browse Source

ecc: clean-up return value checks

master
SomberNight 2 years ago
parent
commit
e72210b5d2
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 26
      electrum/ecc.py

26
electrum/ecc.py

@ -65,13 +65,13 @@ def der_sig_from_r_and_s(r: int, s: int) -> bytes:
int.to_bytes(s, length=32, byteorder="big")) int.to_bytes(s, length=32, byteorder="big"))
sig = create_string_buffer(64) sig = create_string_buffer(64)
ret = _libsecp256k1.secp256k1_ecdsa_signature_parse_compact(_libsecp256k1.ctx, sig, sig_string) ret = _libsecp256k1.secp256k1_ecdsa_signature_parse_compact(_libsecp256k1.ctx, sig, sig_string)
if not ret: if 1 != ret:
raise Exception("Bad signature") raise Exception("Bad signature")
ret = _libsecp256k1.secp256k1_ecdsa_signature_normalize(_libsecp256k1.ctx, sig, sig) ret = _libsecp256k1.secp256k1_ecdsa_signature_normalize(_libsecp256k1.ctx, sig, sig)
der_sig = create_string_buffer(80) # this much space should be enough der_sig = create_string_buffer(80) # this much space should be enough
der_sig_size = c_size_t(len(der_sig)) der_sig_size = c_size_t(len(der_sig))
ret = _libsecp256k1.secp256k1_ecdsa_signature_serialize_der(_libsecp256k1.ctx, der_sig, byref(der_sig_size), sig) ret = _libsecp256k1.secp256k1_ecdsa_signature_serialize_der(_libsecp256k1.ctx, der_sig, byref(der_sig_size), sig)
if not ret: if 1 != ret:
raise Exception("failed to serialize DER sig") raise Exception("failed to serialize DER sig")
der_sig_size = der_sig_size.value der_sig_size = der_sig_size.value
return bytes(der_sig)[:der_sig_size] return bytes(der_sig)[:der_sig_size]
@ -81,7 +81,7 @@ def get_r_and_s_from_der_sig(der_sig: bytes) -> Tuple[int, int]:
assert isinstance(der_sig, bytes) assert isinstance(der_sig, bytes)
sig = create_string_buffer(64) sig = create_string_buffer(64)
ret = _libsecp256k1.secp256k1_ecdsa_signature_parse_der(_libsecp256k1.ctx, sig, der_sig, len(der_sig)) ret = _libsecp256k1.secp256k1_ecdsa_signature_parse_der(_libsecp256k1.ctx, sig, der_sig, len(der_sig))
if not ret: if 1 != ret:
raise Exception("Bad signature") raise Exception("Bad signature")
ret = _libsecp256k1.secp256k1_ecdsa_signature_normalize(_libsecp256k1.ctx, sig, sig) ret = _libsecp256k1.secp256k1_ecdsa_signature_normalize(_libsecp256k1.ctx, sig, sig)
compact_signature = create_string_buffer(64) compact_signature = create_string_buffer(64)
@ -96,7 +96,7 @@ def get_r_and_s_from_sig_string(sig_string: bytes) -> Tuple[int, int]:
raise Exception("sig_string must be bytes, and 64 bytes exactly") raise Exception("sig_string must be bytes, and 64 bytes exactly")
sig = create_string_buffer(64) sig = create_string_buffer(64)
ret = _libsecp256k1.secp256k1_ecdsa_signature_parse_compact(_libsecp256k1.ctx, sig, sig_string) ret = _libsecp256k1.secp256k1_ecdsa_signature_parse_compact(_libsecp256k1.ctx, sig, sig_string)
if not ret: if 1 != ret:
raise Exception("Bad signature") raise Exception("Bad signature")
ret = _libsecp256k1.secp256k1_ecdsa_signature_normalize(_libsecp256k1.ctx, sig, sig) ret = _libsecp256k1.secp256k1_ecdsa_signature_normalize(_libsecp256k1.ctx, sig, sig)
compact_signature = create_string_buffer(64) compact_signature = create_string_buffer(64)
@ -111,7 +111,7 @@ def sig_string_from_r_and_s(r: int, s: int) -> bytes:
int.to_bytes(s, length=32, byteorder="big")) int.to_bytes(s, length=32, byteorder="big"))
sig = create_string_buffer(64) sig = create_string_buffer(64)
ret = _libsecp256k1.secp256k1_ecdsa_signature_parse_compact(_libsecp256k1.ctx, sig, sig_string) ret = _libsecp256k1.secp256k1_ecdsa_signature_parse_compact(_libsecp256k1.ctx, sig, sig_string)
if not ret: if 1 != ret:
raise Exception("Bad signature") raise Exception("Bad signature")
ret = _libsecp256k1.secp256k1_ecdsa_signature_normalize(_libsecp256k1.ctx, sig, sig) ret = _libsecp256k1.secp256k1_ecdsa_signature_normalize(_libsecp256k1.ctx, sig, sig)
compact_signature = create_string_buffer(64) compact_signature = create_string_buffer(64)
@ -124,7 +124,7 @@ def _x_and_y_from_pubkey_bytes(pubkey: bytes) -> Tuple[int, int]:
pubkey_ptr = create_string_buffer(64) pubkey_ptr = create_string_buffer(64)
ret = _libsecp256k1.secp256k1_ec_pubkey_parse( ret = _libsecp256k1.secp256k1_ec_pubkey_parse(
_libsecp256k1.ctx, pubkey_ptr, pubkey, len(pubkey)) _libsecp256k1.ctx, pubkey_ptr, pubkey, len(pubkey))
if not ret: if 1 != ret:
raise InvalidECPointException('public key could not be parsed or is invalid') raise InvalidECPointException('public key could not be parsed or is invalid')
pubkey_serialized = create_string_buffer(65) pubkey_serialized = create_string_buffer(65)
@ -164,11 +164,11 @@ class ECPubkey(object):
sig65 = create_string_buffer(65) sig65 = create_string_buffer(65)
ret = _libsecp256k1.secp256k1_ecdsa_recoverable_signature_parse_compact( ret = _libsecp256k1.secp256k1_ecdsa_recoverable_signature_parse_compact(
_libsecp256k1.ctx, sig65, sig_string, recid) _libsecp256k1.ctx, sig65, sig_string, recid)
if not ret: if 1 != ret:
raise Exception('failed to parse signature') raise Exception('failed to parse signature')
pubkey = create_string_buffer(64) pubkey = create_string_buffer(64)
ret = _libsecp256k1.secp256k1_ecdsa_recover(_libsecp256k1.ctx, pubkey, sig65, msg_hash) ret = _libsecp256k1.secp256k1_ecdsa_recover(_libsecp256k1.ctx, pubkey, sig65, msg_hash)
if not ret: if 1 != ret:
raise InvalidECPointException('failed to recover public key') raise InvalidECPointException('failed to recover public key')
return ECPubkey._from_libsecp256k1_pubkey_ptr(pubkey) return ECPubkey._from_libsecp256k1_pubkey_ptr(pubkey)
@ -241,7 +241,7 @@ class ECPubkey(object):
public_pair_bytes = self.get_public_key_bytes(compressed=False) public_pair_bytes = self.get_public_key_bytes(compressed=False)
ret = _libsecp256k1.secp256k1_ec_pubkey_parse( ret = _libsecp256k1.secp256k1_ec_pubkey_parse(
_libsecp256k1.ctx, pubkey, public_pair_bytes, len(public_pair_bytes)) _libsecp256k1.ctx, pubkey, public_pair_bytes, len(public_pair_bytes))
if not ret: if 1 != ret:
raise Exception('public key could not be parsed or is invalid') raise Exception('public key could not be parsed or is invalid')
return pubkey return pubkey
@ -278,7 +278,7 @@ class ECPubkey(object):
pubkey = self._to_libsecp256k1_pubkey_ptr() pubkey = self._to_libsecp256k1_pubkey_ptr()
ret = _libsecp256k1.secp256k1_ec_pubkey_tweak_mul(_libsecp256k1.ctx, pubkey, other.to_bytes(32, byteorder="big")) ret = _libsecp256k1.secp256k1_ec_pubkey_tweak_mul(_libsecp256k1.ctx, pubkey, other.to_bytes(32, byteorder="big"))
if not ret: if 1 != ret:
return POINT_AT_INFINITY return POINT_AT_INFINITY
return ECPubkey._from_libsecp256k1_pubkey_ptr(pubkey) return ECPubkey._from_libsecp256k1_pubkey_ptr(pubkey)
@ -299,7 +299,7 @@ class ECPubkey(object):
pubkey2 = cast(pubkey2, c_char_p) pubkey2 = cast(pubkey2, c_char_p)
array_of_pubkey_ptrs = (c_char_p * 2)(pubkey1, pubkey2) array_of_pubkey_ptrs = (c_char_p * 2)(pubkey1, pubkey2)
ret = _libsecp256k1.secp256k1_ec_pubkey_combine(_libsecp256k1.ctx, pubkey_sum, array_of_pubkey_ptrs, 2) ret = _libsecp256k1.secp256k1_ec_pubkey_combine(_libsecp256k1.ctx, pubkey_sum, array_of_pubkey_ptrs, 2)
if not ret: if 1 != ret:
return POINT_AT_INFINITY return POINT_AT_INFINITY
return ECPubkey._from_libsecp256k1_pubkey_ptr(pubkey_sum) return ECPubkey._from_libsecp256k1_pubkey_ptr(pubkey_sum)
@ -343,7 +343,7 @@ class ECPubkey(object):
sig = create_string_buffer(64) sig = create_string_buffer(64)
ret = _libsecp256k1.secp256k1_ecdsa_signature_parse_compact(_libsecp256k1.ctx, sig, sig_string) ret = _libsecp256k1.secp256k1_ecdsa_signature_parse_compact(_libsecp256k1.ctx, sig, sig_string)
if not ret: if 1 != ret:
return False return False
ret = _libsecp256k1.secp256k1_ecdsa_signature_normalize(_libsecp256k1.ctx, sig, sig) ret = _libsecp256k1.secp256k1_ecdsa_signature_normalize(_libsecp256k1.ctx, sig, sig)
@ -500,7 +500,7 @@ class ECPrivkey(ECPubkey):
ret = _libsecp256k1.secp256k1_ecdsa_sign( ret = _libsecp256k1.secp256k1_ecdsa_sign(
_libsecp256k1.ctx, sig, msg_hash, privkey_bytes, _libsecp256k1.ctx, sig, msg_hash, privkey_bytes,
nonce_function, extra_entropy) nonce_function, extra_entropy)
if not ret: if 1 != ret:
raise Exception('the nonce generation function failed, or the private key was invalid') raise Exception('the nonce generation function failed, or the private key was invalid')
compact_signature = create_string_buffer(64) compact_signature = create_string_buffer(64)
_libsecp256k1.secp256k1_ecdsa_signature_serialize_compact(_libsecp256k1.ctx, compact_signature, sig) _libsecp256k1.secp256k1_ecdsa_signature_serialize_compact(_libsecp256k1.ctx, compact_signature, sig)

Loading…
Cancel
Save