• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1diff -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.
12diff -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