Passed
Branch main (ae8397)
by Ilya
01:02
created

demo/libs/enc-utf16.js   A

Complexity

Total Complexity 10
Complexity/F 1.67

Size

Lines of Code 129
Function Count 6

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

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