OSDN Git Service

295d24e5e98f464bd836673cdd81c65aa78c06f8
[feedblog/feedblog.git] / js / crypto-js / components / enc-utf16.js
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 }());