@brix-crypto/crypto-js 0.0.1-security → 4.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @brix-crypto/crypto-js might be problematic. Click here for more details.

Files changed (109) hide show
  1. package/.jshintrc +33 -0
  2. package/.travis.yml +15 -0
  3. package/CONTRIBUTING.md +28 -0
  4. package/LICENSE +24 -0
  5. package/README.md +273 -3
  6. package/aes.js +214 -0
  7. package/blowfish.js +451 -0
  8. package/cipher-core.js +877 -0
  9. package/core.js +796 -0
  10. package/docs/QuickStartGuide.wiki +470 -0
  11. package/enc-base64.js +116 -0
  12. package/enc-base64url.js +128 -0
  13. package/enc-utf16.js +129 -0
  14. package/evpkdf.js +114 -0
  15. package/format-hex.js +46 -0
  16. package/hmac.js +125 -0
  17. package/index.js +18 -0
  18. package/lib-typedarrays.js +56 -0
  19. package/md5.js +248 -0
  20. package/mode-cfb.js +60 -0
  21. package/mode-ctr-gladman.js +96 -0
  22. package/mode-ctr.js +38 -0
  23. package/mode-ecb.js +20 -0
  24. package/mode-ofb.js +34 -0
  25. package/package.json +45 -3
  26. package/pad-ansix923.js +29 -0
  27. package/pad-iso10126.js +24 -0
  28. package/pad-iso97971.js +20 -0
  29. package/pad-nopadding.js +10 -0
  30. package/pad-zeropadding.js +27 -0
  31. package/pbkdf2.js +125 -0
  32. package/rabbit-legacy.js +170 -0
  33. package/rabbit.js +172 -0
  34. package/rc4.js +119 -0
  35. package/ripemd160.js +247 -0
  36. package/sha1.js +130 -0
  37. package/sha224.js +60 -0
  38. package/sha256.js +179 -0
  39. package/sha3.js +306 -0
  40. package/sha384.js +63 -0
  41. package/sha512.js +306 -0
  42. package/test/aes-profile.js +31 -0
  43. package/test/aes-test.js +80 -0
  44. package/test/blowfish-test.js +33 -0
  45. package/test/cipher-test.js +522 -0
  46. package/test/config-test.js +51 -0
  47. package/test/des-profile.js +31 -0
  48. package/test/des-test.js +104 -0
  49. package/test/enc-base64-test.js +71 -0
  50. package/test/enc-hex-test.js +15 -0
  51. package/test/enc-latin1-test.js +15 -0
  52. package/test/enc-utf16-test.js +55 -0
  53. package/test/enc-utf8-test.js +39 -0
  54. package/test/evpkdf-profile.js +11 -0
  55. package/test/evpkdf-test.js +32 -0
  56. package/test/format-openssl-test.js +37 -0
  57. package/test/hmac-md5-profile.js +30 -0
  58. package/test/hmac-md5-test.js +59 -0
  59. package/test/hmac-sha224-test.js +59 -0
  60. package/test/hmac-sha256-test.js +59 -0
  61. package/test/hmac-sha384-test.js +59 -0
  62. package/test/hmac-sha512-test.js +59 -0
  63. package/test/kdf-openssl-test.js +15 -0
  64. package/test/lib-base-test.js +92 -0
  65. package/test/lib-cipherparams-test.js +59 -0
  66. package/test/lib-passwordbasedcipher-test.js +25 -0
  67. package/test/lib-serializablecipher-test.js +51 -0
  68. package/test/lib-typedarrays-test.js +57 -0
  69. package/test/lib-wordarray-test.js +85 -0
  70. package/test/md5-profile.js +24 -0
  71. package/test/md5-test.js +70 -0
  72. package/test/mode-cbc-test.js +49 -0
  73. package/test/mode-cfb-test.js +51 -0
  74. package/test/mode-ctr-test.js +55 -0
  75. package/test/mode-ecb-test.js +38 -0
  76. package/test/mode-ofb-test.js +50 -0
  77. package/test/pad-ansix923-test.js +28 -0
  78. package/test/pad-iso10126-test.js +50 -0
  79. package/test/pad-iso97971-test.js +35 -0
  80. package/test/pad-pkcs7-test.js +28 -0
  81. package/test/pad-zeropadding-test.js +28 -0
  82. package/test/pbkdf2-profile.js +11 -0
  83. package/test/pbkdf2-test.js +80 -0
  84. package/test/profile.html +281 -0
  85. package/test/rabbit-legacy-test.js +80 -0
  86. package/test/rabbit-profile.js +30 -0
  87. package/test/rabbit-test.js +84 -0
  88. package/test/rc4-profile.js +30 -0
  89. package/test/rc4-test.js +68 -0
  90. package/test/ripemd160-test.js +19 -0
  91. package/test/sha1-profile.js +24 -0
  92. package/test/sha1-test.js +70 -0
  93. package/test/sha224-test.js +19 -0
  94. package/test/sha256-profile.js +24 -0
  95. package/test/sha256-test.js +70 -0
  96. package/test/sha3-profile.js +24 -0
  97. package/test/sha3-test.js +69 -0
  98. package/test/sha384-test.js +54 -0
  99. package/test/sha512-profile.js +24 -0
  100. package/test/sha512-test.js +54 -0
  101. package/test/test-build.html +105 -0
  102. package/test/test.html +138 -0
  103. package/test/test1.html +63 -0
  104. package/test/tripledes-profile.js +31 -0
  105. package/test/tripledes-test.js +121 -0
  106. package/test/x64-word-test.js +99 -0
  107. package/test/x64-wordarray-test.js +38 -0
  108. package/tripledes.js +759 -0
  109. package/x64-core.js +284 -0
package/sha3.js ADDED
@@ -0,0 +1,306 @@
1
+ (function (Math) {
2
+ // Shortcuts
3
+ var C = CryptoJS;
4
+ var C_lib = C.lib;
5
+ var WordArray = C_lib.WordArray;
6
+ var Hasher = C_lib.Hasher;
7
+ var C_x64 = C.x64;
8
+ var X64Word = C_x64.Word;
9
+ var C_algo = C.algo;
10
+
11
+ // Constants tables
12
+ var RHO_OFFSETS = [];
13
+ var PI_INDEXES = [];
14
+ var ROUND_CONSTANTS = [];
15
+
16
+ // Compute Constants
17
+ (function () {
18
+ // Compute rho offset constants
19
+ var x = 1, y = 0;
20
+ for (var t = 0; t < 24; t++) {
21
+ RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;
22
+
23
+ var newX = y % 5;
24
+ var newY = (2 * x + 3 * y) % 5;
25
+ x = newX;
26
+ y = newY;
27
+ }
28
+
29
+ // Compute pi index constants
30
+ for (var x = 0; x < 5; x++) {
31
+ for (var y = 0; y < 5; y++) {
32
+ PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;
33
+ }
34
+ }
35
+
36
+ // Compute round constants
37
+ var LFSR = 0x01;
38
+ for (var i = 0; i < 24; i++) {
39
+ var roundConstantMsw = 0;
40
+ var roundConstantLsw = 0;
41
+
42
+ for (var j = 0; j < 7; j++) {
43
+ if (LFSR & 0x01) {
44
+ var bitPosition = (1 << j) - 1;
45
+ if (bitPosition < 32) {
46
+ roundConstantLsw ^= 1 << bitPosition;
47
+ } else /* if (bitPosition >= 32) */ {
48
+ roundConstantMsw ^= 1 << (bitPosition - 32);
49
+ }
50
+ }
51
+
52
+ // Compute next LFSR
53
+ if (LFSR & 0x80) {
54
+ // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1
55
+ LFSR = (LFSR << 1) ^ 0x71;
56
+ } else {
57
+ LFSR <<= 1;
58
+ }
59
+ }
60
+
61
+ ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);
62
+ }
63
+ }());
64
+
65
+ // Reusable objects for temporary values
66
+ var T = [];
67
+ (function () {
68
+ for (var i = 0; i < 25; i++) {
69
+ T[i] = X64Word.create();
70
+ }
71
+ }());
72
+
73
+ /**
74
+ * SHA-3 hash algorithm.
75
+ */
76
+ var SHA3 = C_algo.SHA3 = Hasher.extend({
77
+ /**
78
+ * Configuration options.
79
+ *
80
+ * @property {number} outputLength
81
+ * The desired number of bits in the output hash.
82
+ * Only values permitted are: 224, 256, 384, 512.
83
+ * Default: 512
84
+ */
85
+ cfg: Hasher.cfg.extend({
86
+ outputLength: 512
87
+ }),
88
+
89
+ _doReset: function () {
90
+ var state = this._state = []
91
+ for (var i = 0; i < 25; i++) {
92
+ state[i] = new X64Word.init();
93
+ }
94
+
95
+ this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;
96
+ },
97
+
98
+ _doProcessBlock: function (M, offset) {
99
+ // Shortcuts
100
+ var state = this._state;
101
+ var nBlockSizeLanes = this.blockSize / 2;
102
+
103
+ // Absorb
104
+ for (var i = 0; i < nBlockSizeLanes; i++) {
105
+ // Shortcuts
106
+ var M2i = M[offset + 2 * i];
107
+ var M2i1 = M[offset + 2 * i + 1];
108
+
109
+ // Swap endian
110
+ M2i = (
111
+ (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |
112
+ (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)
113
+ );
114
+ M2i1 = (
115
+ (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |
116
+ (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)
117
+ );
118
+
119
+ // Absorb message into state
120
+ var lane = state[i];
121
+ lane.high ^= M2i1;
122
+ lane.low ^= M2i;
123
+ }
124
+
125
+ // Rounds
126
+ for (var round = 0; round < 24; round++) {
127
+ // Theta
128
+ for (var x = 0; x < 5; x++) {
129
+ // Mix column lanes
130
+ var tMsw = 0, tLsw = 0;
131
+ for (var y = 0; y < 5; y++) {
132
+ var lane = state[x + 5 * y];
133
+ tMsw ^= lane.high;
134
+ tLsw ^= lane.low;
135
+ }
136
+
137
+ // Temporary values
138
+ var Tx = T[x];
139
+ Tx.high = tMsw;
140
+ Tx.low = tLsw;
141
+ }
142
+ for (var x = 0; x < 5; x++) {
143
+ // Shortcuts
144
+ var Tx4 = T[(x + 4) % 5];
145
+ var Tx1 = T[(x + 1) % 5];
146
+ var Tx1Msw = Tx1.high;
147
+ var Tx1Lsw = Tx1.low;
148
+
149
+ // Mix surrounding columns
150
+ var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));
151
+ var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));
152
+ for (var y = 0; y < 5; y++) {
153
+ var lane = state[x + 5 * y];
154
+ lane.high ^= tMsw;
155
+ lane.low ^= tLsw;
156
+ }
157
+ }
158
+
159
+ // Rho Pi
160
+ for (var laneIndex = 1; laneIndex < 25; laneIndex++) {
161
+ var tMsw;
162
+ var tLsw;
163
+
164
+ // Shortcuts
165
+ var lane = state[laneIndex];
166
+ var laneMsw = lane.high;
167
+ var laneLsw = lane.low;
168
+ var rhoOffset = RHO_OFFSETS[laneIndex];
169
+
170
+ // Rotate lanes
171
+ if (rhoOffset < 32) {
172
+ tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));
173
+ tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));
174
+ } else /* if (rhoOffset >= 32) */ {
175
+ tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));
176
+ tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));
177
+ }
178
+
179
+ // Transpose lanes
180
+ var TPiLane = T[PI_INDEXES[laneIndex]];
181
+ TPiLane.high = tMsw;
182
+ TPiLane.low = tLsw;
183
+ }
184
+
185
+ // Rho pi at x = y = 0
186
+ var T0 = T[0];
187
+ var state0 = state[0];
188
+ T0.high = state0.high;
189
+ T0.low = state0.low;
190
+
191
+ // Chi
192
+ for (var x = 0; x < 5; x++) {
193
+ for (var y = 0; y < 5; y++) {
194
+ // Shortcuts
195
+ var laneIndex = x + 5 * y;
196
+ var lane = state[laneIndex];
197
+ var TLane = T[laneIndex];
198
+ var Tx1Lane = T[((x + 1) % 5) + 5 * y];
199
+ var Tx2Lane = T[((x + 2) % 5) + 5 * y];
200
+
201
+ // Mix rows
202
+ lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);
203
+ lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);
204
+ }
205
+ }
206
+
207
+ // Iota
208
+ var lane = state[0];
209
+ var roundConstant = ROUND_CONSTANTS[round];
210
+ lane.high ^= roundConstant.high;
211
+ lane.low ^= roundConstant.low;
212
+ }
213
+ },
214
+
215
+ _doFinalize: function () {
216
+ // Shortcuts
217
+ var data = this._data;
218
+ var dataWords = data.words;
219
+ var nBitsTotal = this._nDataBytes * 8;
220
+ var nBitsLeft = data.sigBytes * 8;
221
+ var blockSizeBits = this.blockSize * 32;
222
+
223
+ // Add padding
224
+ dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);
225
+ dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;
226
+ data.sigBytes = dataWords.length * 4;
227
+
228
+ // Hash final blocks
229
+ this._process();
230
+
231
+ // Shortcuts
232
+ var state = this._state;
233
+ var outputLengthBytes = this.cfg.outputLength / 8;
234
+ var outputLengthLanes = outputLengthBytes / 8;
235
+
236
+ // Squeeze
237
+ var hashWords = [];
238
+ for (var i = 0; i < outputLengthLanes; i++) {
239
+ // Shortcuts
240
+ var lane = state[i];
241
+ var laneMsw = lane.high;
242
+ var laneLsw = lane.low;
243
+
244
+ // Swap endian
245
+ laneMsw = (
246
+ (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |
247
+ (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)
248
+ );
249
+ laneLsw = (
250
+ (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |
251
+ (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)
252
+ );
253
+
254
+ // Squeeze state to retrieve hash
255
+ hashWords.push(laneLsw);
256
+ hashWords.push(laneMsw);
257
+ }
258
+
259
+ // Return final computed hash
260
+ return new WordArray.init(hashWords, outputLengthBytes);
261
+ },
262
+
263
+ clone: function () {
264
+ var clone = Hasher.clone.call(this);
265
+
266
+ var state = clone._state = this._state.slice(0);
267
+ for (var i = 0; i < 25; i++) {
268
+ state[i] = state[i].clone();
269
+ }
270
+
271
+ return clone;
272
+ }
273
+ });
274
+
275
+ /**
276
+ * Shortcut function to the hasher's object interface.
277
+ *
278
+ * @param {WordArray|string} message The message to hash.
279
+ *
280
+ * @return {WordArray} The hash.
281
+ *
282
+ * @static
283
+ *
284
+ * @example
285
+ *
286
+ * var hash = CryptoJS.SHA3('message');
287
+ * var hash = CryptoJS.SHA3(wordArray);
288
+ */
289
+ C.SHA3 = Hasher._createHelper(SHA3);
290
+
291
+ /**
292
+ * Shortcut function to the HMAC's object interface.
293
+ *
294
+ * @param {WordArray|string} message The message to hash.
295
+ * @param {WordArray|string} key The secret key.
296
+ *
297
+ * @return {WordArray} The HMAC.
298
+ *
299
+ * @static
300
+ *
301
+ * @example
302
+ *
303
+ * var hmac = CryptoJS.HmacSHA3(message, key);
304
+ */
305
+ C.HmacSHA3 = Hasher._createHmacHelper(SHA3);
306
+ }(Math));
package/sha384.js ADDED
@@ -0,0 +1,63 @@
1
+ (function () {
2
+ // Shortcuts
3
+ var C = CryptoJS;
4
+ var C_x64 = C.x64;
5
+ var X64Word = C_x64.Word;
6
+ var X64WordArray = C_x64.WordArray;
7
+ var C_algo = C.algo;
8
+ var SHA512 = C_algo.SHA512;
9
+
10
+ /**
11
+ * SHA-384 hash algorithm.
12
+ */
13
+ var SHA384 = C_algo.SHA384 = SHA512.extend({
14
+ _doReset: function () {
15
+ this._hash = new X64WordArray.init([
16
+ new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),
17
+ new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),
18
+ new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),
19
+ new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)
20
+ ]);
21
+ },
22
+
23
+ _doFinalize: function () {
24
+ var hash = SHA512._doFinalize.call(this);
25
+
26
+ hash.sigBytes -= 16;
27
+
28
+ return hash;
29
+ }
30
+ });
31
+
32
+ /**
33
+ * Shortcut function to the hasher's object interface.
34
+ *
35
+ * @param {WordArray|string} message The message to hash.
36
+ *
37
+ * @return {WordArray} The hash.
38
+ *
39
+ * @static
40
+ *
41
+ * @example
42
+ *
43
+ * var hash = CryptoJS.SHA384('message');
44
+ * var hash = CryptoJS.SHA384(wordArray);
45
+ */
46
+ C.SHA384 = SHA512._createHelper(SHA384);
47
+
48
+ /**
49
+ * Shortcut function to the HMAC's object interface.
50
+ *
51
+ * @param {WordArray|string} message The message to hash.
52
+ * @param {WordArray|string} key The secret key.
53
+ *
54
+ * @return {WordArray} The HMAC.
55
+ *
56
+ * @static
57
+ *
58
+ * @example
59
+ *
60
+ * var hmac = CryptoJS.HmacSHA384(message, key);
61
+ */
62
+ C.HmacSHA384 = SHA512._createHmacHelper(SHA384);
63
+ }());
package/sha512.js ADDED
@@ -0,0 +1,306 @@
1
+ (function () {
2
+ // Shortcuts
3
+ var C = CryptoJS;
4
+ var C_lib = C.lib;
5
+ var Hasher = C_lib.Hasher;
6
+ var C_x64 = C.x64;
7
+ var X64Word = C_x64.Word;
8
+ var X64WordArray = C_x64.WordArray;
9
+ var C_algo = C.algo;
10
+
11
+ function X64Word_create() {
12
+ return X64Word.create.apply(X64Word, arguments);
13
+ }
14
+
15
+ // Constants
16
+ var K = [
17
+ X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),
18
+ X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),
19
+ X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),
20
+ X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),
21
+ X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),
22
+ X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),
23
+ X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),
24
+ X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),
25
+ X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),
26
+ X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),
27
+ X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),
28
+ X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),
29
+ X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),
30
+ X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),
31
+ X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),
32
+ X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),
33
+ X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),
34
+ X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),
35
+ X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),
36
+ X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),
37
+ X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),
38
+ X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),
39
+ X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),
40
+ X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),
41
+ X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),
42
+ X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),
43
+ X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),
44
+ X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),
45
+ X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),
46
+ X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),
47
+ X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),
48
+ X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),
49
+ X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),
50
+ X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),
51
+ X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),
52
+ X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),
53
+ X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),
54
+ X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),
55
+ X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),
56
+ X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)
57
+ ];
58
+
59
+ // Reusable objects
60
+ var W = [];
61
+ (function () {
62
+ for (var i = 0; i < 80; i++) {
63
+ W[i] = X64Word_create();
64
+ }
65
+ }());
66
+
67
+ /**
68
+ * SHA-512 hash algorithm.
69
+ */
70
+ var SHA512 = C_algo.SHA512 = Hasher.extend({
71
+ _doReset: function () {
72
+ this._hash = new X64WordArray.init([
73
+ new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),
74
+ new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),
75
+ new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),
76
+ new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)
77
+ ]);
78
+ },
79
+
80
+ _doProcessBlock: function (M, offset) {
81
+ // Shortcuts
82
+ var H = this._hash.words;
83
+
84
+ var H0 = H[0];
85
+ var H1 = H[1];
86
+ var H2 = H[2];
87
+ var H3 = H[3];
88
+ var H4 = H[4];
89
+ var H5 = H[5];
90
+ var H6 = H[6];
91
+ var H7 = H[7];
92
+
93
+ var H0h = H0.high;
94
+ var H0l = H0.low;
95
+ var H1h = H1.high;
96
+ var H1l = H1.low;
97
+ var H2h = H2.high;
98
+ var H2l = H2.low;
99
+ var H3h = H3.high;
100
+ var H3l = H3.low;
101
+ var H4h = H4.high;
102
+ var H4l = H4.low;
103
+ var H5h = H5.high;
104
+ var H5l = H5.low;
105
+ var H6h = H6.high;
106
+ var H6l = H6.low;
107
+ var H7h = H7.high;
108
+ var H7l = H7.low;
109
+
110
+ // Working variables
111
+ var ah = H0h;
112
+ var al = H0l;
113
+ var bh = H1h;
114
+ var bl = H1l;
115
+ var ch = H2h;
116
+ var cl = H2l;
117
+ var dh = H3h;
118
+ var dl = H3l;
119
+ var eh = H4h;
120
+ var el = H4l;
121
+ var fh = H5h;
122
+ var fl = H5l;
123
+ var gh = H6h;
124
+ var gl = H6l;
125
+ var hh = H7h;
126
+ var hl = H7l;
127
+
128
+ // Rounds
129
+ for (var i = 0; i < 80; i++) {
130
+ var Wil;
131
+ var Wih;
132
+
133
+ // Shortcut
134
+ var Wi = W[i];
135
+
136
+ // Extend message
137
+ if (i < 16) {
138
+ Wih = Wi.high = M[offset + i * 2] | 0;
139
+ Wil = Wi.low = M[offset + i * 2 + 1] | 0;
140
+ } else {
141
+ // Gamma0
142
+ var gamma0x = W[i - 15];
143
+ var gamma0xh = gamma0x.high;
144
+ var gamma0xl = gamma0x.low;
145
+ var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);
146
+ var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));
147
+
148
+ // Gamma1
149
+ var gamma1x = W[i - 2];
150
+ var gamma1xh = gamma1x.high;
151
+ var gamma1xl = gamma1x.low;
152
+ var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);
153
+ var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));
154
+
155
+ // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
156
+ var Wi7 = W[i - 7];
157
+ var Wi7h = Wi7.high;
158
+ var Wi7l = Wi7.low;
159
+
160
+ var Wi16 = W[i - 16];
161
+ var Wi16h = Wi16.high;
162
+ var Wi16l = Wi16.low;
163
+
164
+ Wil = gamma0l + Wi7l;
165
+ Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);
166
+ Wil = Wil + gamma1l;
167
+ Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);
168
+ Wil = Wil + Wi16l;
169
+ Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);
170
+
171
+ Wi.high = Wih;
172
+ Wi.low = Wil;
173
+ }
174
+
175
+ var chh = (eh & fh) ^ (~eh & gh);
176
+ var chl = (el & fl) ^ (~el & gl);
177
+ var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
178
+ var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
179
+
180
+ var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
181
+ var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
182
+ var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));
183
+ var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));
184
+
185
+ // t1 = h + sigma1 + ch + K[i] + W[i]
186
+ var Ki = K[i];
187
+ var Kih = Ki.high;
188
+ var Kil = Ki.low;
189
+
190
+ var t1l = hl + sigma1l;
191
+ var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
192
+ var t1l = t1l + chl;
193
+ var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
194
+ var t1l = t1l + Kil;
195
+ var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);
196
+ var t1l = t1l + Wil;
197
+ var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);
198
+
199
+ // t2 = sigma0 + maj
200
+ var t2l = sigma0l + majl;
201
+ var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
202
+
203
+ // Update working variables
204
+ hh = gh;
205
+ hl = gl;
206
+ gh = fh;
207
+ gl = fl;
208
+ fh = eh;
209
+ fl = el;
210
+ el = (dl + t1l) | 0;
211
+ eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
212
+ dh = ch;
213
+ dl = cl;
214
+ ch = bh;
215
+ cl = bl;
216
+ bh = ah;
217
+ bl = al;
218
+ al = (t1l + t2l) | 0;
219
+ ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
220
+ }
221
+
222
+ // Intermediate hash value
223
+ H0l = H0.low = (H0l + al);
224
+ H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));
225
+ H1l = H1.low = (H1l + bl);
226
+ H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));
227
+ H2l = H2.low = (H2l + cl);
228
+ H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));
229
+ H3l = H3.low = (H3l + dl);
230
+ H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));
231
+ H4l = H4.low = (H4l + el);
232
+ H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));
233
+ H5l = H5.low = (H5l + fl);
234
+ H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));
235
+ H6l = H6.low = (H6l + gl);
236
+ H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));
237
+ H7l = H7.low = (H7l + hl);
238
+ H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));
239
+ },
240
+
241
+ _doFinalize: function () {
242
+ // Shortcuts
243
+ var data = this._data;
244
+ var dataWords = data.words;
245
+
246
+ var nBitsTotal = this._nDataBytes * 8;
247
+ var nBitsLeft = data.sigBytes * 8;
248
+
249
+ // Add padding
250
+ dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
251
+ dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);
252
+ dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;
253
+ data.sigBytes = dataWords.length * 4;
254
+
255
+ // Hash final blocks
256
+ this._process();
257
+
258
+ // Convert hash to 32-bit word array before returning
259
+ var hash = this._hash.toX32();
260
+
261
+ // Return final computed hash
262
+ return hash;
263
+ },
264
+
265
+ clone: function () {
266
+ var clone = Hasher.clone.call(this);
267
+ clone._hash = this._hash.clone();
268
+
269
+ return clone;
270
+ },
271
+
272
+ blockSize: 1024/32
273
+ });
274
+
275
+ /**
276
+ * Shortcut function to the hasher's object interface.
277
+ *
278
+ * @param {WordArray|string} message The message to hash.
279
+ *
280
+ * @return {WordArray} The hash.
281
+ *
282
+ * @static
283
+ *
284
+ * @example
285
+ *
286
+ * var hash = CryptoJS.SHA512('message');
287
+ * var hash = CryptoJS.SHA512(wordArray);
288
+ */
289
+ C.SHA512 = Hasher._createHelper(SHA512);
290
+
291
+ /**
292
+ * Shortcut function to the HMAC's object interface.
293
+ *
294
+ * @param {WordArray|string} message The message to hash.
295
+ * @param {WordArray|string} key The secret key.
296
+ *
297
+ * @return {WordArray} The HMAC.
298
+ *
299
+ * @static
300
+ *
301
+ * @example
302
+ *
303
+ * var hmac = CryptoJS.HmacSHA512(message, key);
304
+ */
305
+ C.HmacSHA512 = Hasher._createHmacHelper(SHA512);
306
+ }());