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

Side by Side Diff: third_party/tlslite/tlslite/utils/pem.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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 # Author: Trevor Perrin
2 # See the LICENSE file for legal information regarding use of this file.
3
4 from .compat import *
5 import binascii
6
7 #This code is shared with tackpy (somewhat), so I'd rather make minimal
8 #changes, and preserve the use of a2b_base64 throughout.
9
10 def dePem(s, name):
11 """Decode a PEM string into a bytearray of its payload.
12
13 The input must contain an appropriate PEM prefix and postfix
14 based on the input name string, e.g. for name="CERTIFICATE":
15
16 -----BEGIN CERTIFICATE-----
17 MIIBXDCCAUSgAwIBAgIBADANBgkqhkiG9w0BAQUFADAPMQ0wCwYDVQQDEwRUQUNL
18 ...
19 KoZIhvcNAQEFBQADAwA5kw==
20 -----END CERTIFICATE-----
21
22 The first such PEM block in the input will be found, and its
23 payload will be base64 decoded and returned.
24 """
25 prefix = "-----BEGIN %s-----" % name
26 postfix = "-----END %s-----" % name
27 start = s.find(prefix)
28 if start == -1:
29 raise SyntaxError("Missing PEM prefix")
30 end = s.find(postfix, start+len(prefix))
31 if end == -1:
32 raise SyntaxError("Missing PEM postfix")
33 s = s[start+len("-----BEGIN %s-----" % name) : end]
34 retBytes = a2b_base64(s) # May raise SyntaxError
35 return retBytes
36
37 def dePemList(s, name):
38 """Decode a sequence of PEM blocks into a list of bytearrays.
39
40 The input must contain any number of PEM blocks, each with the appropriate
41 PEM prefix and postfix based on the input name string, e.g. for
42 name="TACK BREAK SIG". Arbitrary text can appear between and before and
43 after the PEM blocks. For example:
44
45 " Created by TACK.py 0.9.3 Created at 2012-02-01T00:30:10Z -----BEGIN TACK
46 BREAK SIG-----
47 ATKhrz5C6JHJW8BF5fLVrnQss6JnWVyEaC0p89LNhKPswvcC9/s6+vWLd9snYTUv
48 YMEBdw69PUP8JB4AdqA3K6Ap0Fgd9SSTOECeAKOUAym8zcYaXUwpk0+WuPYa7Zmm
49 SkbOlK4ywqt+amhWbg9txSGUwFO5tWUHT3QrnRlE/e3PeNFXLx5Bckg= -----END TACK
50 BREAK SIG----- Created by TACK.py 0.9.3 Created at 2012-02-01T00:30:11Z
51 -----BEGIN TACK BREAK SIG-----
52 ATKhrz5C6JHJW8BF5fLVrnQss6JnWVyEaC0p89LNhKPswvcC9/s6+vWLd9snYTUv
53 YMEBdw69PUP8JB4AdqA3K6BVCWfcjN36lx6JwxmZQncS6sww7DecFO/qjSePCxwM
54 +kdDqX/9/183nmjx6bf0ewhPXkA0nVXsDYZaydN8rJU1GaMlnjcIYxY= -----END TACK
55 BREAK SIG----- "
56
57 All such PEM blocks will be found, decoded, and return in an ordered list
58 of bytearrays, which may have zero elements if not PEM blocks are found.
59 """
60 bList = []
61 prefix = "-----BEGIN %s-----" % name
62 postfix = "-----END %s-----" % name
63 while 1:
64 start = s.find(prefix)
65 if start == -1:
66 return bList
67 end = s.find(postfix, start+len(prefix))
68 if end == -1:
69 raise SyntaxError("Missing PEM postfix")
70 s2 = s[start+len(prefix) : end]
71 retBytes = a2b_base64(s2) # May raise SyntaxError
72 bList.append(retBytes)
73 s = s[end+len(postfix) : ]
74
75 def pem(b, name):
76 """Encode a payload bytearray into a PEM string.
77
78 The input will be base64 encoded, then wrapped in a PEM prefix/postfix
79 based on the name string, e.g. for name="CERTIFICATE":
80
81 -----BEGIN CERTIFICATE-----
82 MIIBXDCCAUSgAwIBAgIBADANBgkqhkiG9w0BAQUFADAPMQ0wCwYDVQQDEwRUQUNL
83 ...
84 KoZIhvcNAQEFBQADAwA5kw==
85 -----END CERTIFICATE-----
86 """
87 s1 = b2a_base64(b)[:-1] # remove terminating \n
88 s2 = ""
89 while s1:
90 s2 += s1[:64] + "\n"
91 s1 = s1[64:]
92 s = ("-----BEGIN %s-----\n" % name) + s2 + \
93 ("-----END %s-----\n" % name)
94 return s
95
96 def pemSniff(inStr, name):
97 searchStr = "-----BEGIN %s-----" % name
98 return searchStr in inStr
OLDNEW
« no previous file with comments | « third_party/tlslite/tlslite/utils/openssl_tripledes.py ('k') | third_party/tlslite/tlslite/utils/pycrypto_aes.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698