1 diff -aurb tlslite-0.3.8/tlslite/X509.py chromium/tlslite/X509.py 2 --- tlslite-0.3.8/tlslite/X509.py Fri Mar 19 18:43:19 2004 3 +++ chromium/tlslite/X509.py Wed Feb 29 11:53:54 2012 4 @@ -91,6 +91,7 @@ 5 6 #Create a public key instance 7 self.publicKey = _createPublicRSAKey(n, e) 8 + return self 9 10 def getFingerprint(self): 11 """Get the hex-encoded fingerprint of this certificate. 12 diff -aurb tlslite-0.3.8/tlslite/X509CertChain.py chromium/tlslite/X509CertChain.py 13 --- tlslite-0.3.8/tlslite/X509CertChain.py Fri Mar 19 18:49:58 2004 14 +++ chromium/tlslite/X509CertChain.py Wed Feb 29 11:53:42 2012 15 @@ -1,6 +1,7 @@ 16 """Class representing an X.509 certificate chain.""" 17 18 from utils import cryptomath 19 +from X509 import X509 20 21 class X509CertChain: 22 """This class represents a chain of X.509 certificates. 23 @@ -23,6 +24,66 @@ 24 self.x509List = x509List 25 else: 26 self.x509List = [] 27 + 28 + def parseChain(self, s): 29 + """Parse a PEM-encoded X.509 certificate file chain file. 30 + 31 + @type s: str 32 + @param s: A PEM-encoded (eg: Base64) X.509 certificate file, with every 33 + certificate wrapped within "-----BEGIN CERTIFICATE-----" and 34 + "-----END CERTIFICATE-----" tags). Extraneous data outside such tags, 35 + such as human readable representations, will be ignored. 36 + """ 37 + 38 + class PEMIterator(object): 39 + """Simple iterator over PEM-encoded certificates within a string. 40 + 41 + @type data: string 42 + @ivar data: A string containing PEM-encoded (Base64) certificates, 43 + with every certificate wrapped within "-----BEGIN CERTIFICATE-----" 44 + and "-----END CERTIFICATE-----" tags). Extraneous data outside such 45 + tags, such as human readable representations, will be ignored. 46 + 47 + @type index: integer 48 + @ivar index: The current offset within data to begin iterating from. 49 + """ 50 + 51 + _CERTIFICATE_HEADER = "----BEGIN CERTIFICATE-----" 52 + """The PEM encoding block header for X.509 certificates.""" 53 + 54 + _CERTIFICATE_FOOTER = "----END CERTIFICATE-----" 55 + """The PEM encoding block footer for X.509 certificates.""" 56 + 57 + def __init__(self, s): 58 + self.data = s 59 + self.index = 0 60 + 61 + def __iter__(self): 62 + return self 63 + 64 + def next(self): 65 + """Iterates and returns the next L{tlslite.X509.X509} 66 + certificate in data. 67 + 68 + @rtype tlslite.X509.X509 69 + """ 70 + 71 + self.index = self.data.find(self._CERTIFICATE_HEADER, 72 + self.index) 73 + if self.index == -1: 74 + raise StopIteration 75 + end = self.data.find(self._CERTIFICATE_FOOTER, self.index) 76 + if end == -1: 77 + raise StopIteration 78 + 79 + certStr = self.data[self.index+len(self._CERTIFICATE_HEADER) : 80 + end] 81 + self.index = end + len(self._CERTIFICATE_FOOTER) 82 + bytes = cryptomath.base64ToBytes(certStr) 83 + return X509().parseBinary(bytes) 84 + 85 + self.x509List = list(PEMIterator(s)) 86 + return self 87 88 def getNumCerts(self): 89 """Get the number of certificates in this chain. 90