mdw-test/: Include some random utilities I've found handy for testing.
[secnet] / mdw-test / mk-sshv1-rsapriv
1 #! /usr/bin/python
2
3 from sys import argv
4 import os as OS
5 import catacomb as C
6
7 MAGIC = 'SSH PRIVATE KEY FILE FORMAT 1.1\n\0'
8 keyring, tag, outfile = argv[1:]
9 kf = C.KeyFile(keyring)
10 k = kf[tag]
11 kd = k.data
12
13 n, e = [kd[label].mp for label in ['n', 'e']]
14 priv = kd['private']
15 d, p, q, dp, dq, q_inv = \
16 [priv[label].mp for label in ['d', 'p', 'q', 'd-mod-p', 'd-mod-q', 'q-inv']]
17
18 buf = C.WriteBuffer()
19 buf.put(MAGIC)
20 buf.putu8(0) # symmetric cipher type
21 buf.putu32(0) # `reserved data'
22 buf.putu32(n.nbits) # `not sure what this is'
23 buf.putu16(n.nbits).put(n.storeb())
24 buf.putu16(e.nbits).put(e.storeb())
25 buf.putblk32(k.fulltag) # comment
26 buf.putu16(1234).putu16(1234)# `next two pairs of characters are identical'
27 buf.putu16(d.nbits).put(d.storeb())
28 buf.putu16(q_inv.nbits).put(q_inv.storeb())
29 buf.putu16(q.nbits).put(q.storeb())
30 buf.putu16(p.nbits).put(p.storeb())
31 outtmp = outfile + '.new'
32 with open(outtmp, 'wb') as f: f.write(buf)
33 OS.rename(outtmp, outfile)