lbry-sdk/lbrynet/schema/signature.py

24 lines
959 B
Python

# Flags
LEGACY = 0x80 # Everything is contained in the protobuf.
NAMED_SECP256K1 = 0x01 # ECDSA SECP256k1 64 bytes. Claim name is also signed.
class Signature:
def __init__(self, raw_signature: bytes, certificate_id: bytes, flag: int=NAMED_SECP256K1):
self.flag = flag
assert len(raw_signature) == 64, f"signature must be 64 bytes, not: {len(raw_signature)}"
self.raw_signature = raw_signature
assert len(certificate_id) == 20, f"certificate_id must be 20 bytes, not: {len(certificate_id)}"
self.certificate_id = certificate_id
@classmethod
def flagged_parse(cls, binary: bytes):
if binary[0] == NAMED_SECP256K1:
return binary[85:], cls(binary[1:65], binary[65:85], NAMED_SECP256K1)
else:
return binary, None
@property
def serialized(self):
return (bytes([self.flag]) + self.raw_signature + self.certificate_id) if self.flag != LEGACY else b''