698fbe382bc4ec1e4233676efb51c98f66aa656e
[gnuk/gnuk.git] / test / rsa_keys.py
1 from binascii import unhexlify
2
3 def read_key_from_file(file):
4     f = open(file)
5     n_str = f.readline()[:-1]
6     e_str = f.readline()[:-1]
7     p_str = f.readline()[:-1]
8     q_str = f.readline()[:-1]
9     f.close()
10     e = int(e_str, 16)
11     p = int(p_str, 16)
12     q = int(q_str, 16)
13     n = int(n_str, 16)
14     if n != p * q:
15         raise ValueError("wrong key", p, q, n)
16     return (unhexlify(n_str), unhexlify(e_str), unhexlify(p_str), unhexlify(q_str))
17
18 key = [ None, None, None ]
19 key[0] = read_key_from_file('rsa-sig.key')
20 key[1] = read_key_from_file('rsa-dec.key')
21 key[2] = read_key_from_file('rsa-aut.key')
22
23 def build_privkey_template(openpgp_keyno, keyno):
24     n_str = key[keyno][0]
25     e_str = '\x00' + key[keyno][1]
26     p_str = key[keyno][2]
27     q_str = key[keyno][3]
28
29     if openpgp_keyno == 1:
30         keyspec = '\xb6'
31     elif openpgp_keyno == 2:
32         keyspec = '\xb8'
33     else:
34         keyspec = '\xa4'
35
36     key_template = '\x91\x04'+ '\x92\x81\x80' + '\x93\x81\x80' 
37
38     exthdr = keyspec + '\x00' + '\x7f\x48' + '\x08' + key_template
39
40     suffix = '\x5f\x48' + '\x82\x01\x04'
41
42     t = '\x4d' + '\x82\01\16' + exthdr + suffix + e_str + p_str + q_str
43     return t
44
45 def build_privkey_template_for_remove(openpgp_keyno):
46     if openpgp_keyno == 1:
47         keyspec = '\xb6'
48     elif openpgp_keyno == 2:
49         keyspec = '\xb8'
50     else:
51         keyspec = '\xa4'
52     return '\x4d\02' + keyspec + '\0x00'