From: Mark Wooding Date: Mon, 1 May 2017 00:38:30 +0000 (+0100) Subject: catacomb/__init__.py: Add printing for more key types. X-Git-Tag: 1.2.0~23 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/catacomb-python/commitdiff_plain/bbd945586f38db721dd0476796085c303578e935 catacomb/__init__.py: Add printing for more key types. 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. --- 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