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

Unified Diff: third_party/tlslite/tlslite/utils/python_rsakey.py

Issue 210323002: Update tlslite to 0.4.6. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Executable bit and --similarity=80 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/tlslite/tlslite/utils/python_rc4.py ('k') | third_party/tlslite/tlslite/utils/rc4.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/tlslite/tlslite/utils/python_rsakey.py
diff --git a/third_party/tlslite/tlslite/utils/python_rsakey.py b/third_party/tlslite/tlslite/utils/python_rsakey.py
index 2dac988d264c6d07d9cae9bb08f07fe72783c2b4..8b210847f49ce99d95ccb640d0dae72786a92f51 100644
--- a/third_party/tlslite/tlslite/utils/python_rsakey.py
+++ b/third_party/tlslite/tlslite/utils/python_rsakey.py
@@ -1,9 +1,12 @@
+# Author: Trevor Perrin
+# See the LICENSE file for legal information regarding use of this file.
+
"""Pure-Python RSA implementation."""
-from cryptomath import *
-import xmltools
-from asn1parser import ASN1Parser
-from rsakey import *
+from .cryptomath import *
+from .asn1parser import ASN1Parser
+from .rsakey import *
+from .pem import *
class Python_RSAKey(RSAKey):
def __init__(self, n=0, e=0, d=0, p=0, q=0, dP=0, dQ=0, qInv=0):
@@ -23,10 +26,6 @@ class Python_RSAKey(RSAKey):
def hasPrivateKey(self):
return self.d != 0
- def hash(self):
- s = self.writeXMLPublicKey('\t\t')
- return hashAndBase64(s.strip())
-
def _rawPrivateKeyOp(self, m):
#Create blinding values, on the first pass:
if not self.blinder:
@@ -68,38 +67,13 @@ class Python_RSAKey(RSAKey):
def acceptsPassword(self): return False
- def write(self, indent=''):
- if self.d:
- s = indent+'<privateKey xmlns="http://trevp.net/rsa">\n'
- else:
- s = indent+'<publicKey xmlns="http://trevp.net/rsa">\n'
- s += indent+'\t<n>%s</n>\n' % numberToBase64(self.n)
- s += indent+'\t<e>%s</e>\n' % numberToBase64(self.e)
- if self.d:
- s += indent+'\t<d>%s</d>\n' % numberToBase64(self.d)
- s += indent+'\t<p>%s</p>\n' % numberToBase64(self.p)
- s += indent+'\t<q>%s</q>\n' % numberToBase64(self.q)
- s += indent+'\t<dP>%s</dP>\n' % numberToBase64(self.dP)
- s += indent+'\t<dQ>%s</dQ>\n' % numberToBase64(self.dQ)
- s += indent+'\t<qInv>%s</qInv>\n' % numberToBase64(self.qInv)
- s += indent+'</privateKey>'
- else:
- s += indent+'</publicKey>'
- #Only add \n if part of a larger structure
- if indent != '':
- s += '\n'
- return s
-
- def writeXMLPublicKey(self, indent=''):
- return Python_RSAKey(self.n, self.e).write(indent)
-
def generate(bits):
key = Python_RSAKey()
- p = getRandomPrime(bits/2, False)
- q = getRandomPrime(bits/2, False)
+ p = getRandomPrime(bits//2, False)
+ q = getRandomPrime(bits//2, False)
t = lcm(p-1, q-1)
key.n = p * q
- key.e = 3L #Needed to be long, for Java
+ key.e = 65537
key.d = invMod(key.e, t)
key.p = p
key.q = q
@@ -113,31 +87,16 @@ class Python_RSAKey(RSAKey):
"""Parse a string containing a <privateKey> or <publicKey>, or
PEM-encoded key."""
- start = s.find("-----BEGIN PRIVATE KEY-----")
- if start != -1:
- end = s.find("-----END PRIVATE KEY-----")
- if end == -1:
- raise SyntaxError("Missing PEM Postfix")
- s = s[start+len("-----BEGIN PRIVATE KEY -----") : end]
- bytes = base64ToBytes(s)
+ if pemSniff(s, "PRIVATE KEY"):
+ bytes = dePem(s, "PRIVATE KEY")
return Python_RSAKey._parsePKCS8(bytes)
+ elif pemSniff(s, "RSA PRIVATE KEY"):
+ bytes = dePem(s, "RSA PRIVATE KEY")
+ return Python_RSAKey._parseSSLeay(bytes)
else:
- start = s.find("-----BEGIN RSA PRIVATE KEY-----")
- if start != -1:
- end = s.find("-----END RSA PRIVATE KEY-----")
- if end == -1:
- raise SyntaxError("Missing PEM Postfix")
- s = s[start+len("-----BEGIN RSA PRIVATE KEY -----") : end]
- bytes = base64ToBytes(s)
- return Python_RSAKey._parseSSLeay(bytes)
- raise SyntaxError("Missing PEM Prefix")
+ raise SyntaxError("Not a PEM private key file")
parsePEM = staticmethod(parsePEM)
- def parseXML(s):
- element = xmltools.parseAndStripWhitespace(s)
- return Python_RSAKey._parseXML(element)
- parseXML = staticmethod(parseXML)
-
def _parsePKCS8(bytes):
p = ASN1Parser(bytes)
@@ -177,33 +136,3 @@ class Python_RSAKey(RSAKey):
qInv = bytesToNumber(privateKeyP.getChild(8).value)
return Python_RSAKey(n, e, d, p, q, dP, dQ, qInv)
_parseASN1PrivateKey = staticmethod(_parseASN1PrivateKey)
-
- def _parseXML(element):
- try:
- xmltools.checkName(element, "privateKey")
- except SyntaxError:
- xmltools.checkName(element, "publicKey")
-
- #Parse attributes
- xmltools.getReqAttribute(element, "xmlns", "http://trevp.net/rsa\Z")
- xmltools.checkNoMoreAttributes(element)
-
- #Parse public values (<n> and <e>)
- n = base64ToNumber(xmltools.getText(xmltools.getChild(element, 0, "n"), xmltools.base64RegEx))
- e = base64ToNumber(xmltools.getText(xmltools.getChild(element, 1, "e"), xmltools.base64RegEx))
- d = 0
- p = 0
- q = 0
- dP = 0
- dQ = 0
- qInv = 0
- #Parse private values, if present
- if element.childNodes.length>=3:
- d = base64ToNumber(xmltools.getText(xmltools.getChild(element, 2, "d"), xmltools.base64RegEx))
- p = base64ToNumber(xmltools.getText(xmltools.getChild(element, 3, "p"), xmltools.base64RegEx))
- q = base64ToNumber(xmltools.getText(xmltools.getChild(element, 4, "q"), xmltools.base64RegEx))
- dP = base64ToNumber(xmltools.getText(xmltools.getChild(element, 5, "dP"), xmltools.base64RegEx))
- dQ = base64ToNumber(xmltools.getText(xmltools.getChild(element, 6, "dQ"), xmltools.base64RegEx))
- qInv = base64ToNumber(xmltools.getText(xmltools.getLastChild(element, 7, "qInv"), xmltools.base64RegEx))
- return Python_RSAKey(n, e, d, p, q, dP, dQ, qInv)
- _parseXML = staticmethod(_parseXML)
« no previous file with comments | « third_party/tlslite/tlslite/utils/python_rc4.py ('k') | third_party/tlslite/tlslite/utils/rc4.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698