diff --git a/rainbowadn/inlining/ipair.py b/rainbowadn/inlining/ipair.py index 04bf93b..8fce4be 100644 --- a/rainbowadn/inlining/ipair.py +++ b/rainbowadn/inlining/ipair.py @@ -28,3 +28,9 @@ class IPair(IAuto, Generic[E0, E1]): assert isinstance(v0, Mentionable) assert isinstance(v1, Mentionable) return cls.from_values(v0, v1) + + @classmethod + def f(cls, f0: RainbowFactory[E0], f1: RainbowFactory[E1]) -> RainbowFactory['IPair[E0, E1]']: + assert isinstance(f0, RainbowFactory) + assert isinstance(f1, RainbowFactory) + return cls.factory(f0, f1) diff --git a/rainbowadn/v13/signature.py b/rainbowadn/v13/signature.py index acc9f56..127909f 100644 --- a/rainbowadn/v13/signature.py +++ b/rainbowadn/v13/signature.py @@ -2,8 +2,8 @@ import nacl.bindings import nacl.exceptions import nacl.signing -from rainbowadn.atomic import * from rainbowadn.core import * +from rainbowadn.inlining import * from .subject import * __all__ = ('BadSignature', 'Signature',) @@ -13,12 +13,16 @@ class BadSignature(nacl.exceptions.BadSignatureError): pass -class Signature(Atomic): +class Signature(IAtomic): def __init__(self, source: bytes): assert isinstance(source, bytes) assert_eq(len(source), nacl.bindings.crypto_sign_BYTES) self.source = source + @classmethod + def size(cls) -> int: + return nacl.bindings.crypto_sign_BYTES + @classmethod def empty(cls) -> 'Signature': return Signature(bytes(nacl.bindings.crypto_sign_BYTES)) diff --git a/rainbowadn/v13/subject.py b/rainbowadn/v13/subject.py index 8e66535..42dd6a1 100644 --- a/rainbowadn/v13/subject.py +++ b/rainbowadn/v13/subject.py @@ -1,18 +1,23 @@ +import nacl.bindings from nacl.public import PublicKey from nacl.signing import VerifyKey -from rainbowadn.atomic import * +from rainbowadn.inlining import * __all__ = ('Subject',) -class Subject(Atomic): +class Subject(IAtomic): def __init__(self, verify_key: VerifyKey): assert isinstance(verify_key, VerifyKey) self.verify_key: VerifyKey = verify_key self.public_key: PublicKey = verify_key.to_curve25519_public_key() assert isinstance(self.public_key, PublicKey) + @classmethod + def size(cls) -> int: + return nacl.bindings.crypto_sign_PUBLICKEYBYTES + @classmethod def _from_bytes(cls, source: bytes) -> 'Subject': assert isinstance(source, bytes)