[bbe2084] | 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 | } |
---|