Index: chrome/browser/resources/cryptotoken/b64.js |
diff --git a/chrome/browser/resources/cryptotoken/b64.js b/chrome/browser/resources/cryptotoken/b64.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..04a445628db2b3868f7bed929fbcdafe48b895af |
--- /dev/null |
+++ b/chrome/browser/resources/cryptotoken/b64.js |
@@ -0,0 +1,89 @@ |
+// Copyright (c) 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// WebSafeBase64Escape and Unescape. |
+// mschilder@google.com |
+function B64_encode(bytes, opt_length) { |
+ if (!opt_length) opt_length = bytes.length; |
+ var b64out = |
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'; |
+ var result = ''; |
+ var shift = 0; |
+ var accu = 0; |
+ var input_index = 0; |
+ while (opt_length--) { |
+ accu <<= 8; |
+ accu |= bytes[input_index++]; |
+ shift += 8; |
+ while (shift >= 6) { |
+ var i = (accu >> (shift - 6)) & 63; |
+ result += b64out.charAt(i); |
+ shift -= 6; |
+ } |
+ } |
+ if (shift) { |
+ accu <<= 8; |
+ shift += 8; |
+ var i = (accu >> (shift - 6)) & 63; |
+ result += b64out.charAt(i); |
+ } |
+ return result; |
+} |
+ |
+// Normal base64 encode; not websafe, including padding. |
+function base64_encode(bytes, opt_length) { |
+ if (!opt_length) opt_length = bytes.length; |
+ var b64out = |
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; |
+ var result = ''; |
+ var shift = 0; |
+ var accu = 0; |
+ var input_index = 0; |
+ while (opt_length--) { |
+ accu <<= 8; |
+ accu |= bytes[input_index++]; |
+ shift += 8; |
+ while (shift >= 6) { |
+ var i = (accu >> (shift - 6)) & 63; |
+ result += b64out.charAt(i); |
+ shift -= 6; |
+ } |
+ } |
+ if (shift) { |
+ accu <<= 8; |
+ shift += 8; |
+ var i = (accu >> (shift - 6)) & 63; |
+ result += b64out.charAt(i); |
+ } |
+ while (result.length % 4) result += '='; |
+ return result; |
+} |
+ |
+var B64_inmap = |
+[ |
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, |
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, |
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, |
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 0, 0, 0, 0, 64, |
+ 0, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, |
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 0, 0, 0, 0, 0 |
+]; |
+ |
+function B64_decode(string) { |
+ var bytes = []; |
+ var accu = 0; |
+ var shift = 0; |
+ for (var i = 0; i < string.length; ++i) { |
+ var c = string.charCodeAt(i); |
+ if (c < 32 || c > 127 || !B64_inmap[c - 32]) return []; |
+ accu <<= 6; |
+ accu |= (B64_inmap[c - 32] - 1); |
+ shift += 6; |
+ if (shift >= 8) { |
+ bytes.push((accu >> (shift - 8)) & 255); |
+ shift -= 8; |
+ } |
+ } |
+ return bytes; |
+} |