From: Ian Jackson Date: Sun, 1 Dec 2019 16:47:36 +0000 (+0000) Subject: make-secnet-sites: Handle `pub rsa1' properties specially X-Git-Tag: v0.6.0~96 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=secnet.git;a=commitdiff_plain;h=ef3d89ac47a35f16102b7b602763858c2ac6f3a8 make-secnet-sites: Handle `pub rsa1' properties specially We construct these as a special kind of `rsakey' object, rather than `pubkey' objects. This means they will be written out to sites files the way rsa1 keys are: ie in v1, using `pubkey' rather than `pub' in sites files and using the rsa-public verb rather than make-public. Signed-off-by: Ian Jackson --- diff --git a/make-secnet-sites b/make-secnet-sites index 81d3679..f5795ee 100755 --- a/make-secnet-sites +++ b/make-secnet-sites @@ -447,9 +447,28 @@ class rsakey (pubkey): return ['pubkey', str(self.l), self.e, self.n] return pubkey.forsites(self,version,xcopy,fs) +class rsakey_newfmt(rsakey): + "An old-style RSA public key in new-style sites format" + # This is its own class simply to have its own constructor. + def __init__(self,w): + self.a=w[1].name() + assert(self.a == 'rsa1') + self.d=w[2].base91() + try: + w_inner=list(map(Tainted, + ['X-PUB-RSA1'] + + base91s_decode(self.d) + .decode('ascii') + .split(' '))) + except UnicodeDecodeError: + complain('rsa1 key in new format has bad base91') + #print(repr(w_inner), file=sys.stderr) + rsakey.__init__(self,w_inner) def somepubkey(w): if w[0]=='pubkey': return rsakey(w) + elif w[0]=='pub' and w[1]=='rsa1': + return rsakey_newfmt(w) elif w[0]=='pub': return pubkey(w) else: