Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Side by Side Diff: third_party/tlslite/tlslite/utils/OpenSSL_RSAKey.py

Issue 211173006: Perform tlslite 0.3.8 -> 0.4.6 renames ahead of time. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Drop the -B Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 """OpenSSL/M2Crypto RSA implementation."""
2
3 from cryptomath import *
4
5 from RSAKey import *
6 from Python_RSAKey import Python_RSAKey
7
8 #copied from M2Crypto.util.py, so when we load the local copy of m2
9 #we can still use it
10 def password_callback(v, prompt1='Enter private key passphrase:',
11 prompt2='Verify passphrase:'):
12 from getpass import getpass
13 while 1:
14 try:
15 p1=getpass(prompt1)
16 if v:
17 p2=getpass(prompt2)
18 if p1==p2:
19 break
20 else:
21 break
22 except KeyboardInterrupt:
23 return None
24 return p1
25
26
27 if m2cryptoLoaded:
28 class OpenSSL_RSAKey(RSAKey):
29 def __init__(self, n=0, e=0):
30 self.rsa = None
31 self._hasPrivateKey = False
32 if (n and not e) or (e and not n):
33 raise AssertionError()
34 if n and e:
35 self.rsa = m2.rsa_new()
36 m2.rsa_set_n(self.rsa, numberToMPI(n))
37 m2.rsa_set_e(self.rsa, numberToMPI(e))
38
39 def __del__(self):
40 if self.rsa:
41 m2.rsa_free(self.rsa)
42
43 def __getattr__(self, name):
44 if name == 'e':
45 if not self.rsa:
46 return 0
47 return mpiToNumber(m2.rsa_get_e(self.rsa))
48 elif name == 'n':
49 if not self.rsa:
50 return 0
51 return mpiToNumber(m2.rsa_get_n(self.rsa))
52 else:
53 raise AttributeError
54
55 def hasPrivateKey(self):
56 return self._hasPrivateKey
57
58 def hash(self):
59 return Python_RSAKey(self.n, self.e).hash()
60
61 def _rawPrivateKeyOp(self, m):
62 s = numberToString(m)
63 byteLength = numBytes(self.n)
64 if len(s)== byteLength:
65 pass
66 elif len(s) == byteLength-1:
67 s = '\0' + s
68 else:
69 raise AssertionError()
70 c = stringToNumber(m2.rsa_private_encrypt(self.rsa, s,
71 m2.no_padding))
72 return c
73
74 def _rawPublicKeyOp(self, c):
75 s = numberToString(c)
76 byteLength = numBytes(self.n)
77 if len(s)== byteLength:
78 pass
79 elif len(s) == byteLength-1:
80 s = '\0' + s
81 else:
82 raise AssertionError()
83 m = stringToNumber(m2.rsa_public_decrypt(self.rsa, s,
84 m2.no_padding))
85 return m
86
87 def acceptsPassword(self): return True
88
89 def write(self, password=None):
90 bio = m2.bio_new(m2.bio_s_mem())
91 if self._hasPrivateKey:
92 if password:
93 def f(v): return password
94 m2.rsa_write_key(self.rsa, bio, m2.des_ede_cbc(), f)
95 else:
96 def f(): pass
97 m2.rsa_write_key_no_cipher(self.rsa, bio, f)
98 else:
99 if password:
100 raise AssertionError()
101 m2.rsa_write_pub_key(self.rsa, bio)
102 s = m2.bio_read(bio, m2.bio_ctrl_pending(bio))
103 m2.bio_free(bio)
104 return s
105
106 def writeXMLPublicKey(self, indent=''):
107 return Python_RSAKey(self.n, self.e).write(indent)
108
109 def generate(bits):
110 key = OpenSSL_RSAKey()
111 def f():pass
112 key.rsa = m2.rsa_generate_key(bits, 3, f)
113 key._hasPrivateKey = True
114 return key
115 generate = staticmethod(generate)
116
117 def parse(s, passwordCallback=None):
118 if s.startswith("-----BEGIN "):
119 if passwordCallback==None:
120 callback = password_callback
121 else:
122 def f(v, prompt1=None, prompt2=None):
123 return passwordCallback()
124 callback = f
125 bio = m2.bio_new(m2.bio_s_mem())
126 try:
127 m2.bio_write(bio, s)
128 key = OpenSSL_RSAKey()
129 if s.startswith("-----BEGIN RSA PRIVATE KEY-----"):
130 def f():pass
131 key.rsa = m2.rsa_read_key(bio, callback)
132 if key.rsa == None:
133 raise SyntaxError()
134 key._hasPrivateKey = True
135 elif s.startswith("-----BEGIN PUBLIC KEY-----"):
136 key.rsa = m2.rsa_read_pub_key(bio)
137 if key.rsa == None:
138 raise SyntaxError()
139 key._hasPrivateKey = False
140 else:
141 raise SyntaxError()
142 return key
143 finally:
144 m2.bio_free(bio)
145 else:
146 raise SyntaxError()
147
148 parse = staticmethod(parse)
OLDNEW
« no previous file with comments | « third_party/tlslite/tlslite/utils/OpenSSL_RC4.py ('k') | third_party/tlslite/tlslite/utils/OpenSSL_TripleDES.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698