1 | // FIXME: origin unknown |
---|
2 | if (!window.atob) { |
---|
3 | var tableStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; |
---|
4 | var table = tableStr.split(""); |
---|
5 | |
---|
6 | window.atob = function (base64) { |
---|
7 | if (/(=[^=]+|={3,})$/.test(base64)) throw new Error("String contains an invalid character"); |
---|
8 | base64 = base64.replace(/=/g, ""); |
---|
9 | var n = base64.length & 3; |
---|
10 | if (n === 1) throw new Error("String contains an invalid character"); |
---|
11 | for (var i = 0, j = 0, len = base64.length / 4, bin = []; i < len; ++i) { |
---|
12 | var a = tableStr.indexOf(base64[j++] || "A"), b = tableStr.indexOf(base64[j++] || "A"); |
---|
13 | var c = tableStr.indexOf(base64[j++] || "A"), d = tableStr.indexOf(base64[j++] || "A"); |
---|
14 | if ((a | b | c | d) < 0) throw new Error("String contains an invalid character"); |
---|
15 | bin[bin.length] = ((a << 2) | (b >> 4)) & 255; |
---|
16 | bin[bin.length] = ((b << 4) | (c >> 2)) & 255; |
---|
17 | bin[bin.length] = ((c << 6) | d) & 255; |
---|
18 | }; |
---|
19 | return String.fromCharCode.apply(null, bin).substr(0, bin.length + n - 4); |
---|
20 | }; |
---|
21 | |
---|
22 | window.btoa = function (bin) { |
---|
23 | for (var i = 0, j = 0, len = bin.length / 3, base64 = []; i < len; ++i) { |
---|
24 | var a = bin.charCodeAt(j++), b = bin.charCodeAt(j++), c = bin.charCodeAt(j++); |
---|
25 | if ((a | b | c) > 255) throw new Error("String contains an invalid character"); |
---|
26 | base64[base64.length] = table[a >> 2] + table[((a << 4) & 63) | (b >> 4)] + |
---|
27 | (isNaN(b) ? "=" : table[((b << 2) & 63) | (c >> 6)]) + |
---|
28 | (isNaN(b + c) ? "=" : table[c & 63]); |
---|
29 | } |
---|
30 | return base64.join(""); |
---|
31 | }; |
---|
32 | |
---|
33 | } |
---|
34 | |
---|
35 | function hexToBase64(str) { |
---|
36 | return btoa(String.fromCharCode.apply(null, |
---|
37 | str.replace(/\r|\n/g, "").replace(/([\da-fA-F]{2}) ?/g, "0x$1 ").replace(/ +$/, "").split(" ")) |
---|
38 | ); |
---|
39 | } |
---|
40 | |
---|
41 | function hexToPem(s) { |
---|
42 | var b = hexToBase64(s); |
---|
43 | var pem = b.match(/.{1,64}/g).join("\n"); |
---|
44 | return "-----BEGIN CERTIFICATE-----\n" + pem + "\n-----END CERTIFICATE-----"; |
---|
45 | } |
---|