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

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 (124) 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 +234 -0
  7. package/blowfish.js +471 -0
  8. package/bower.json +39 -0
  9. package/cipher-core.js +895 -0
  10. package/core.js +819 -0
  11. package/crypto-js.js +6657 -0
  12. package/docs/QuickStartGuide.wiki +470 -0
  13. package/enc-base64.js +136 -0
  14. package/enc-base64url.js +148 -0
  15. package/enc-hex.js +18 -0
  16. package/enc-latin1.js +18 -0
  17. package/enc-utf16.js +149 -0
  18. package/enc-utf8.js +18 -0
  19. package/evpkdf.js +134 -0
  20. package/format-hex.js +66 -0
  21. package/format-openssl.js +18 -0
  22. package/hmac-md5.js +18 -0
  23. package/hmac-ripemd160.js +18 -0
  24. package/hmac-sha1.js +18 -0
  25. package/hmac-sha224.js +18 -0
  26. package/hmac-sha256.js +18 -0
  27. package/hmac-sha3.js +18 -0
  28. package/hmac-sha384.js +18 -0
  29. package/hmac-sha512.js +18 -0
  30. package/hmac.js +143 -0
  31. package/index.js +18 -0
  32. package/lib-typedarrays.js +76 -0
  33. package/md5.js +268 -0
  34. package/mode-cfb.js +80 -0
  35. package/mode-ctr-gladman.js +116 -0
  36. package/mode-ctr.js +58 -0
  37. package/mode-ecb.js +40 -0
  38. package/mode-ofb.js +54 -0
  39. package/package.json +45 -3
  40. package/pad-ansix923.js +49 -0
  41. package/pad-iso10126.js +44 -0
  42. package/pad-iso97971.js +40 -0
  43. package/pad-nopadding.js +30 -0
  44. package/pad-pkcs7.js +18 -0
  45. package/pad-zeropadding.js +47 -0
  46. package/pbkdf2.js +145 -0
  47. package/rabbit-legacy.js +190 -0
  48. package/rabbit.js +192 -0
  49. package/rc4.js +139 -0
  50. package/ripemd160.js +267 -0
  51. package/sha1.js +150 -0
  52. package/sha224.js +80 -0
  53. package/sha256.js +199 -0
  54. package/sha3.js +326 -0
  55. package/sha384.js +83 -0
  56. package/sha512.js +326 -0
  57. package/test/aes-profile.js +31 -0
  58. package/test/aes-test.js +80 -0
  59. package/test/blowfish-test.js +33 -0
  60. package/test/cipher-test.js +522 -0
  61. package/test/config-test.js +51 -0
  62. package/test/des-profile.js +31 -0
  63. package/test/des-test.js +104 -0
  64. package/test/enc-base64-test.js +71 -0
  65. package/test/enc-hex-test.js +15 -0
  66. package/test/enc-latin1-test.js +15 -0
  67. package/test/enc-utf16-test.js +55 -0
  68. package/test/enc-utf8-test.js +39 -0
  69. package/test/evpkdf-profile.js +11 -0
  70. package/test/evpkdf-test.js +32 -0
  71. package/test/format-openssl-test.js +37 -0
  72. package/test/hmac-md5-profile.js +30 -0
  73. package/test/hmac-md5-test.js +59 -0
  74. package/test/hmac-sha224-test.js +59 -0
  75. package/test/hmac-sha256-test.js +59 -0
  76. package/test/hmac-sha384-test.js +59 -0
  77. package/test/hmac-sha512-test.js +59 -0
  78. package/test/kdf-openssl-test.js +15 -0
  79. package/test/lib-base-test.js +92 -0
  80. package/test/lib-cipherparams-test.js +59 -0
  81. package/test/lib-passwordbasedcipher-test.js +25 -0
  82. package/test/lib-serializablecipher-test.js +51 -0
  83. package/test/lib-typedarrays-test.js +57 -0
  84. package/test/lib-wordarray-test.js +85 -0
  85. package/test/md5-profile.js +24 -0
  86. package/test/md5-test.js +70 -0
  87. package/test/mode-cbc-test.js +49 -0
  88. package/test/mode-cfb-test.js +51 -0
  89. package/test/mode-ctr-test.js +55 -0
  90. package/test/mode-ecb-test.js +38 -0
  91. package/test/mode-ofb-test.js +50 -0
  92. package/test/pad-ansix923-test.js +28 -0
  93. package/test/pad-iso10126-test.js +50 -0
  94. package/test/pad-iso97971-test.js +35 -0
  95. package/test/pad-pkcs7-test.js +28 -0
  96. package/test/pad-zeropadding-test.js +28 -0
  97. package/test/pbkdf2-profile.js +11 -0
  98. package/test/pbkdf2-test.js +80 -0
  99. package/test/profile.html +281 -0
  100. package/test/rabbit-legacy-test.js +80 -0
  101. package/test/rabbit-profile.js +30 -0
  102. package/test/rabbit-test.js +84 -0
  103. package/test/rc4-profile.js +30 -0
  104. package/test/rc4-test.js +68 -0
  105. package/test/ripemd160-test.js +19 -0
  106. package/test/sha1-profile.js +24 -0
  107. package/test/sha1-test.js +70 -0
  108. package/test/sha224-test.js +19 -0
  109. package/test/sha256-profile.js +24 -0
  110. package/test/sha256-test.js +70 -0
  111. package/test/sha3-profile.js +24 -0
  112. package/test/sha3-test.js +69 -0
  113. package/test/sha384-test.js +54 -0
  114. package/test/sha512-profile.js +24 -0
  115. package/test/sha512-test.js +54 -0
  116. package/test/test-build.html +105 -0
  117. package/test/test.html +138 -0
  118. package/test/test1.html +63 -0
  119. package/test/tripledes-profile.js +31 -0
  120. package/test/tripledes-test.js +121 -0
  121. package/test/x64-word-test.js +99 -0
  122. package/test/x64-wordarray-test.js +38 -0
  123. package/tripledes.js +779 -0
  124. package/x64-core.js +304 -0
package/ripemd160.js ADDED
@@ -0,0 +1,267 @@
1
+ ;(function (root, factory) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory(require("./core"));
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define(["./core"], factory);
9
+ }
10
+ else {
11
+ // Global (browser)
12
+ factory(root.CryptoJS);
13
+ }
14
+ }(this, function (CryptoJS) {
15
+
16
+ /** @preserve
17
+ (c) 2012 by Cédric Mesnil. All rights reserved.
18
+
19
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
20
+
21
+ - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
22
+ - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
23
+
24
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+ */
26
+
27
+ (function (Math) {
28
+ // Shortcuts
29
+ var C = CryptoJS;
30
+ var C_lib = C.lib;
31
+ var WordArray = C_lib.WordArray;
32
+ var Hasher = C_lib.Hasher;
33
+ var C_algo = C.algo;
34
+
35
+ // Constants table
36
+ var _zl = WordArray.create([
37
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
38
+ 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
39
+ 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
40
+ 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
41
+ 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);
42
+ var _zr = WordArray.create([
43
+ 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
44
+ 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
45
+ 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
46
+ 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
47
+ 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);
48
+ var _sl = WordArray.create([
49
+ 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
50
+ 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
51
+ 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
52
+ 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
53
+ 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);
54
+ var _sr = WordArray.create([
55
+ 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
56
+ 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
57
+ 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
58
+ 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
59
+ 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);
60
+
61
+ var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);
62
+ var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);
63
+
64
+ /**
65
+ * RIPEMD160 hash algorithm.
66
+ */
67
+ var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({
68
+ _doReset: function () {
69
+ this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);
70
+ },
71
+
72
+ _doProcessBlock: function (M, offset) {
73
+
74
+ // Swap endian
75
+ for (var i = 0; i < 16; i++) {
76
+ // Shortcuts
77
+ var offset_i = offset + i;
78
+ var M_offset_i = M[offset_i];
79
+
80
+ // Swap
81
+ M[offset_i] = (
82
+ (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
83
+ (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
84
+ );
85
+ }
86
+ // Shortcut
87
+ var H = this._hash.words;
88
+ var hl = _hl.words;
89
+ var hr = _hr.words;
90
+ var zl = _zl.words;
91
+ var zr = _zr.words;
92
+ var sl = _sl.words;
93
+ var sr = _sr.words;
94
+
95
+ // Working variables
96
+ var al, bl, cl, dl, el;
97
+ var ar, br, cr, dr, er;
98
+
99
+ ar = al = H[0];
100
+ br = bl = H[1];
101
+ cr = cl = H[2];
102
+ dr = dl = H[3];
103
+ er = el = H[4];
104
+ // Computation
105
+ var t;
106
+ for (var i = 0; i < 80; i += 1) {
107
+ t = (al + M[offset+zl[i]])|0;
108
+ if (i<16){
109
+ t += f1(bl,cl,dl) + hl[0];
110
+ } else if (i<32) {
111
+ t += f2(bl,cl,dl) + hl[1];
112
+ } else if (i<48) {
113
+ t += f3(bl,cl,dl) + hl[2];
114
+ } else if (i<64) {
115
+ t += f4(bl,cl,dl) + hl[3];
116
+ } else {// if (i<80) {
117
+ t += f5(bl,cl,dl) + hl[4];
118
+ }
119
+ t = t|0;
120
+ t = rotl(t,sl[i]);
121
+ t = (t+el)|0;
122
+ al = el;
123
+ el = dl;
124
+ dl = rotl(cl, 10);
125
+ cl = bl;
126
+ bl = t;
127
+
128
+ t = (ar + M[offset+zr[i]])|0;
129
+ if (i<16){
130
+ t += f5(br,cr,dr) + hr[0];
131
+ } else if (i<32) {
132
+ t += f4(br,cr,dr) + hr[1];
133
+ } else if (i<48) {
134
+ t += f3(br,cr,dr) + hr[2];
135
+ } else if (i<64) {
136
+ t += f2(br,cr,dr) + hr[3];
137
+ } else {// if (i<80) {
138
+ t += f1(br,cr,dr) + hr[4];
139
+ }
140
+ t = t|0;
141
+ t = rotl(t,sr[i]) ;
142
+ t = (t+er)|0;
143
+ ar = er;
144
+ er = dr;
145
+ dr = rotl(cr, 10);
146
+ cr = br;
147
+ br = t;
148
+ }
149
+ // Intermediate hash value
150
+ t = (H[1] + cl + dr)|0;
151
+ H[1] = (H[2] + dl + er)|0;
152
+ H[2] = (H[3] + el + ar)|0;
153
+ H[3] = (H[4] + al + br)|0;
154
+ H[4] = (H[0] + bl + cr)|0;
155
+ H[0] = t;
156
+ },
157
+
158
+ _doFinalize: function () {
159
+ // Shortcuts
160
+ var data = this._data;
161
+ var dataWords = data.words;
162
+
163
+ var nBitsTotal = this._nDataBytes * 8;
164
+ var nBitsLeft = data.sigBytes * 8;
165
+
166
+ // Add padding
167
+ dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
168
+ dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
169
+ (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
170
+ (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
171
+ );
172
+ data.sigBytes = (dataWords.length + 1) * 4;
173
+
174
+ // Hash final blocks
175
+ this._process();
176
+
177
+ // Shortcuts
178
+ var hash = this._hash;
179
+ var H = hash.words;
180
+
181
+ // Swap endian
182
+ for (var i = 0; i < 5; i++) {
183
+ // Shortcut
184
+ var H_i = H[i];
185
+
186
+ // Swap
187
+ H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
188
+ (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);
189
+ }
190
+
191
+ // Return final computed hash
192
+ return hash;
193
+ },
194
+
195
+ clone: function () {
196
+ var clone = Hasher.clone.call(this);
197
+ clone._hash = this._hash.clone();
198
+
199
+ return clone;
200
+ }
201
+ });
202
+
203
+
204
+ function f1(x, y, z) {
205
+ return ((x) ^ (y) ^ (z));
206
+
207
+ }
208
+
209
+ function f2(x, y, z) {
210
+ return (((x)&(y)) | ((~x)&(z)));
211
+ }
212
+
213
+ function f3(x, y, z) {
214
+ return (((x) | (~(y))) ^ (z));
215
+ }
216
+
217
+ function f4(x, y, z) {
218
+ return (((x) & (z)) | ((y)&(~(z))));
219
+ }
220
+
221
+ function f5(x, y, z) {
222
+ return ((x) ^ ((y) |(~(z))));
223
+
224
+ }
225
+
226
+ function rotl(x,n) {
227
+ return (x<<n) | (x>>>(32-n));
228
+ }
229
+
230
+
231
+ /**
232
+ * Shortcut function to the hasher's object interface.
233
+ *
234
+ * @param {WordArray|string} message The message to hash.
235
+ *
236
+ * @return {WordArray} The hash.
237
+ *
238
+ * @static
239
+ *
240
+ * @example
241
+ *
242
+ * var hash = CryptoJS.RIPEMD160('message');
243
+ * var hash = CryptoJS.RIPEMD160(wordArray);
244
+ */
245
+ C.RIPEMD160 = Hasher._createHelper(RIPEMD160);
246
+
247
+ /**
248
+ * Shortcut function to the HMAC's object interface.
249
+ *
250
+ * @param {WordArray|string} message The message to hash.
251
+ * @param {WordArray|string} key The secret key.
252
+ *
253
+ * @return {WordArray} The HMAC.
254
+ *
255
+ * @static
256
+ *
257
+ * @example
258
+ *
259
+ * var hmac = CryptoJS.HmacRIPEMD160(message, key);
260
+ */
261
+ C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);
262
+ }(Math));
263
+
264
+
265
+ return CryptoJS.RIPEMD160;
266
+
267
+ }));
package/sha1.js ADDED
@@ -0,0 +1,150 @@
1
+ ;(function (root, factory) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory(require("./core"));
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define(["./core"], factory);
9
+ }
10
+ else {
11
+ // Global (browser)
12
+ factory(root.CryptoJS);
13
+ }
14
+ }(this, function (CryptoJS) {
15
+
16
+ (function () {
17
+ // Shortcuts
18
+ var C = CryptoJS;
19
+ var C_lib = C.lib;
20
+ var WordArray = C_lib.WordArray;
21
+ var Hasher = C_lib.Hasher;
22
+ var C_algo = C.algo;
23
+
24
+ // Reusable object
25
+ var W = [];
26
+
27
+ /**
28
+ * SHA-1 hash algorithm.
29
+ */
30
+ var SHA1 = C_algo.SHA1 = Hasher.extend({
31
+ _doReset: function () {
32
+ this._hash = new WordArray.init([
33
+ 0x67452301, 0xefcdab89,
34
+ 0x98badcfe, 0x10325476,
35
+ 0xc3d2e1f0
36
+ ]);
37
+ },
38
+
39
+ _doProcessBlock: function (M, offset) {
40
+ // Shortcut
41
+ var H = this._hash.words;
42
+
43
+ // Working variables
44
+ var a = H[0];
45
+ var b = H[1];
46
+ var c = H[2];
47
+ var d = H[3];
48
+ var e = H[4];
49
+
50
+ // Computation
51
+ for (var i = 0; i < 80; i++) {
52
+ if (i < 16) {
53
+ W[i] = M[offset + i] | 0;
54
+ } else {
55
+ var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];
56
+ W[i] = (n << 1) | (n >>> 31);
57
+ }
58
+
59
+ var t = ((a << 5) | (a >>> 27)) + e + W[i];
60
+ if (i < 20) {
61
+ t += ((b & c) | (~b & d)) + 0x5a827999;
62
+ } else if (i < 40) {
63
+ t += (b ^ c ^ d) + 0x6ed9eba1;
64
+ } else if (i < 60) {
65
+ t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;
66
+ } else /* if (i < 80) */ {
67
+ t += (b ^ c ^ d) - 0x359d3e2a;
68
+ }
69
+
70
+ e = d;
71
+ d = c;
72
+ c = (b << 30) | (b >>> 2);
73
+ b = a;
74
+ a = t;
75
+ }
76
+
77
+ // Intermediate hash value
78
+ H[0] = (H[0] + a) | 0;
79
+ H[1] = (H[1] + b) | 0;
80
+ H[2] = (H[2] + c) | 0;
81
+ H[3] = (H[3] + d) | 0;
82
+ H[4] = (H[4] + e) | 0;
83
+ },
84
+
85
+ _doFinalize: function () {
86
+ // Shortcuts
87
+ var data = this._data;
88
+ var dataWords = data.words;
89
+
90
+ var nBitsTotal = this._nDataBytes * 8;
91
+ var nBitsLeft = data.sigBytes * 8;
92
+
93
+ // Add padding
94
+ dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
95
+ dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
96
+ dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
97
+ data.sigBytes = dataWords.length * 4;
98
+
99
+ // Hash final blocks
100
+ this._process();
101
+
102
+ // Return final computed hash
103
+ return this._hash;
104
+ },
105
+
106
+ clone: function () {
107
+ var clone = Hasher.clone.call(this);
108
+ clone._hash = this._hash.clone();
109
+
110
+ return clone;
111
+ }
112
+ });
113
+
114
+ /**
115
+ * Shortcut function to the hasher's object interface.
116
+ *
117
+ * @param {WordArray|string} message The message to hash.
118
+ *
119
+ * @return {WordArray} The hash.
120
+ *
121
+ * @static
122
+ *
123
+ * @example
124
+ *
125
+ * var hash = CryptoJS.SHA1('message');
126
+ * var hash = CryptoJS.SHA1(wordArray);
127
+ */
128
+ C.SHA1 = Hasher._createHelper(SHA1);
129
+
130
+ /**
131
+ * Shortcut function to the HMAC's object interface.
132
+ *
133
+ * @param {WordArray|string} message The message to hash.
134
+ * @param {WordArray|string} key The secret key.
135
+ *
136
+ * @return {WordArray} The HMAC.
137
+ *
138
+ * @static
139
+ *
140
+ * @example
141
+ *
142
+ * var hmac = CryptoJS.HmacSHA1(message, key);
143
+ */
144
+ C.HmacSHA1 = Hasher._createHmacHelper(SHA1);
145
+ }());
146
+
147
+
148
+ return CryptoJS.SHA1;
149
+
150
+ }));
package/sha224.js ADDED
@@ -0,0 +1,80 @@
1
+ ;(function (root, factory, undef) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory(require("./core"), require("./sha256"));
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define(["./core", "./sha256"], factory);
9
+ }
10
+ else {
11
+ // Global (browser)
12
+ factory(root.CryptoJS);
13
+ }
14
+ }(this, function (CryptoJS) {
15
+
16
+ (function () {
17
+ // Shortcuts
18
+ var C = CryptoJS;
19
+ var C_lib = C.lib;
20
+ var WordArray = C_lib.WordArray;
21
+ var C_algo = C.algo;
22
+ var SHA256 = C_algo.SHA256;
23
+
24
+ /**
25
+ * SHA-224 hash algorithm.
26
+ */
27
+ var SHA224 = C_algo.SHA224 = SHA256.extend({
28
+ _doReset: function () {
29
+ this._hash = new WordArray.init([
30
+ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
31
+ 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4
32
+ ]);
33
+ },
34
+
35
+ _doFinalize: function () {
36
+ var hash = SHA256._doFinalize.call(this);
37
+
38
+ hash.sigBytes -= 4;
39
+
40
+ return hash;
41
+ }
42
+ });
43
+
44
+ /**
45
+ * Shortcut function to the hasher's object interface.
46
+ *
47
+ * @param {WordArray|string} message The message to hash.
48
+ *
49
+ * @return {WordArray} The hash.
50
+ *
51
+ * @static
52
+ *
53
+ * @example
54
+ *
55
+ * var hash = CryptoJS.SHA224('message');
56
+ * var hash = CryptoJS.SHA224(wordArray);
57
+ */
58
+ C.SHA224 = SHA256._createHelper(SHA224);
59
+
60
+ /**
61
+ * Shortcut function to the HMAC's object interface.
62
+ *
63
+ * @param {WordArray|string} message The message to hash.
64
+ * @param {WordArray|string} key The secret key.
65
+ *
66
+ * @return {WordArray} The HMAC.
67
+ *
68
+ * @static
69
+ *
70
+ * @example
71
+ *
72
+ * var hmac = CryptoJS.HmacSHA224(message, key);
73
+ */
74
+ C.HmacSHA224 = SHA256._createHmacHelper(SHA224);
75
+ }());
76
+
77
+
78
+ return CryptoJS.SHA224;
79
+
80
+ }));
package/sha256.js ADDED
@@ -0,0 +1,199 @@
1
+ ;(function (root, factory) {
2
+ if (typeof exports === "object") {
3
+ // CommonJS
4
+ module.exports = exports = factory(require("./core"));
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ // AMD
8
+ define(["./core"], factory);
9
+ }
10
+ else {
11
+ // Global (browser)
12
+ factory(root.CryptoJS);
13
+ }
14
+ }(this, function (CryptoJS) {
15
+
16
+ (function (Math) {
17
+ // Shortcuts
18
+ var C = CryptoJS;
19
+ var C_lib = C.lib;
20
+ var WordArray = C_lib.WordArray;
21
+ var Hasher = C_lib.Hasher;
22
+ var C_algo = C.algo;
23
+
24
+ // Initialization and round constants tables
25
+ var H = [];
26
+ var K = [];
27
+
28
+ // Compute constants
29
+ (function () {
30
+ function isPrime(n) {
31
+ var sqrtN = Math.sqrt(n);
32
+ for (var factor = 2; factor <= sqrtN; factor++) {
33
+ if (!(n % factor)) {
34
+ return false;
35
+ }
36
+ }
37
+
38
+ return true;
39
+ }
40
+
41
+ function getFractionalBits(n) {
42
+ return ((n - (n | 0)) * 0x100000000) | 0;
43
+ }
44
+
45
+ var n = 2;
46
+ var nPrime = 0;
47
+ while (nPrime < 64) {
48
+ if (isPrime(n)) {
49
+ if (nPrime < 8) {
50
+ H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));
51
+ }
52
+ K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));
53
+
54
+ nPrime++;
55
+ }
56
+
57
+ n++;
58
+ }
59
+ }());
60
+
61
+ // Reusable object
62
+ var W = [];
63
+
64
+ /**
65
+ * SHA-256 hash algorithm.
66
+ */
67
+ var SHA256 = C_algo.SHA256 = Hasher.extend({
68
+ _doReset: function () {
69
+ this._hash = new WordArray.init(H.slice(0));
70
+ },
71
+
72
+ _doProcessBlock: function (M, offset) {
73
+ // Shortcut
74
+ var H = this._hash.words;
75
+
76
+ // Working variables
77
+ var a = H[0];
78
+ var b = H[1];
79
+ var c = H[2];
80
+ var d = H[3];
81
+ var e = H[4];
82
+ var f = H[5];
83
+ var g = H[6];
84
+ var h = H[7];
85
+
86
+ // Computation
87
+ for (var i = 0; i < 64; i++) {
88
+ if (i < 16) {
89
+ W[i] = M[offset + i] | 0;
90
+ } else {
91
+ var gamma0x = W[i - 15];
92
+ var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^
93
+ ((gamma0x << 14) | (gamma0x >>> 18)) ^
94
+ (gamma0x >>> 3);
95
+
96
+ var gamma1x = W[i - 2];
97
+ var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^
98
+ ((gamma1x << 13) | (gamma1x >>> 19)) ^
99
+ (gamma1x >>> 10);
100
+
101
+ W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];
102
+ }
103
+
104
+ var ch = (e & f) ^ (~e & g);
105
+ var maj = (a & b) ^ (a & c) ^ (b & c);
106
+
107
+ var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));
108
+ var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));
109
+
110
+ var t1 = h + sigma1 + ch + K[i] + W[i];
111
+ var t2 = sigma0 + maj;
112
+
113
+ h = g;
114
+ g = f;
115
+ f = e;
116
+ e = (d + t1) | 0;
117
+ d = c;
118
+ c = b;
119
+ b = a;
120
+ a = (t1 + t2) | 0;
121
+ }
122
+
123
+ // Intermediate hash value
124
+ H[0] = (H[0] + a) | 0;
125
+ H[1] = (H[1] + b) | 0;
126
+ H[2] = (H[2] + c) | 0;
127
+ H[3] = (H[3] + d) | 0;
128
+ H[4] = (H[4] + e) | 0;
129
+ H[5] = (H[5] + f) | 0;
130
+ H[6] = (H[6] + g) | 0;
131
+ H[7] = (H[7] + h) | 0;
132
+ },
133
+
134
+ _doFinalize: function () {
135
+ // Shortcuts
136
+ var data = this._data;
137
+ var dataWords = data.words;
138
+
139
+ var nBitsTotal = this._nDataBytes * 8;
140
+ var nBitsLeft = data.sigBytes * 8;
141
+
142
+ // Add padding
143
+ dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
144
+ dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
145
+ dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
146
+ data.sigBytes = dataWords.length * 4;
147
+
148
+ // Hash final blocks
149
+ this._process();
150
+
151
+ // Return final computed hash
152
+ return this._hash;
153
+ },
154
+
155
+ clone: function () {
156
+ var clone = Hasher.clone.call(this);
157
+ clone._hash = this._hash.clone();
158
+
159
+ return clone;
160
+ }
161
+ });
162
+
163
+ /**
164
+ * Shortcut function to the hasher's object interface.
165
+ *
166
+ * @param {WordArray|string} message The message to hash.
167
+ *
168
+ * @return {WordArray} The hash.
169
+ *
170
+ * @static
171
+ *
172
+ * @example
173
+ *
174
+ * var hash = CryptoJS.SHA256('message');
175
+ * var hash = CryptoJS.SHA256(wordArray);
176
+ */
177
+ C.SHA256 = Hasher._createHelper(SHA256);
178
+
179
+ /**
180
+ * Shortcut function to the HMAC's object interface.
181
+ *
182
+ * @param {WordArray|string} message The message to hash.
183
+ * @param {WordArray|string} key The secret key.
184
+ *
185
+ * @return {WordArray} The HMAC.
186
+ *
187
+ * @static
188
+ *
189
+ * @example
190
+ *
191
+ * var hmac = CryptoJS.HmacSHA256(message, key);
192
+ */
193
+ C.HmacSHA256 = Hasher._createHmacHelper(SHA256);
194
+ }(Math));
195
+
196
+
197
+ return CryptoJS.SHA256;
198
+
199
+ }));