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.      * UTF-16 BE encoding strategy.
  16.      */
  17.     var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {
  18.         /**
  19.          * Converts a word array to a UTF-16 BE string.
  20.          *
  21.          * @param {WordArray} wordArray The word array.
  22.          *
  23.          * @return {string} The UTF-16 BE string.
  24.          *
  25.          * @static
  26.          *
  27.          * @example
  28.          *
  29.          *     var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);
  30.          */
  31.         stringify: function (wordArray) {
  32.             // Shortcuts
  33.             var words = wordArray.words;
  34.             var sigBytes = wordArray.sigBytes;
  35.  
  36.             // Convert
  37.             var utf16Chars = [];
  38.             for (var i = 0; i < sigBytes; i += 2) {
  39.                 var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;
  40.                 utf16Chars.push(String.fromCharCode(codePoint));
  41.             }
  42.  
  43.             return utf16Chars.join('');
  44.         },
  45.  
  46.         /**
  47.          * Converts a UTF-16 BE string to a word array.
  48.          *
  49.          * @param {string} utf16Str The UTF-16 BE string.
  50.          *
  51.          * @return {WordArray} The word array.
  52.          *
  53.          * @static
  54.          *
  55.          * @example
  56.          *
  57.          *     var wordArray = CryptoJS.enc.Utf16.parse(utf16String);
  58.          */
  59.         parse: function (utf16Str) {
  60.             // Shortcut
  61.             var utf16StrLength = utf16Str.length;
  62.  
  63.             // Convert
  64.             var words = [];
  65.             for (var i = 0; i < utf16StrLength; i++) {
  66.                 words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);
  67.             }
  68.  
  69.             return WordArray.create(words, utf16StrLength * 2);
  70.         }
  71.     };
  72.  
  73.     /**
  74.      * UTF-16 LE encoding strategy.
  75.      */
  76.     C_enc.Utf16LE = {
  77.         /**
  78.          * Converts a word array to a UTF-16 LE string.
  79.          *
  80.          * @param {WordArray} wordArray The word array.
  81.          *
  82.          * @return {string} The UTF-16 LE string.
  83.          *
  84.          * @static
  85.          *
  86.          * @example
  87.          *
  88.          *     var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);
  89.          */
  90.         stringify: function (wordArray) {
  91.             // Shortcuts
  92.             var words = wordArray.words;
  93.             var sigBytes = wordArray.sigBytes;
  94.  
  95.             // Convert
  96.             var utf16Chars = [];
  97.             for (var i = 0; i < sigBytes; i += 2) {
  98.                 var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);
  99.                 utf16Chars.push(String.fromCharCode(codePoint));
  100.             }
  101.  
  102.             return utf16Chars.join('');
  103.         },
  104.  
  105.         /**
  106.          * Converts a UTF-16 LE string to a word array.
  107.          *
  108.          * @param {string} utf16Str The UTF-16 LE string.
  109.          *
  110.          * @return {WordArray} The word array.
  111.          *
  112.          * @static
  113.          *
  114.          * @example
  115.          *
  116.          *     var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);
  117.          */
  118.         parse: function (utf16Str) {
  119.             // Shortcut
  120.             var utf16StrLength = utf16Str.length;
  121.  
  122.             // Convert
  123.             var words = [];
  124.             for (var i = 0; i < utf16StrLength; i++) {
  125.                 words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));
  126.             }
  127.  
  128.             return WordArray.create(words, utf16StrLength * 2);
  129.         }
  130.     };
  131.  
  132.     function swapEndian(word) {
  133.         return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);
  134.     }
  135. }());
  136.