Upstream version 7.35.144.0
[platform/framework/web/crosswalk.git] / src / third_party / tlslite / patches / parse_chain.patch
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.