partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

enc-base64.js (3197B)


      1 (function () {
      2     // Shortcuts
      3     var C = CryptoJS;
      4     var C_lib = C.lib;
      5     var WordArray = C_lib.WordArray;
      6     var C_enc = C.enc;
      7 
      8     /**
      9      * Base64 encoding strategy.
     10      */
     11     var Base64 = C_enc.Base64 = {
     12         /**
     13          * Converts a word array to a Base64 string.
     14          *
     15          * @param {WordArray} wordArray The word array.
     16          *
     17          * @return {string} The Base64 string.
     18          *
     19          * @static
     20          *
     21          * @example
     22          *
     23          *     var base64String = CryptoJS.enc.Base64.stringify(wordArray);
     24          */
     25         stringify: function (wordArray) {
     26             // Shortcuts
     27             var words = wordArray.words;
     28             var sigBytes = wordArray.sigBytes;
     29             var map = this._map;
     30 
     31             // Clamp excess bits
     32             wordArray.clamp();
     33 
     34             // Convert
     35             var base64Chars = [];
     36             for (var i = 0; i < sigBytes; i += 3) {
     37                 var byte1 = (words[i >>> 2]       >>> (24 - (i % 4) * 8))       & 0xff;
     38                 var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;
     39                 var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;
     40 
     41                 var triplet = (byte1 << 16) | (byte2 << 8) | byte3;
     42 
     43                 for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {
     44                     base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));
     45                 }
     46             }
     47 
     48             // Add padding
     49             var paddingChar = map.charAt(64);
     50             if (paddingChar) {
     51                 while (base64Chars.length % 4) {
     52                     base64Chars.push(paddingChar);
     53                 }
     54             }
     55 
     56             return base64Chars.join('');
     57         },
     58 
     59         /**
     60          * Converts a Base64 string to a word array.
     61          *
     62          * @param {string} base64Str The Base64 string.
     63          *
     64          * @return {WordArray} The word array.
     65          *
     66          * @static
     67          *
     68          * @example
     69          *
     70          *     var wordArray = CryptoJS.enc.Base64.parse(base64String);
     71          */
     72         parse: function (base64Str) {
     73             // Shortcuts
     74             var base64StrLength = base64Str.length;
     75             var map = this._map;
     76 
     77             // Ignore padding
     78             var paddingChar = map.charAt(64);
     79             if (paddingChar) {
     80                 var paddingIndex = base64Str.indexOf(paddingChar);
     81                 if (paddingIndex != -1) {
     82                     base64StrLength = paddingIndex;
     83                 }
     84             }
     85 
     86             // Convert
     87             var words = [];
     88             var nBytes = 0;
     89             for (var i = 0; i < base64StrLength; i++) {
     90                 if (i % 4) {
     91                     var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2);
     92                     var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2);
     93                     words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);
     94                     nBytes++;
     95                 }
     96             }
     97 
     98             return WordArray.create(words, nBytes);
     99         },
    100 
    101         _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
    102     };
    103 }());