24 lines
959 B
Python
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''
|