| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // WebSafeBase64Escape and Unescape. | 5 // WebSafeBase64Escape and Unescape. |
| 6 function B64_encode(bytes, opt_length) { | 6 function B64_encode(bytes, opt_length) { |
| 7 if (!opt_length) opt_length = bytes.length; | 7 if (!opt_length) |
| 8 opt_length = bytes.length; |
| 8 var b64out = | 9 var b64out = |
| 9 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'; | 10 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'; |
| 10 var result = ''; | 11 var result = ''; |
| 11 var shift = 0; | 12 var shift = 0; |
| 12 var accu = 0; | 13 var accu = 0; |
| 13 var inputIndex = 0; | 14 var inputIndex = 0; |
| 14 while (opt_length--) { | 15 while (opt_length--) { |
| 15 accu <<= 8; | 16 accu <<= 8; |
| 16 accu |= bytes[inputIndex++]; | 17 accu |= bytes[inputIndex++]; |
| 17 shift += 8; | 18 shift += 8; |
| 18 while (shift >= 6) { | 19 while (shift >= 6) { |
| 19 var i = (accu >> (shift - 6)) & 63; | 20 var i = (accu >> (shift - 6)) & 63; |
| 20 result += b64out.charAt(i); | 21 result += b64out.charAt(i); |
| 21 shift -= 6; | 22 shift -= 6; |
| 22 } | 23 } |
| 23 } | 24 } |
| 24 if (shift) { | 25 if (shift) { |
| 25 accu <<= 8; | 26 accu <<= 8; |
| 26 shift += 8; | 27 shift += 8; |
| 27 var i = (accu >> (shift - 6)) & 63; | 28 var i = (accu >> (shift - 6)) & 63; |
| 28 result += b64out.charAt(i); | 29 result += b64out.charAt(i); |
| 29 } | 30 } |
| 30 return result; | 31 return result; |
| 31 } | 32 } |
| 32 | 33 |
| 33 // Normal base64 encode; not websafe, including padding. | 34 // Normal base64 encode; not websafe, including padding. |
| 34 function base64_encode(bytes, opt_length) { | 35 function base64_encode(bytes, opt_length) { |
| 35 if (!opt_length) opt_length = bytes.length; | 36 if (!opt_length) |
| 37 opt_length = bytes.length; |
| 36 var b64out = | 38 var b64out = |
| 37 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; | 39 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; |
| 38 var result = ''; | 40 var result = ''; |
| 39 var shift = 0; | 41 var shift = 0; |
| 40 var accu = 0; | 42 var accu = 0; |
| 41 var inputIndex = 0; | 43 var inputIndex = 0; |
| 42 while (opt_length--) { | 44 while (opt_length--) { |
| 43 accu <<= 8; | 45 accu <<= 8; |
| 44 accu |= bytes[inputIndex++]; | 46 accu |= bytes[inputIndex++]; |
| 45 shift += 8; | 47 shift += 8; |
| 46 while (shift >= 6) { | 48 while (shift >= 6) { |
| 47 var i = (accu >> (shift - 6)) & 63; | 49 var i = (accu >> (shift - 6)) & 63; |
| 48 result += b64out.charAt(i); | 50 result += b64out.charAt(i); |
| 49 shift -= 6; | 51 shift -= 6; |
| 50 } | 52 } |
| 51 } | 53 } |
| 52 if (shift) { | 54 if (shift) { |
| 53 accu <<= 8; | 55 accu <<= 8; |
| 54 shift += 8; | 56 shift += 8; |
| 55 var i = (accu >> (shift - 6)) & 63; | 57 var i = (accu >> (shift - 6)) & 63; |
| 56 result += b64out.charAt(i); | 58 result += b64out.charAt(i); |
| 57 } | 59 } |
| 58 while (result.length % 4) result += '='; | 60 while (result.length % 4) |
| 61 result += '='; |
| 59 return result; | 62 return result; |
| 60 } | 63 } |
| 61 | 64 |
| 62 var B64_inmap = | 65 var B64_inmap = [ |
| 63 [ | 66 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, |
| 64 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, | 67 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, |
| 65 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, | 68 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, |
| 66 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, | 69 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 0, 0, 0, 0, 64, |
| 67 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 0, 0, 0, 0, 64, | 70 0, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, |
| 68 0, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, | 71 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 0, 0, 0, 0, 0 |
| 69 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 0, 0, 0, 0, 0 | |
| 70 ]; | 72 ]; |
| 71 | 73 |
| 72 function B64_decode(string) { | 74 function B64_decode(string) { |
| 73 var bytes = []; | 75 var bytes = []; |
| 74 var accu = 0; | 76 var accu = 0; |
| 75 var shift = 0; | 77 var shift = 0; |
| 76 for (var i = 0; i < string.length; ++i) { | 78 for (var i = 0; i < string.length; ++i) { |
| 77 var c = string.charCodeAt(i); | 79 var c = string.charCodeAt(i); |
| 78 if (c < 32 || c > 127 || !B64_inmap[c - 32]) return []; | 80 if (c < 32 || c > 127 || !B64_inmap[c - 32]) |
| 81 return []; |
| 79 accu <<= 6; | 82 accu <<= 6; |
| 80 accu |= (B64_inmap[c - 32] - 1); | 83 accu |= (B64_inmap[c - 32] - 1); |
| 81 shift += 6; | 84 shift += 6; |
| 82 if (shift >= 8) { | 85 if (shift >= 8) { |
| 83 bytes.push((accu >> (shift - 8)) & 255); | 86 bytes.push((accu >> (shift - 8)) & 255); |
| 84 shift -= 8; | 87 shift -= 8; |
| 85 } | 88 } |
| 86 } | 89 } |
| 87 return bytes; | 90 return bytes; |
| 88 } | 91 } |
| OLD | NEW |