From bbd945586f38db721dd0476796085c303578e935 Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Mon, 1 May 2017 01:38:30 +0100 Subject: [PATCH] catacomb/__init__.py: Add printing for more key types. Organization: Straylight/Edgeware From: Mark Wooding Now that we have secret suppression, it's not an attractive nuisance to print key material for public keys like RSA, DSA, KCDSA, and XDH. So do that. Digging key material out of symmetric crypto objects is really hard, so we don't try to do that. --- catacomb/__init__.py | 79 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/catacomb/__init__.py b/catacomb/__init__.py index c2470ad..6fc3725 100644 --- a/catacomb/__init__.py +++ b/catacomb/__init__.py @@ -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 -- [mdw]