_augment(PrimeField, _tmp)
class _tmp:
- def __repr__(me): return '%s(%sL)' % (type(me).__name__, hex(me.p))
+ def __repr__(me): return '%s(%#xL)' % (type(me).__name__, me.p)
def ec(me, a, b): return ECBinProjCurve(me, a, b)
_augment(BinField, _tmp)
_augment(RSAPriv, _tmp)
###--------------------------------------------------------------------------
-### Bernstein's elliptic curve crypto.
+### Bernstein's elliptic curve crypto and related schemes.
X25519_BASE = \
bytes('0900000000000000000000000000000000000000000000000000000000000000')
+X448_BASE = \
+ bytes('05000000000000000000000000000000000000000000000000000000'
+ '00000000000000000000000000000000000000000000000000000000')
+
Z128 = bytes('00000000000000000000000000000000')
class _BoxyPub (object):
def _op(me, k, X): return x25519(k, X)
def _hashkey(me, z): return hsalsa20_prf(z, Z128)
+class X448Pub (_BoxyPub):
+ _PUBSZ = X448_PUBSZ
+ _BASE = X448_BASE
+
+class X448Priv (_BoxyPriv, X448Pub):
+ _KEYSZ = X448_KEYSZ
+ def _op(me, k, X): return x448(k, X)
+ ##def _hashkey(me, z): return ???
+
+class Ed25519Pub (object):
+ def __init__(me, pub):
+ me.pub = pub
+ def verify(me, msg, sig):
+ return ed25519_verify(me.pub, msg, sig)
+
+class Ed25519Priv (Ed25519Pub):
+ def __init__(me, priv):
+ me.priv = priv
+ Ed25519Pub.__init__(me, ed25519_pubkey(priv))
+ def sign(me, msg):
+ return ed25519_sign(me.priv, msg, pub = me.pub)
+ @classmethod
+ def generate(cls, rng = rand):
+ return cls(rng.block(ED25519_KEYSZ))
+
###--------------------------------------------------------------------------
### Built-in named curves and prime groups.
def __init__(me, map, nth):
me.map = map
me.nth = nth
- me.i = [None] * (max(map.values()) + 1)
+ me._n = max(map.values()) + 1
+ me.i = me._n*[None]
def __repr__(me):
return '{%s}' % ', '.join(['%r: %r' % (k, me[k]) for k in me])
+ def __len__(me):
+ return me._n
def __contains__(me, k):
return k in me.map
def __getitem__(me, k):