X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/blobdiff_plain/058f0a00a3fbce84d8963e140505a5fa35962b90..1c6b925f0cf913ce3100c2ae3bcaed26a3f34bc1:/catacomb/__init__.py diff --git a/catacomb/__init__.py b/catacomb/__init__.py index b9818e7..5e7aa89 100644 --- a/catacomb/__init__.py +++ b/catacomb/__init__.py @@ -46,7 +46,7 @@ def _fixname(name): name = name.replace('-', '_') ## But slashes might become underscores or just vanish. - if name.startswith('salsa20'): name = name.translate(None, '/') + if name.startswith('salsa20'): name = name.replace('/', '') else: name = name.replace('/', '_') ## Done. @@ -312,15 +312,18 @@ class BaseRat (object): def __mul__(me, you): n, d = _split_rat(you) return type(me)(me._n*n, me._d*d) - def __div__(me, you): + __rmul__ = __mul__ + def __truediv__(me, you): n, d = _split_rat(you) return type(me)(me._n*d, me._d*n) - def __rdiv__(me, you): + def __rtruediv__(me, you): n, d = _split_rat(you) return type(me)(me._d*n, me._n*d) + __div__ = __truediv__ + __rdiv__ = __rtruediv__ def __cmp__(me, you): n, d = _split_rat(you) - return type(me)(me._n*d, n*me._d) + return cmp(me._n*d, n*me._d) def __rcmp__(me, you): n, d = _split_rat(you) return cmp(n*me._d, me._n*d) @@ -340,8 +343,10 @@ class _tmp: def mont(x): return MPMont(x) def barrett(x): return MPBarrett(x) def reduce(x): return MPReduce(x) - def __div__(me, you): return IntRat(me, you) - def __rdiv__(me, you): return IntRat(you, me) + def __truediv__(me, you): return IntRat(me, you) + def __rtruediv__(me, you): return IntRat(you, me) + __div__ = __truediv__ + __rdiv__ = __rtruediv__ _repr_pretty_ = _pp_str _augment(MP, _tmp) @@ -352,8 +357,10 @@ class _tmp: def halftrace(x, y): return x.reduce().halftrace(y) def modsqrt(x, y): return x.reduce().sqrt(y) def quadsolve(x, y): return x.reduce().quadsolve(y) - def __div__(me, you): return GFRat(me, you) - def __rdiv__(me, you): return GFRat(you, me) + def __truediv__(me, you): return GFRat(me, you) + def __rtruediv__(me, you): return GFRat(you, me) + __div__ = __truediv__ + __rdiv__ = __rtruediv__ _repr_pretty_ = _pp_str _augment(GF, _tmp) @@ -889,7 +896,7 @@ class X448Pub (_XDHPub): class X448Priv (_XDHPriv, X448Pub): _KEYSZ = KeySZSet(X448_KEYSZ) def _op(me, k, X): return x448(k, X) - ##def _hashkey(me, z): return ??? + def _hashkey(me, z): return Shake256().hash(z).done(salsa20.keysz.default) class _EdDSAPub (_BasePub): def beginhash(me): return me._HASH() @@ -901,14 +908,26 @@ class _EdDSAPriv (_BasePriv, _EdDSAPub): class Ed25519Pub (_EdDSAPub): _PUBSZ = KeySZSet(ED25519_PUBSZ) _HASH = sha512 - def verify(me, msg, sig): - return ed25519_verify(me.pub, msg, sig) + def verify(me, msg, sig, **kw): + return ed25519_verify(me.pub, msg, sig, **kw) class Ed25519Priv (_EdDSAPriv, Ed25519Pub): _KEYSZ = KeySZAny(ED25519_KEYSZ) def _pubkey(me, priv): return ed25519_pubkey(priv) - def sign(me, msg): - return ed25519_sign(me.priv, msg, pub = me.pub) + def sign(me, msg, **kw): + return ed25519_sign(me.priv, msg, pub = me.pub, **kw) + +class Ed448Pub (_EdDSAPub): + _PUBSZ = KeySZSet(ED448_PUBSZ) + _HASH = shake256 + def verify(me, msg, sig, **kw): + return ed448_verify(me.pub, msg, sig, **kw) + +class Ed448Priv (_EdDSAPriv, Ed448Pub): + _KEYSZ = KeySZAny(ED448_KEYSZ) + def _pubkey(me, priv): return ed448_pubkey(priv) + def sign(me, msg, **kw): + return ed448_sign(me.priv, msg, pub = me.pub, **kw) ###-------------------------------------------------------------------------- ### Built-in named curves and prime groups.