From ef3d89ac47a35f16102b7b602763858c2ac6f3a8 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 1 Dec 2019 16:47:36 +0000 Subject: [PATCH] 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 --- make-secnet-sites | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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: -- 2.30.2