chiark / gitweb /
catacomb/__init__.py: Add printing for more key types.
[catacomb-python] / catacomb / __init__.py
index c2470adba97ea78b739654262f3abade94c97d4f..6fc3725abf51aed1bbce16ab42fabe662e8df029 100644 (file)
@@ -650,13 +650,74 @@ class _tmp:
       return x is None or x == msg
     except ValueError:
       return False
+  def __repr__(me):
+    return '%s(n = %r, e = %r)' % (_clsname(me), me.n, me.e)
+  def _repr_pretty_(me, pp, cyclep):
+    ind = _pp_bgroup_tyname(pp, me)
+    if cyclep:
+      pp.text('...')
+    else:
+      _pp_kv(pp, 'n', me.n); pp.text(','); pp.breakable()
+      _pp_kv(pp, 'e', me.e)
+    pp.end_group(ind, ')')
 _augment(RSAPub, _tmp)
 
 class _tmp:
   def decrypt(me, ct, enc): return enc.decode(me.privop(ct), me.n.nbits)
   def sign(me, msg, enc): return me.privop(enc.encode(msg, me.n.nbits))
+  def __repr__(me):
+    return '%s(n = %r, e = %r, d = %s, ' \
+      'p = %s, q = %s, dp = %s, dq = %s, q_inv = %s)' % \
+      (_clsname(me), me.n, me.e,
+       _repr_secret(me.d), _repr_secret(me.p), _repr_secret(me.q),
+       _repr_secret(me.dp), _repr_secret(me.dq), _repr_secret(me.q_inv))
+  def _repr_pretty_(me, pp, cyclep):
+    ind = _pp_bgroup_tyname(pp, me)
+    if cyclep:
+      pp.text('...')
+    else:
+      _pp_kv(pp, 'n', me.n); pp.text(','); pp.breakable()
+      _pp_kv(pp, 'e', me.e); pp.text(','); pp.breakable()
+      _pp_kv(pp, 'd', me.d, secretp = True); pp.text(','); pp.breakable()
+      _pp_kv(pp, 'p', me.p, secretp = True); pp.text(','); pp.breakable()
+      _pp_kv(pp, 'q', me.q, secretp = True); pp.text(','); pp.breakable()
+      _pp_kv(pp, 'dp', me.dp, secretp = True); pp.text(','); pp.breakable()
+      _pp_kv(pp, 'dq', me.dq, secretp = True); pp.text(','); pp.breakable()
+      _pp_kv(pp, 'q_inv', me.q_inv, secretp = True)
+    pp.end_group(ind, ')')
 _augment(RSAPriv, _tmp)
 
+###--------------------------------------------------------------------------
+### DSA and related schemes.
+
+class _tmp:
+  def __repr__(me): return '%s(G = %r, p = %r)' % (_clsname(me), me.G, me.p)
+  def _repr_pretty_(me, pp, cyclep):
+    ind = _pp_bgroup_tyname(pp, me)
+    if cyclep:
+      pp.text('...')
+    else:
+      _pp_kv(pp, 'G', me.G); pp.text(','); pp.breakable()
+      _pp_kv(pp, 'p', me.p)
+    pp.end_group(ind, ')')
+_augment(DSAPub, _tmp)
+_augment(KCDSAPub, _tmp)
+
+class _tmp:
+  def __repr__(me): return '%s(G = %r, u = %s, p = %r)' % \
+      (_clsname(me), me.G, _repr_secret(me.u), me.p)
+  def _repr_pretty_(me, pp, cyclep):
+    ind = _pp_bgroup_tyname(pp, me)
+    if cyclep:
+      pp.text('...')
+    else:
+      _pp_kv(pp, 'G', me.G); pp.text(','); pp.breakable()
+      _pp_kv(pp, 'u', me.u, True); pp.text(','); pp.breakable()
+      _pp_kv(pp, 'p', me.p)
+    pp.end_group(ind, ')')
+_augment(DSAPriv, _tmp)
+_augment(KCDSAPriv, _tmp)
+
 ###--------------------------------------------------------------------------
 ### Bernstein's elliptic curve crypto and related schemes.
 
@@ -674,6 +735,14 @@ class _BoxyPub (object):
     if len(pub) != me._PUBSZ: raise ValueError, 'bad public key'
     super(_BoxyPub, me).__init__(*kw, **kwargs)
     me.pub = pub
+  def __repr__(me): return '%s(pub = %r)' % (_clsname(me), me.pub)
+  def _repr_pretty_(me, pp, cyclep):
+    ind = _pp_bgroup_tyname(pp, me)
+    if cyclep:
+      pp.text('...')
+    else:
+      _pp_kv(pp, 'pub', me.pub)
+    pp.end_group(ind, ')')
 
 class _BoxyPriv (_BoxyPub):
   def __init__(me, priv, pub = None, *kw, **kwargs):
@@ -688,6 +757,16 @@ class _BoxyPriv (_BoxyPub):
     return secret_box(me.boxkey(recip), n, m)
   def unbox(me, recip, n, c):
     return secret_unbox(me.boxkey(recip, n, c))
+  def __repr__(me): return '%s(priv = %s, pub = %r)' % \
+      (_clsname(me), _repr_secret(me.priv), me.pub)
+  def _repr_pretty_(me, pp, cyclep):
+    ind = _pp_bgroup_tyname(pp, me)
+    if cyclep:
+      pp.text('...')
+    else:
+      _pp_kv(pp, 'priv', me.priv, True); pp.text(','); pp.breakable()
+      _pp_kv(pp, 'pub', me.pub)
+    pp.end_group(ind, ')')
 
 class X25519Pub (_BoxyPub):
   _PUBSZ = X25519_PUBSZ