Subversion Repositories cryptochat

Rev

View as "text/javascript" | Blame | Last modification | View Log | RSS feed

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