Index: third_party/tlslite/patches/parse_chain.patch |
diff --git a/third_party/tlslite/patches/parse_chain.patch b/third_party/tlslite/patches/parse_chain.patch |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1c5533df33134aee198d09ff565cecb1dd360b15 |
--- /dev/null |
+++ b/third_party/tlslite/patches/parse_chain.patch |
@@ -0,0 +1,89 @@ |
+diff -aurb tlslite-0.3.8/tlslite/X509.py chromium/tlslite/X509.py |
+--- tlslite-0.3.8/tlslite/X509.py Fri Mar 19 18:43:19 2004 |
++++ chromium/tlslite/X509.py Wed Feb 29 11:53:54 2012 |
+@@ -91,6 +91,7 @@ |
+ |
+ #Create a public key instance |
+ self.publicKey = _createPublicRSAKey(n, e) |
++ return self |
+ |
+ def getFingerprint(self): |
+ """Get the hex-encoded fingerprint of this certificate. |
+diff -aurb tlslite-0.3.8/tlslite/X509CertChain.py chromium/tlslite/X509CertChain.py |
+--- tlslite-0.3.8/tlslite/X509CertChain.py Fri Mar 19 18:49:58 2004 |
++++ chromium/tlslite/X509CertChain.py Wed Feb 29 11:53:42 2012 |
+@@ -1,6 +1,7 @@ |
+ """Class representing an X.509 certificate chain.""" |
+ |
+ from utils import cryptomath |
++from X509 import X509 |
+ |
+ class X509CertChain: |
+ """This class represents a chain of X.509 certificates. |
+@@ -23,6 +24,66 @@ |
+ self.x509List = x509List |
+ else: |
+ self.x509List = [] |
++ |
++ def parseChain(self, s): |
++ """Parse a PEM-encoded X.509 certificate file chain file. |
++ |
++ @type s: str |
++ @param s: A PEM-encoded (eg: Base64) X.509 certificate file, with every |
++ certificate wrapped within "-----BEGIN CERTIFICATE-----" and |
++ "-----END CERTIFICATE-----" tags). Extraneous data outside such tags, |
++ such as human readable representations, will be ignored. |
++ """ |
++ |
++ class PEMIterator(object): |
++ """Simple iterator over PEM-encoded certificates within a string. |
++ |
++ @type data: string |
++ @ivar data: A string containing PEM-encoded (Base64) certificates, |
++ with every certificate wrapped within "-----BEGIN CERTIFICATE-----" |
++ and "-----END CERTIFICATE-----" tags). Extraneous data outside such |
++ tags, such as human readable representations, will be ignored. |
++ |
++ @type index: integer |
++ @ivar index: The current offset within data to begin iterating from. |
++ """ |
++ |
++ _CERTIFICATE_HEADER = "----BEGIN CERTIFICATE-----" |
++ """The PEM encoding block header for X.509 certificates.""" |
++ |
++ _CERTIFICATE_FOOTER = "----END CERTIFICATE-----" |
++ """The PEM encoding block footer for X.509 certificates.""" |
++ |
++ def __init__(self, s): |
++ self.data = s |
++ self.index = 0 |
++ |
++ def __iter__(self): |
++ return self |
++ |
++ def next(self): |
++ """Iterates and returns the next L{tlslite.X509.X509} |
++ certificate in data. |
++ |
++ @rtype tlslite.X509.X509 |
++ """ |
++ |
++ self.index = self.data.find(self._CERTIFICATE_HEADER, |
++ self.index) |
++ if self.index == -1: |
++ raise StopIteration |
++ end = self.data.find(self._CERTIFICATE_FOOTER, self.index) |
++ if end == -1: |
++ raise StopIteration |
++ |
++ certStr = self.data[self.index+len(self._CERTIFICATE_HEADER) : |
++ end] |
++ self.index = end + len(self._CERTIFICATE_FOOTER) |
++ bytes = cryptomath.base64ToBytes(certStr) |
++ return X509().parseBinary(bytes) |
++ |
++ self.x509List = list(PEMIterator(s)) |
++ return self |
+ |
+ def getNumCerts(self): |
+ """Get the number of certificates in this chain. |