@protontech/openpgp 6.2.2 → 6.3.0

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.
Files changed (43) hide show
  1. package/dist/lightweight/argon2id.min.mjs +1 -1
  2. package/dist/lightweight/argon2id.mjs +1 -1
  3. package/dist/lightweight/legacy_ciphers.min.mjs +1 -1
  4. package/dist/lightweight/legacy_ciphers.min.mjs.map +1 -1
  5. package/dist/lightweight/legacy_ciphers.mjs +1418 -1586
  6. package/dist/lightweight/nacl-fast.min.mjs +1 -1
  7. package/dist/lightweight/nacl-fast.mjs +1 -1
  8. package/dist/lightweight/noble_curves.min.mjs +7 -7
  9. package/dist/lightweight/noble_curves.min.mjs.map +1 -1
  10. package/dist/lightweight/noble_curves.mjs +15 -16
  11. package/dist/lightweight/noble_hashes.min.mjs +1 -1
  12. package/dist/lightweight/noble_hashes.min.mjs.map +1 -1
  13. package/dist/lightweight/noble_hashes.mjs +12 -15
  14. package/dist/lightweight/noble_post_quantum.min.mjs +1 -1
  15. package/dist/lightweight/noble_post_quantum.mjs +1 -1
  16. package/dist/lightweight/openpgp.min.mjs +3 -3
  17. package/dist/lightweight/openpgp.min.mjs.map +1 -1
  18. package/dist/lightweight/openpgp.mjs +12799 -13575
  19. package/dist/lightweight/sha512.min.mjs +1 -1
  20. package/dist/lightweight/sha512.mjs +1 -1
  21. package/dist/lightweight/unbzip2-stream.min.mjs +3 -0
  22. package/dist/lightweight/unbzip2-stream.min.mjs.map +1 -0
  23. package/dist/lightweight/unbzip2-stream.mjs +570 -0
  24. package/dist/node/openpgp.cjs +14794 -16070
  25. package/dist/node/openpgp.min.cjs +13 -13
  26. package/dist/node/openpgp.min.cjs.map +1 -1
  27. package/dist/node/openpgp.min.mjs +14 -14
  28. package/dist/node/openpgp.min.mjs.map +1 -1
  29. package/dist/node/openpgp.mjs +14794 -16070
  30. package/dist/openpgp.js +14794 -16070
  31. package/dist/openpgp.min.js +14 -14
  32. package/dist/openpgp.min.js.map +1 -1
  33. package/dist/openpgp.min.mjs +14 -14
  34. package/dist/openpgp.min.mjs.map +1 -1
  35. package/dist/openpgp.mjs +14794 -16070
  36. package/dist/types/config/config.d.ts +2 -0
  37. package/dist/types/enums.d.ts +1 -0
  38. package/dist/types/index.d.ts +21 -20
  39. package/dist/types/packet/grammar.d.ts +2 -0
  40. package/package.json +34 -33
  41. package/dist/lightweight/seek-bzip.min.mjs +0 -3
  42. package/dist/lightweight/seek-bzip.min.mjs.map +0 -1
  43. package/dist/lightweight/seek-bzip.mjs +0 -900
@@ -1,6 +1,7 @@
1
- /*! OpenPGP.js v6.2.2 - 2025-09-02 - this is LGPL licensed code, see LICENSE/our website https://openpgpjs.org/ for more information. */
1
+ /*! OpenPGP.js v6.3.0 - 2026-03-13 - this is LGPL licensed code, see LICENSE/our website https://openpgpjs.org/ for more information. */
2
2
  const globalThis = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
3
3
 
4
+ /** @access private */
4
5
  //Paul Tero, July 2001
5
6
  //http://www.tero.co.uk/des/
6
7
  //
@@ -8,7 +9,6 @@ const globalThis = typeof window !== 'undefined' ? window : typeof global !== 'u
8
9
  //http://www.netdealing.com
9
10
  //
10
11
  // Modified by Recurity Labs GmbH
11
-
12
12
  //THIS SOFTWARE IS PROVIDED "AS IS" AND
13
13
  //ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14
14
  //IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -20,1014 +20,908 @@ const globalThis = typeof window !== 'undefined' ? window : typeof global !== 'u
20
20
  //LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
21
21
  //OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
22
22
  //SUCH DAMAGE.
23
-
24
23
  //des
25
24
  //this takes the key, the message, and whether to encrypt or decrypt
26
-
27
25
  function des(keys, message, encrypt, mode, iv, padding) {
28
- //declaring this locally speeds things up a bit
29
- const spfunction1 = [
30
- 0x1010400, 0, 0x10000, 0x1010404, 0x1010004, 0x10404, 0x4, 0x10000, 0x400, 0x1010400,
31
- 0x1010404, 0x400, 0x1000404, 0x1010004, 0x1000000, 0x4, 0x404, 0x1000400, 0x1000400, 0x10400, 0x10400, 0x1010000,
32
- 0x1010000, 0x1000404, 0x10004, 0x1000004, 0x1000004, 0x10004, 0, 0x404, 0x10404, 0x1000000, 0x10000, 0x1010404, 0x4,
33
- 0x1010000, 0x1010400, 0x1000000, 0x1000000, 0x400, 0x1010004, 0x10000, 0x10400, 0x1000004, 0x400, 0x4, 0x1000404,
34
- 0x10404, 0x1010404, 0x10004, 0x1010000, 0x1000404, 0x1000004, 0x404, 0x10404, 0x1010400, 0x404, 0x1000400,
35
- 0x1000400, 0, 0x10004, 0x10400, 0, 0x1010004
36
- ];
37
- const spfunction2 = [
38
- -2146402272, -2147450880, 0x8000, 0x108020, 0x100000, 0x20, -2146435040, -2147450848,
39
- -2147483616, -2146402272, -2146402304, -2147483648, -2147450880, 0x100000, 0x20, -2146435040, 0x108000, 0x100020,
40
- -2147450848, 0, -2147483648, 0x8000, 0x108020, -2146435072, 0x100020, -2147483616, 0, 0x108000, 0x8020, -2146402304,
41
- -2146435072, 0x8020, 0, 0x108020, -2146435040, 0x100000, -2147450848, -2146435072, -2146402304, 0x8000, -2146435072,
42
- -2147450880, 0x20, -2146402272, 0x108020, 0x20, 0x8000, -2147483648, 0x8020, -2146402304, 0x100000, -2147483616,
43
- 0x100020, -2147450848, -2147483616, 0x100020, 0x108000, 0, -2147450880, 0x8020, -2147483648, -2146435040,
44
- -2146402272, 0x108000
45
- ];
46
- const spfunction3 = [
47
- 0x208, 0x8020200, 0, 0x8020008, 0x8000200, 0, 0x20208, 0x8000200, 0x20008, 0x8000008,
48
- 0x8000008, 0x20000, 0x8020208, 0x20008, 0x8020000, 0x208, 0x8000000, 0x8, 0x8020200, 0x200, 0x20200, 0x8020000,
49
- 0x8020008, 0x20208, 0x8000208, 0x20200, 0x20000, 0x8000208, 0x8, 0x8020208, 0x200, 0x8000000, 0x8020200, 0x8000000,
50
- 0x20008, 0x208, 0x20000, 0x8020200, 0x8000200, 0, 0x200, 0x20008, 0x8020208, 0x8000200, 0x8000008, 0x200, 0,
51
- 0x8020008, 0x8000208, 0x20000, 0x8000000, 0x8020208, 0x8, 0x20208, 0x20200, 0x8000008, 0x8020000, 0x8000208, 0x208,
52
- 0x8020000, 0x20208, 0x8, 0x8020008, 0x20200
53
- ];
54
- const spfunction4 = [
55
- 0x802001, 0x2081, 0x2081, 0x80, 0x802080, 0x800081, 0x800001, 0x2001, 0, 0x802000,
56
- 0x802000, 0x802081, 0x81, 0, 0x800080, 0x800001, 0x1, 0x2000, 0x800000, 0x802001, 0x80, 0x800000, 0x2001, 0x2080,
57
- 0x800081, 0x1, 0x2080, 0x800080, 0x2000, 0x802080, 0x802081, 0x81, 0x800080, 0x800001, 0x802000, 0x802081, 0x81, 0,
58
- 0, 0x802000, 0x2080, 0x800080, 0x800081, 0x1, 0x802001, 0x2081, 0x2081, 0x80, 0x802081, 0x81, 0x1, 0x2000, 0x800001,
59
- 0x2001, 0x802080, 0x800081, 0x2001, 0x2080, 0x800000, 0x802001, 0x80, 0x800000, 0x2000, 0x802080
60
- ];
61
- const spfunction5 = [
62
- 0x100, 0x2080100, 0x2080000, 0x42000100, 0x80000, 0x100, 0x40000000, 0x2080000,
63
- 0x40080100, 0x80000, 0x2000100, 0x40080100, 0x42000100, 0x42080000, 0x80100, 0x40000000, 0x2000000, 0x40080000,
64
- 0x40080000, 0, 0x40000100, 0x42080100, 0x42080100, 0x2000100, 0x42080000, 0x40000100, 0, 0x42000000, 0x2080100,
65
- 0x2000000, 0x42000000, 0x80100, 0x80000, 0x42000100, 0x100, 0x2000000, 0x40000000, 0x2080000, 0x42000100,
66
- 0x40080100, 0x2000100, 0x40000000, 0x42080000, 0x2080100, 0x40080100, 0x100, 0x2000000, 0x42080000, 0x42080100,
67
- 0x80100, 0x42000000, 0x42080100, 0x2080000, 0, 0x40080000, 0x42000000, 0x80100, 0x2000100, 0x40000100, 0x80000, 0,
68
- 0x40080000, 0x2080100, 0x40000100
69
- ];
70
- const spfunction6 = [
71
- 0x20000010, 0x20400000, 0x4000, 0x20404010, 0x20400000, 0x10, 0x20404010, 0x400000,
72
- 0x20004000, 0x404010, 0x400000, 0x20000010, 0x400010, 0x20004000, 0x20000000, 0x4010, 0, 0x400010, 0x20004010,
73
- 0x4000, 0x404000, 0x20004010, 0x10, 0x20400010, 0x20400010, 0, 0x404010, 0x20404000, 0x4010, 0x404000, 0x20404000,
74
- 0x20000000, 0x20004000, 0x10, 0x20400010, 0x404000, 0x20404010, 0x400000, 0x4010, 0x20000010, 0x400000, 0x20004000,
75
- 0x20000000, 0x4010, 0x20000010, 0x20404010, 0x404000, 0x20400000, 0x404010, 0x20404000, 0, 0x20400010, 0x10, 0x4000,
76
- 0x20400000, 0x404010, 0x4000, 0x400010, 0x20004010, 0, 0x20404000, 0x20000000, 0x400010, 0x20004010
77
- ];
78
- const spfunction7 = [
79
- 0x200000, 0x4200002, 0x4000802, 0, 0x800, 0x4000802, 0x200802, 0x4200800, 0x4200802,
80
- 0x200000, 0, 0x4000002, 0x2, 0x4000000, 0x4200002, 0x802, 0x4000800, 0x200802, 0x200002, 0x4000800, 0x4000002,
81
- 0x4200000, 0x4200800, 0x200002, 0x4200000, 0x800, 0x802, 0x4200802, 0x200800, 0x2, 0x4000000, 0x200800, 0x4000000,
82
- 0x200800, 0x200000, 0x4000802, 0x4000802, 0x4200002, 0x4200002, 0x2, 0x200002, 0x4000000, 0x4000800, 0x200000,
83
- 0x4200800, 0x802, 0x200802, 0x4200800, 0x802, 0x4000002, 0x4200802, 0x4200000, 0x200800, 0, 0x2, 0x4200802, 0,
84
- 0x200802, 0x4200000, 0x800, 0x4000002, 0x4000800, 0x800, 0x200002
85
- ];
86
- const spfunction8 = [
87
- 0x10001040, 0x1000, 0x40000, 0x10041040, 0x10000000, 0x10001040, 0x40, 0x10000000,
88
- 0x40040, 0x10040000, 0x10041040, 0x41000, 0x10041000, 0x41040, 0x1000, 0x40, 0x10040000, 0x10000040, 0x10001000,
89
- 0x1040, 0x41000, 0x40040, 0x10040040, 0x10041000, 0x1040, 0, 0, 0x10040040, 0x10000040, 0x10001000, 0x41040,
90
- 0x40000, 0x41040, 0x40000, 0x10041000, 0x1000, 0x40, 0x10040040, 0x1000, 0x41040, 0x10001000, 0x40, 0x10000040,
91
- 0x10040000, 0x10040040, 0x10000000, 0x40000, 0x10001040, 0, 0x10041040, 0x40040, 0x10000040, 0x10040000, 0x10001000,
92
- 0x10001040, 0, 0x10041040, 0x41000, 0x41000, 0x1040, 0x1040, 0x40040, 0x10000000, 0x10041000
93
- ];
94
-
95
- //create the 16 or 48 subkeys we will need
96
- let m = 0;
97
- let i;
98
- let j;
99
- let temp;
100
- let right1;
101
- let right2;
102
- let left;
103
- let right;
104
- let looping;
105
- let endloop;
106
- let loopinc;
107
- let len = message.length;
108
-
109
- //set up the loops for single and triple des
110
- const iterations = keys.length === 32 ? 3 : 9; //single or triple des
111
- if (iterations === 3) {
112
- looping = encrypt ? [0, 32, 2] : [30, -2, -2];
113
- } else {
114
- looping = encrypt ? [0, 32, 2, 62, 30, -2, 64, 96, 2] : [94, 62, -2, 32, 64, 2, 30, -2, -2];
115
- }
116
-
117
- //pad the message depending on the padding parameter
118
- //only add padding if encrypting - note that you need to use the same padding option for both encrypt and decrypt
119
- if (encrypt) {
120
- message = desAddPadding(message);
121
- len = message.length;
122
- }
123
-
124
- //store the result here
125
- let result = new Uint8Array(len);
126
- let k = 0;
127
-
128
- //loop through each 64 bit chunk of the message
129
- while (m < len) {
130
- left = (message[m++] << 24) | (message[m++] << 16) | (message[m++] << 8) | message[m++];
131
- right = (message[m++] << 24) | (message[m++] << 16) | (message[m++] << 8) | message[m++];
132
-
133
- //first each 64 but chunk of the message must be permuted according to IP
134
- temp = ((left >>> 4) ^ right) & 0x0f0f0f0f;
135
- right ^= temp;
136
- left ^= (temp << 4);
137
- temp = ((left >>> 16) ^ right) & 0x0000ffff;
138
- right ^= temp;
139
- left ^= (temp << 16);
140
- temp = ((right >>> 2) ^ left) & 0x33333333;
141
- left ^= temp;
142
- right ^= (temp << 2);
143
- temp = ((right >>> 8) ^ left) & 0x00ff00ff;
144
- left ^= temp;
145
- right ^= (temp << 8);
146
- temp = ((left >>> 1) ^ right) & 0x55555555;
147
- right ^= temp;
148
- left ^= (temp << 1);
149
-
150
- left = ((left << 1) | (left >>> 31));
151
- right = ((right << 1) | (right >>> 31));
152
-
153
- //do this either 1 or 3 times for each chunk of the message
154
- for (j = 0; j < iterations; j += 3) {
155
- endloop = looping[j + 1];
156
- loopinc = looping[j + 2];
157
- //now go through and perform the encryption or decryption
158
- for (i = looping[j]; i !== endloop; i += loopinc) { //for efficiency
159
- right1 = right ^ keys[i];
160
- right2 = ((right >>> 4) | (right << 28)) ^ keys[i + 1];
161
- //the result is attained by passing these bytes through the S selection functions
162
- temp = left;
163
- left = right;
164
- right = temp ^ (spfunction2[(right1 >>> 24) & 0x3f] | spfunction4[(right1 >>> 16) & 0x3f] | spfunction6[(right1 >>>
165
- 8) & 0x3f] | spfunction8[right1 & 0x3f] | spfunction1[(right2 >>> 24) & 0x3f] | spfunction3[(right2 >>> 16) &
166
- 0x3f] | spfunction5[(right2 >>> 8) & 0x3f] | spfunction7[right2 & 0x3f]);
167
- }
168
- temp = left;
169
- left = right;
170
- right = temp; //unreverse left and right
171
- } //for either 1 or 3 iterations
172
-
173
- //move then each one bit to the right
174
- left = ((left >>> 1) | (left << 31));
175
- right = ((right >>> 1) | (right << 31));
176
-
177
- //now perform IP-1, which is IP in the opposite direction
178
- temp = ((left >>> 1) ^ right) & 0x55555555;
179
- right ^= temp;
180
- left ^= (temp << 1);
181
- temp = ((right >>> 8) ^ left) & 0x00ff00ff;
182
- left ^= temp;
183
- right ^= (temp << 8);
184
- temp = ((right >>> 2) ^ left) & 0x33333333;
185
- left ^= temp;
186
- right ^= (temp << 2);
187
- temp = ((left >>> 16) ^ right) & 0x0000ffff;
188
- right ^= temp;
189
- left ^= (temp << 16);
190
- temp = ((left >>> 4) ^ right) & 0x0f0f0f0f;
191
- right ^= temp;
192
- left ^= (temp << 4);
193
-
194
- result[k++] = (left >>> 24);
195
- result[k++] = ((left >>> 16) & 0xff);
196
- result[k++] = ((left >>> 8) & 0xff);
197
- result[k++] = (left & 0xff);
198
- result[k++] = (right >>> 24);
199
- result[k++] = ((right >>> 16) & 0xff);
200
- result[k++] = ((right >>> 8) & 0xff);
201
- result[k++] = (right & 0xff);
202
- } //for every 8 characters, or 64 bits in the message
203
-
204
- //only remove padding if decrypting - note that you need to use the same padding option for both encrypt and decrypt
205
- if (!encrypt) {
206
- result = desRemovePadding(result);
207
- }
208
-
209
- return result;
26
+ //declaring this locally speeds things up a bit
27
+ const spfunction1 = [
28
+ 0x1010400, 0, 0x10000, 0x1010404, 0x1010004, 0x10404, 0x4, 0x10000, 0x400, 0x1010400,
29
+ 0x1010404, 0x400, 0x1000404, 0x1010004, 0x1000000, 0x4, 0x404, 0x1000400, 0x1000400, 0x10400, 0x10400, 0x1010000,
30
+ 0x1010000, 0x1000404, 0x10004, 0x1000004, 0x1000004, 0x10004, 0, 0x404, 0x10404, 0x1000000, 0x10000, 0x1010404, 0x4,
31
+ 0x1010000, 0x1010400, 0x1000000, 0x1000000, 0x400, 0x1010004, 0x10000, 0x10400, 0x1000004, 0x400, 0x4, 0x1000404,
32
+ 0x10404, 0x1010404, 0x10004, 0x1010000, 0x1000404, 0x1000004, 0x404, 0x10404, 0x1010400, 0x404, 0x1000400,
33
+ 0x1000400, 0, 0x10004, 0x10400, 0, 0x1010004
34
+ ];
35
+ const spfunction2 = [
36
+ -2146402272, -2147450880, 0x8000, 0x108020, 0x100000, 0x20, -2146435040, -2147450848,
37
+ -2147483616, -2146402272, -2146402304, -2147483648, -2147450880, 0x100000, 0x20, -2146435040, 0x108000, 0x100020,
38
+ -2147450848, 0, -2147483648, 0x8000, 0x108020, -2146435072, 0x100020, -2147483616, 0, 0x108000, 0x8020, -2146402304,
39
+ -2146435072, 0x8020, 0, 0x108020, -2146435040, 0x100000, -2147450848, -2146435072, -2146402304, 0x8000, -2146435072,
40
+ -2147450880, 0x20, -2146402272, 0x108020, 0x20, 0x8000, -2147483648, 0x8020, -2146402304, 0x100000, -2147483616,
41
+ 0x100020, -2147450848, -2147483616, 0x100020, 0x108000, 0, -2147450880, 0x8020, -2147483648, -2146435040,
42
+ -2146402272, 0x108000
43
+ ];
44
+ const spfunction3 = [
45
+ 0x208, 0x8020200, 0, 0x8020008, 0x8000200, 0, 0x20208, 0x8000200, 0x20008, 0x8000008,
46
+ 0x8000008, 0x20000, 0x8020208, 0x20008, 0x8020000, 0x208, 0x8000000, 0x8, 0x8020200, 0x200, 0x20200, 0x8020000,
47
+ 0x8020008, 0x20208, 0x8000208, 0x20200, 0x20000, 0x8000208, 0x8, 0x8020208, 0x200, 0x8000000, 0x8020200, 0x8000000,
48
+ 0x20008, 0x208, 0x20000, 0x8020200, 0x8000200, 0, 0x200, 0x20008, 0x8020208, 0x8000200, 0x8000008, 0x200, 0,
49
+ 0x8020008, 0x8000208, 0x20000, 0x8000000, 0x8020208, 0x8, 0x20208, 0x20200, 0x8000008, 0x8020000, 0x8000208, 0x208,
50
+ 0x8020000, 0x20208, 0x8, 0x8020008, 0x20200
51
+ ];
52
+ const spfunction4 = [
53
+ 0x802001, 0x2081, 0x2081, 0x80, 0x802080, 0x800081, 0x800001, 0x2001, 0, 0x802000,
54
+ 0x802000, 0x802081, 0x81, 0, 0x800080, 0x800001, 0x1, 0x2000, 0x800000, 0x802001, 0x80, 0x800000, 0x2001, 0x2080,
55
+ 0x800081, 0x1, 0x2080, 0x800080, 0x2000, 0x802080, 0x802081, 0x81, 0x800080, 0x800001, 0x802000, 0x802081, 0x81, 0,
56
+ 0, 0x802000, 0x2080, 0x800080, 0x800081, 0x1, 0x802001, 0x2081, 0x2081, 0x80, 0x802081, 0x81, 0x1, 0x2000, 0x800001,
57
+ 0x2001, 0x802080, 0x800081, 0x2001, 0x2080, 0x800000, 0x802001, 0x80, 0x800000, 0x2000, 0x802080
58
+ ];
59
+ const spfunction5 = [
60
+ 0x100, 0x2080100, 0x2080000, 0x42000100, 0x80000, 0x100, 0x40000000, 0x2080000,
61
+ 0x40080100, 0x80000, 0x2000100, 0x40080100, 0x42000100, 0x42080000, 0x80100, 0x40000000, 0x2000000, 0x40080000,
62
+ 0x40080000, 0, 0x40000100, 0x42080100, 0x42080100, 0x2000100, 0x42080000, 0x40000100, 0, 0x42000000, 0x2080100,
63
+ 0x2000000, 0x42000000, 0x80100, 0x80000, 0x42000100, 0x100, 0x2000000, 0x40000000, 0x2080000, 0x42000100,
64
+ 0x40080100, 0x2000100, 0x40000000, 0x42080000, 0x2080100, 0x40080100, 0x100, 0x2000000, 0x42080000, 0x42080100,
65
+ 0x80100, 0x42000000, 0x42080100, 0x2080000, 0, 0x40080000, 0x42000000, 0x80100, 0x2000100, 0x40000100, 0x80000, 0,
66
+ 0x40080000, 0x2080100, 0x40000100
67
+ ];
68
+ const spfunction6 = [
69
+ 0x20000010, 0x20400000, 0x4000, 0x20404010, 0x20400000, 0x10, 0x20404010, 0x400000,
70
+ 0x20004000, 0x404010, 0x400000, 0x20000010, 0x400010, 0x20004000, 0x20000000, 0x4010, 0, 0x400010, 0x20004010,
71
+ 0x4000, 0x404000, 0x20004010, 0x10, 0x20400010, 0x20400010, 0, 0x404010, 0x20404000, 0x4010, 0x404000, 0x20404000,
72
+ 0x20000000, 0x20004000, 0x10, 0x20400010, 0x404000, 0x20404010, 0x400000, 0x4010, 0x20000010, 0x400000, 0x20004000,
73
+ 0x20000000, 0x4010, 0x20000010, 0x20404010, 0x404000, 0x20400000, 0x404010, 0x20404000, 0, 0x20400010, 0x10, 0x4000,
74
+ 0x20400000, 0x404010, 0x4000, 0x400010, 0x20004010, 0, 0x20404000, 0x20000000, 0x400010, 0x20004010
75
+ ];
76
+ const spfunction7 = [
77
+ 0x200000, 0x4200002, 0x4000802, 0, 0x800, 0x4000802, 0x200802, 0x4200800, 0x4200802,
78
+ 0x200000, 0, 0x4000002, 0x2, 0x4000000, 0x4200002, 0x802, 0x4000800, 0x200802, 0x200002, 0x4000800, 0x4000002,
79
+ 0x4200000, 0x4200800, 0x200002, 0x4200000, 0x800, 0x802, 0x4200802, 0x200800, 0x2, 0x4000000, 0x200800, 0x4000000,
80
+ 0x200800, 0x200000, 0x4000802, 0x4000802, 0x4200002, 0x4200002, 0x2, 0x200002, 0x4000000, 0x4000800, 0x200000,
81
+ 0x4200800, 0x802, 0x200802, 0x4200800, 0x802, 0x4000002, 0x4200802, 0x4200000, 0x200800, 0, 0x2, 0x4200802, 0,
82
+ 0x200802, 0x4200000, 0x800, 0x4000002, 0x4000800, 0x800, 0x200002
83
+ ];
84
+ const spfunction8 = [
85
+ 0x10001040, 0x1000, 0x40000, 0x10041040, 0x10000000, 0x10001040, 0x40, 0x10000000,
86
+ 0x40040, 0x10040000, 0x10041040, 0x41000, 0x10041000, 0x41040, 0x1000, 0x40, 0x10040000, 0x10000040, 0x10001000,
87
+ 0x1040, 0x41000, 0x40040, 0x10040040, 0x10041000, 0x1040, 0, 0, 0x10040040, 0x10000040, 0x10001000, 0x41040,
88
+ 0x40000, 0x41040, 0x40000, 0x10041000, 0x1000, 0x40, 0x10040040, 0x1000, 0x41040, 0x10001000, 0x40, 0x10000040,
89
+ 0x10040000, 0x10040040, 0x10000000, 0x40000, 0x10001040, 0, 0x10041040, 0x40040, 0x10000040, 0x10040000, 0x10001000,
90
+ 0x10001040, 0, 0x10041040, 0x41000, 0x41000, 0x1040, 0x1040, 0x40040, 0x10000000, 0x10041000
91
+ ];
92
+ //create the 16 or 48 subkeys we will need
93
+ let m = 0;
94
+ let i;
95
+ let j;
96
+ let temp;
97
+ let right1;
98
+ let right2;
99
+ let left;
100
+ let right;
101
+ let looping;
102
+ let endloop;
103
+ let loopinc;
104
+ let len = message.length;
105
+ //set up the loops for single and triple des
106
+ const iterations = keys.length === 32 ? 3 : 9; //single or triple des
107
+ if (iterations === 3) {
108
+ looping = encrypt ? [0, 32, 2] : [30, -2, -2];
109
+ }
110
+ else {
111
+ looping = encrypt ? [0, 32, 2, 62, 30, -2, 64, 96, 2] : [94, 62, -2, 32, 64, 2, 30, -2, -2];
112
+ }
113
+ //pad the message depending on the padding parameter
114
+ //only add padding if encrypting - note that you need to use the same padding option for both encrypt and decrypt
115
+ if (encrypt) {
116
+ message = desAddPadding(message);
117
+ len = message.length;
118
+ }
119
+ //store the result here
120
+ let result = new Uint8Array(len);
121
+ let k = 0;
122
+ //loop through each 64 bit chunk of the message
123
+ while (m < len) {
124
+ left = (message[m++] << 24) | (message[m++] << 16) | (message[m++] << 8) | message[m++];
125
+ right = (message[m++] << 24) | (message[m++] << 16) | (message[m++] << 8) | message[m++];
126
+ //first each 64 but chunk of the message must be permuted according to IP
127
+ temp = ((left >>> 4) ^ right) & 0x0f0f0f0f;
128
+ right ^= temp;
129
+ left ^= (temp << 4);
130
+ temp = ((left >>> 16) ^ right) & 0x0000ffff;
131
+ right ^= temp;
132
+ left ^= (temp << 16);
133
+ temp = ((right >>> 2) ^ left) & 0x33333333;
134
+ left ^= temp;
135
+ right ^= (temp << 2);
136
+ temp = ((right >>> 8) ^ left) & 0x00ff00ff;
137
+ left ^= temp;
138
+ right ^= (temp << 8);
139
+ temp = ((left >>> 1) ^ right) & 0x55555555;
140
+ right ^= temp;
141
+ left ^= (temp << 1);
142
+ left = ((left << 1) | (left >>> 31));
143
+ right = ((right << 1) | (right >>> 31));
144
+ //do this either 1 or 3 times for each chunk of the message
145
+ for (j = 0; j < iterations; j += 3) {
146
+ endloop = looping[j + 1];
147
+ loopinc = looping[j + 2];
148
+ //now go through and perform the encryption or decryption
149
+ for (i = looping[j]; i !== endloop; i += loopinc) { //for efficiency
150
+ right1 = right ^ keys[i];
151
+ right2 = ((right >>> 4) | (right << 28)) ^ keys[i + 1];
152
+ //the result is attained by passing these bytes through the S selection functions
153
+ temp = left;
154
+ left = right;
155
+ right = temp ^ (spfunction2[(right1 >>> 24) & 0x3f] | spfunction4[(right1 >>> 16) & 0x3f] | spfunction6[(right1 >>>
156
+ 8) & 0x3f] | spfunction8[right1 & 0x3f] | spfunction1[(right2 >>> 24) & 0x3f] | spfunction3[(right2 >>> 16) &
157
+ 0x3f] | spfunction5[(right2 >>> 8) & 0x3f] | spfunction7[right2 & 0x3f]);
158
+ }
159
+ temp = left;
160
+ left = right;
161
+ right = temp; //unreverse left and right
162
+ } //for either 1 or 3 iterations
163
+ //move then each one bit to the right
164
+ left = ((left >>> 1) | (left << 31));
165
+ right = ((right >>> 1) | (right << 31));
166
+ //now perform IP-1, which is IP in the opposite direction
167
+ temp = ((left >>> 1) ^ right) & 0x55555555;
168
+ right ^= temp;
169
+ left ^= (temp << 1);
170
+ temp = ((right >>> 8) ^ left) & 0x00ff00ff;
171
+ left ^= temp;
172
+ right ^= (temp << 8);
173
+ temp = ((right >>> 2) ^ left) & 0x33333333;
174
+ left ^= temp;
175
+ right ^= (temp << 2);
176
+ temp = ((left >>> 16) ^ right) & 0x0000ffff;
177
+ right ^= temp;
178
+ left ^= (temp << 16);
179
+ temp = ((left >>> 4) ^ right) & 0x0f0f0f0f;
180
+ right ^= temp;
181
+ left ^= (temp << 4);
182
+ result[k++] = (left >>> 24);
183
+ result[k++] = ((left >>> 16) & 0xff);
184
+ result[k++] = ((left >>> 8) & 0xff);
185
+ result[k++] = (left & 0xff);
186
+ result[k++] = (right >>> 24);
187
+ result[k++] = ((right >>> 16) & 0xff);
188
+ result[k++] = ((right >>> 8) & 0xff);
189
+ result[k++] = (right & 0xff);
190
+ } //for every 8 characters, or 64 bits in the message
191
+ //only remove padding if decrypting - note that you need to use the same padding option for both encrypt and decrypt
192
+ if (!encrypt) {
193
+ result = desRemovePadding(result);
194
+ }
195
+ return result;
210
196
  } //end of des
211
-
212
-
213
197
  //desCreateKeys
214
198
  //this takes as input a 64 bit key (even though only 56 bits are used)
215
199
  //as an array of 2 integers, and returns 16 48 bit keys
216
-
217
200
  function desCreateKeys(key) {
218
- //declaring this locally speeds things up a bit
219
- const pc2bytes0 = [
220
- 0, 0x4, 0x20000000, 0x20000004, 0x10000, 0x10004, 0x20010000, 0x20010004, 0x200, 0x204,
221
- 0x20000200, 0x20000204, 0x10200, 0x10204, 0x20010200, 0x20010204
222
- ];
223
- const pc2bytes1 = [
224
- 0, 0x1, 0x100000, 0x100001, 0x4000000, 0x4000001, 0x4100000, 0x4100001, 0x100, 0x101, 0x100100,
225
- 0x100101, 0x4000100, 0x4000101, 0x4100100, 0x4100101
226
- ];
227
- const pc2bytes2 = [
228
- 0, 0x8, 0x800, 0x808, 0x1000000, 0x1000008, 0x1000800, 0x1000808, 0, 0x8, 0x800, 0x808,
229
- 0x1000000, 0x1000008, 0x1000800, 0x1000808
230
- ];
231
- const pc2bytes3 = [
232
- 0, 0x200000, 0x8000000, 0x8200000, 0x2000, 0x202000, 0x8002000, 0x8202000, 0x20000, 0x220000,
233
- 0x8020000, 0x8220000, 0x22000, 0x222000, 0x8022000, 0x8222000
234
- ];
235
- const pc2bytes4 = [
236
- 0, 0x40000, 0x10, 0x40010, 0, 0x40000, 0x10, 0x40010, 0x1000, 0x41000, 0x1010, 0x41010, 0x1000,
237
- 0x41000, 0x1010, 0x41010
238
- ];
239
- const pc2bytes5 = [
240
- 0, 0x400, 0x20, 0x420, 0, 0x400, 0x20, 0x420, 0x2000000, 0x2000400, 0x2000020, 0x2000420,
241
- 0x2000000, 0x2000400, 0x2000020, 0x2000420
242
- ];
243
- const pc2bytes6 = [
244
- 0, 0x10000000, 0x80000, 0x10080000, 0x2, 0x10000002, 0x80002, 0x10080002, 0, 0x10000000,
245
- 0x80000, 0x10080000, 0x2, 0x10000002, 0x80002, 0x10080002
246
- ];
247
- const pc2bytes7 = [
248
- 0, 0x10000, 0x800, 0x10800, 0x20000000, 0x20010000, 0x20000800, 0x20010800, 0x20000, 0x30000,
249
- 0x20800, 0x30800, 0x20020000, 0x20030000, 0x20020800, 0x20030800
250
- ];
251
- const pc2bytes8 = [
252
- 0, 0x40000, 0, 0x40000, 0x2, 0x40002, 0x2, 0x40002, 0x2000000, 0x2040000, 0x2000000, 0x2040000,
253
- 0x2000002, 0x2040002, 0x2000002, 0x2040002
254
- ];
255
- const pc2bytes9 = [
256
- 0, 0x10000000, 0x8, 0x10000008, 0, 0x10000000, 0x8, 0x10000008, 0x400, 0x10000400, 0x408,
257
- 0x10000408, 0x400, 0x10000400, 0x408, 0x10000408
258
- ];
259
- const pc2bytes10 = [
260
- 0, 0x20, 0, 0x20, 0x100000, 0x100020, 0x100000, 0x100020, 0x2000, 0x2020, 0x2000, 0x2020,
261
- 0x102000, 0x102020, 0x102000, 0x102020
262
- ];
263
- const pc2bytes11 = [
264
- 0, 0x1000000, 0x200, 0x1000200, 0x200000, 0x1200000, 0x200200, 0x1200200, 0x4000000, 0x5000000,
265
- 0x4000200, 0x5000200, 0x4200000, 0x5200000, 0x4200200, 0x5200200
266
- ];
267
- const pc2bytes12 = [
268
- 0, 0x1000, 0x8000000, 0x8001000, 0x80000, 0x81000, 0x8080000, 0x8081000, 0x10, 0x1010,
269
- 0x8000010, 0x8001010, 0x80010, 0x81010, 0x8080010, 0x8081010
270
- ];
271
- const pc2bytes13 = [0, 0x4, 0x100, 0x104, 0, 0x4, 0x100, 0x104, 0x1, 0x5, 0x101, 0x105, 0x1, 0x5, 0x101, 0x105];
272
-
273
- //how many iterations (1 for des, 3 for triple des)
274
- const iterations = key.length > 8 ? 3 : 1; //changed by Paul 16/6/2007 to use Triple DES for 9+ byte keys
275
- //stores the return keys
276
- const keys = new Array(32 * iterations);
277
- //now define the left shifts which need to be done
278
- const shifts = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0];
279
- //other variables
280
- let lefttemp;
281
- let righttemp;
282
- let m = 0;
283
- let n = 0;
284
- let temp;
285
-
286
- for (let j = 0; j < iterations; j++) { //either 1 or 3 iterations
287
- let left = (key[m++] << 24) | (key[m++] << 16) | (key[m++] << 8) | key[m++];
288
- let right = (key[m++] << 24) | (key[m++] << 16) | (key[m++] << 8) | key[m++];
289
-
290
- temp = ((left >>> 4) ^ right) & 0x0f0f0f0f;
291
- right ^= temp;
292
- left ^= (temp << 4);
293
- temp = ((right >>> -16) ^ left) & 0x0000ffff;
294
- left ^= temp;
295
- right ^= (temp << -16);
296
- temp = ((left >>> 2) ^ right) & 0x33333333;
297
- right ^= temp;
298
- left ^= (temp << 2);
299
- temp = ((right >>> -16) ^ left) & 0x0000ffff;
300
- left ^= temp;
301
- right ^= (temp << -16);
302
- temp = ((left >>> 1) ^ right) & 0x55555555;
303
- right ^= temp;
304
- left ^= (temp << 1);
305
- temp = ((right >>> 8) ^ left) & 0x00ff00ff;
306
- left ^= temp;
307
- right ^= (temp << 8);
308
- temp = ((left >>> 1) ^ right) & 0x55555555;
309
- right ^= temp;
310
- left ^= (temp << 1);
311
-
312
- //the right side needs to be shifted and to get the last four bits of the left side
313
- temp = (left << 8) | ((right >>> 20) & 0x000000f0);
314
- //left needs to be put upside down
315
- left = (right << 24) | ((right << 8) & 0xff0000) | ((right >>> 8) & 0xff00) | ((right >>> 24) & 0xf0);
316
- right = temp;
317
-
318
- //now go through and perform these shifts on the left and right keys
319
- for (let i = 0; i < shifts.length; i++) {
320
- //shift the keys either one or two bits to the left
321
- if (shifts[i]) {
322
- left = (left << 2) | (left >>> 26);
323
- right = (right << 2) | (right >>> 26);
324
- } else {
325
- left = (left << 1) | (left >>> 27);
326
- right = (right << 1) | (right >>> 27);
327
- }
328
- left &= -15;
329
- right &= -15;
330
-
331
- //now apply PC-2, in such a way that E is easier when encrypting or decrypting
332
- //this conversion will look like PC-2 except only the last 6 bits of each byte are used
333
- //rather than 48 consecutive bits and the order of lines will be according to
334
- //how the S selection functions will be applied: S2, S4, S6, S8, S1, S3, S5, S7
335
- lefttemp = pc2bytes0[left >>> 28] | pc2bytes1[(left >>> 24) & 0xf] | pc2bytes2[(left >>> 20) & 0xf] | pc2bytes3[(
336
- left >>> 16) & 0xf] | pc2bytes4[(left >>> 12) & 0xf] | pc2bytes5[(left >>> 8) & 0xf] | pc2bytes6[(left >>> 4) &
337
- 0xf];
338
- righttemp = pc2bytes7[right >>> 28] | pc2bytes8[(right >>> 24) & 0xf] | pc2bytes9[(right >>> 20) & 0xf] |
339
- pc2bytes10[(right >>> 16) & 0xf] | pc2bytes11[(right >>> 12) & 0xf] | pc2bytes12[(right >>> 8) & 0xf] |
340
- pc2bytes13[(right >>> 4) & 0xf];
341
- temp = ((righttemp >>> 16) ^ lefttemp) & 0x0000ffff;
342
- keys[n++] = lefttemp ^ temp;
343
- keys[n++] = righttemp ^ (temp << 16);
344
- }
345
- } //for each iterations
346
- //return the keys we've created
347
- return keys;
201
+ //declaring this locally speeds things up a bit
202
+ const pc2bytes0 = [
203
+ 0, 0x4, 0x20000000, 0x20000004, 0x10000, 0x10004, 0x20010000, 0x20010004, 0x200, 0x204,
204
+ 0x20000200, 0x20000204, 0x10200, 0x10204, 0x20010200, 0x20010204
205
+ ];
206
+ const pc2bytes1 = [
207
+ 0, 0x1, 0x100000, 0x100001, 0x4000000, 0x4000001, 0x4100000, 0x4100001, 0x100, 0x101, 0x100100,
208
+ 0x100101, 0x4000100, 0x4000101, 0x4100100, 0x4100101
209
+ ];
210
+ const pc2bytes2 = [
211
+ 0, 0x8, 0x800, 0x808, 0x1000000, 0x1000008, 0x1000800, 0x1000808, 0, 0x8, 0x800, 0x808,
212
+ 0x1000000, 0x1000008, 0x1000800, 0x1000808
213
+ ];
214
+ const pc2bytes3 = [
215
+ 0, 0x200000, 0x8000000, 0x8200000, 0x2000, 0x202000, 0x8002000, 0x8202000, 0x20000, 0x220000,
216
+ 0x8020000, 0x8220000, 0x22000, 0x222000, 0x8022000, 0x8222000
217
+ ];
218
+ const pc2bytes4 = [
219
+ 0, 0x40000, 0x10, 0x40010, 0, 0x40000, 0x10, 0x40010, 0x1000, 0x41000, 0x1010, 0x41010, 0x1000,
220
+ 0x41000, 0x1010, 0x41010
221
+ ];
222
+ const pc2bytes5 = [
223
+ 0, 0x400, 0x20, 0x420, 0, 0x400, 0x20, 0x420, 0x2000000, 0x2000400, 0x2000020, 0x2000420,
224
+ 0x2000000, 0x2000400, 0x2000020, 0x2000420
225
+ ];
226
+ const pc2bytes6 = [
227
+ 0, 0x10000000, 0x80000, 0x10080000, 0x2, 0x10000002, 0x80002, 0x10080002, 0, 0x10000000,
228
+ 0x80000, 0x10080000, 0x2, 0x10000002, 0x80002, 0x10080002
229
+ ];
230
+ const pc2bytes7 = [
231
+ 0, 0x10000, 0x800, 0x10800, 0x20000000, 0x20010000, 0x20000800, 0x20010800, 0x20000, 0x30000,
232
+ 0x20800, 0x30800, 0x20020000, 0x20030000, 0x20020800, 0x20030800
233
+ ];
234
+ const pc2bytes8 = [
235
+ 0, 0x40000, 0, 0x40000, 0x2, 0x40002, 0x2, 0x40002, 0x2000000, 0x2040000, 0x2000000, 0x2040000,
236
+ 0x2000002, 0x2040002, 0x2000002, 0x2040002
237
+ ];
238
+ const pc2bytes9 = [
239
+ 0, 0x10000000, 0x8, 0x10000008, 0, 0x10000000, 0x8, 0x10000008, 0x400, 0x10000400, 0x408,
240
+ 0x10000408, 0x400, 0x10000400, 0x408, 0x10000408
241
+ ];
242
+ const pc2bytes10 = [
243
+ 0, 0x20, 0, 0x20, 0x100000, 0x100020, 0x100000, 0x100020, 0x2000, 0x2020, 0x2000, 0x2020,
244
+ 0x102000, 0x102020, 0x102000, 0x102020
245
+ ];
246
+ const pc2bytes11 = [
247
+ 0, 0x1000000, 0x200, 0x1000200, 0x200000, 0x1200000, 0x200200, 0x1200200, 0x4000000, 0x5000000,
248
+ 0x4000200, 0x5000200, 0x4200000, 0x5200000, 0x4200200, 0x5200200
249
+ ];
250
+ const pc2bytes12 = [
251
+ 0, 0x1000, 0x8000000, 0x8001000, 0x80000, 0x81000, 0x8080000, 0x8081000, 0x10, 0x1010,
252
+ 0x8000010, 0x8001010, 0x80010, 0x81010, 0x8080010, 0x8081010
253
+ ];
254
+ const pc2bytes13 = [0, 0x4, 0x100, 0x104, 0, 0x4, 0x100, 0x104, 0x1, 0x5, 0x101, 0x105, 0x1, 0x5, 0x101, 0x105];
255
+ //how many iterations (1 for des, 3 for triple des)
256
+ const iterations = key.length > 8 ? 3 : 1; //changed by Paul 16/6/2007 to use Triple DES for 9+ byte keys
257
+ //stores the return keys
258
+ const keys = new Array(32 * iterations);
259
+ //now define the left shifts which need to be done
260
+ const shifts = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0];
261
+ //other variables
262
+ let lefttemp;
263
+ let righttemp;
264
+ let m = 0;
265
+ let n = 0;
266
+ let temp;
267
+ for (let j = 0; j < iterations; j++) { //either 1 or 3 iterations
268
+ let left = (key[m++] << 24) | (key[m++] << 16) | (key[m++] << 8) | key[m++];
269
+ let right = (key[m++] << 24) | (key[m++] << 16) | (key[m++] << 8) | key[m++];
270
+ temp = ((left >>> 4) ^ right) & 0x0f0f0f0f;
271
+ right ^= temp;
272
+ left ^= (temp << 4);
273
+ temp = ((right >>> -16) ^ left) & 0x0000ffff;
274
+ left ^= temp;
275
+ right ^= (temp << -16);
276
+ temp = ((left >>> 2) ^ right) & 0x33333333;
277
+ right ^= temp;
278
+ left ^= (temp << 2);
279
+ temp = ((right >>> -16) ^ left) & 0x0000ffff;
280
+ left ^= temp;
281
+ right ^= (temp << -16);
282
+ temp = ((left >>> 1) ^ right) & 0x55555555;
283
+ right ^= temp;
284
+ left ^= (temp << 1);
285
+ temp = ((right >>> 8) ^ left) & 0x00ff00ff;
286
+ left ^= temp;
287
+ right ^= (temp << 8);
288
+ temp = ((left >>> 1) ^ right) & 0x55555555;
289
+ right ^= temp;
290
+ left ^= (temp << 1);
291
+ //the right side needs to be shifted and to get the last four bits of the left side
292
+ temp = (left << 8) | ((right >>> 20) & 0x000000f0);
293
+ //left needs to be put upside down
294
+ left = (right << 24) | ((right << 8) & 0xff0000) | ((right >>> 8) & 0xff00) | ((right >>> 24) & 0xf0);
295
+ right = temp;
296
+ //now go through and perform these shifts on the left and right keys
297
+ for (let i = 0; i < shifts.length; i++) {
298
+ //shift the keys either one or two bits to the left
299
+ if (shifts[i]) {
300
+ left = (left << 2) | (left >>> 26);
301
+ right = (right << 2) | (right >>> 26);
302
+ }
303
+ else {
304
+ left = (left << 1) | (left >>> 27);
305
+ right = (right << 1) | (right >>> 27);
306
+ }
307
+ left &= -15;
308
+ right &= -15;
309
+ //now apply PC-2, in such a way that E is easier when encrypting or decrypting
310
+ //this conversion will look like PC-2 except only the last 6 bits of each byte are used
311
+ //rather than 48 consecutive bits and the order of lines will be according to
312
+ //how the S selection functions will be applied: S2, S4, S6, S8, S1, S3, S5, S7
313
+ lefttemp = pc2bytes0[left >>> 28] | pc2bytes1[(left >>> 24) & 0xf] | pc2bytes2[(left >>> 20) & 0xf] | pc2bytes3[(left >>> 16) & 0xf] | pc2bytes4[(left >>> 12) & 0xf] | pc2bytes5[(left >>> 8) & 0xf] | pc2bytes6[(left >>> 4) &
314
+ 0xf];
315
+ righttemp = pc2bytes7[right >>> 28] | pc2bytes8[(right >>> 24) & 0xf] | pc2bytes9[(right >>> 20) & 0xf] |
316
+ pc2bytes10[(right >>> 16) & 0xf] | pc2bytes11[(right >>> 12) & 0xf] | pc2bytes12[(right >>> 8) & 0xf] |
317
+ pc2bytes13[(right >>> 4) & 0xf];
318
+ temp = ((righttemp >>> 16) ^ lefttemp) & 0x0000ffff;
319
+ keys[n++] = lefttemp ^ temp;
320
+ keys[n++] = righttemp ^ (temp << 16);
321
+ }
322
+ } //for each iterations
323
+ //return the keys we've created
324
+ return keys;
348
325
  } //end of desCreateKeys
349
-
350
-
351
326
  function desAddPadding(message, padding) {
352
- const padLength = 8 - (message.length % 8);
353
-
354
- let pad;
355
- if ((padLength < 8)) { //pad the message out with null bytes
356
- pad = 0;
357
- } else if (padLength === 8) {
358
- return message;
359
- } else {
360
- throw new Error('des: invalid padding');
361
- }
362
-
363
- const paddedMessage = new Uint8Array(message.length + padLength);
364
- for (let i = 0; i < message.length; i++) {
365
- paddedMessage[i] = message[i];
366
- }
367
- for (let j = 0; j < padLength; j++) {
368
- paddedMessage[message.length + j] = pad;
369
- }
370
-
371
- return paddedMessage;
327
+ const padLength = 8 - (message.length % 8);
328
+ let pad;
329
+ if ((padLength < 8)) { //pad the message out with null bytes
330
+ pad = 0;
331
+ }
332
+ else if (padLength === 8) {
333
+ return message;
334
+ }
335
+ else {
336
+ throw new Error('des: invalid padding');
337
+ }
338
+ const paddedMessage = new Uint8Array(message.length + padLength);
339
+ for (let i = 0; i < message.length; i++) {
340
+ paddedMessage[i] = message[i];
341
+ }
342
+ for (let j = 0; j < padLength; j++) {
343
+ paddedMessage[message.length + j] = pad;
344
+ }
345
+ return paddedMessage;
372
346
  }
373
-
374
347
  function desRemovePadding(message, padding) {
375
- let padLength = null;
376
- let pad;
377
- { // null padding
378
- pad = 0;
379
- }
380
-
381
- if (!padLength) {
382
- padLength = 1;
383
- while (message[message.length - padLength] === pad) {
384
- padLength++;
348
+ let padLength = null;
349
+ let pad;
350
+ { // null padding
351
+ pad = 0;
385
352
  }
386
- padLength--;
387
- }
388
-
389
- return message.subarray(0, message.length - padLength);
353
+ if (!padLength) {
354
+ padLength = 1;
355
+ while (message[message.length - padLength] === pad) {
356
+ padLength++;
357
+ }
358
+ padLength--;
359
+ }
360
+ return message.subarray(0, message.length - padLength);
390
361
  }
391
-
392
362
  // added by Recurity Labs
393
-
394
363
  function TripleDES(key) {
395
- this.key = [];
396
-
397
- for (let i = 0; i < 3; i++) {
398
- this.key.push(new Uint8Array(key.subarray(i * 8, (i * 8) + 8)));
399
- }
400
-
401
- this.encrypt = function(block) {
402
- return des(
403
- desCreateKeys(this.key[2]),
404
- des(
405
- desCreateKeys(this.key[1]),
406
- des(
407
- desCreateKeys(this.key[0]),
408
- block, true, 0, null, null
409
- ),
410
- false, 0, null, null
411
- ), true);
412
- };
364
+ this.key = [];
365
+ for (let i = 0; i < 3; i++) {
366
+ this.key.push(new Uint8Array(key.subarray(i * 8, (i * 8) + 8)));
367
+ }
368
+ this.encrypt = function (block) {
369
+ return des(desCreateKeys(this.key[2]), des(desCreateKeys(this.key[1]), des(desCreateKeys(this.key[0]), block, true, 0, null, null), false, 0, null, null), true);
370
+ };
413
371
  }
414
-
415
372
  TripleDES.keySize = TripleDES.prototype.keySize = 24;
416
373
  TripleDES.blockSize = TripleDES.prototype.blockSize = 8;
417
374
 
375
+ /** @access private */
418
376
  // Use of this source code is governed by a BSD-style
419
377
  // license that can be found in the LICENSE file.
420
-
421
378
  // Copyright 2010 pjacobs@xeekr.com . All rights reserved.
422
-
423
379
  // Modified by Recurity Labs GmbH
424
-
425
380
  // fixed/modified by Herbert Hanewinkel, www.haneWIN.de
426
381
  // check www.haneWIN.de for the latest version
427
-
428
382
  // cast5.js is a Javascript implementation of CAST-128, as defined in RFC 2144.
429
383
  // CAST-128 is a common OpenPGP cipher.
430
-
431
-
432
384
  // CAST5 constructor
433
-
434
385
  function OpenPGPSymEncCAST5() {
435
- this.BlockSize = 8;
436
- this.KeySize = 16;
437
-
438
- this.setKey = function(key) {
439
- this.masking = new Array(16);
440
- this.rotate = new Array(16);
441
-
442
- this.reset();
443
-
444
- if (key.length === this.KeySize) {
445
- this.keySchedule(key);
446
- } else {
447
- throw new Error('CAST-128: keys must be 16 bytes');
448
- }
449
- return true;
450
- };
451
-
452
- this.reset = function() {
453
- for (let i = 0; i < 16; i++) {
454
- this.masking[i] = 0;
455
- this.rotate[i] = 0;
456
- }
457
- };
458
-
459
- this.getBlockSize = function() {
460
- return this.BlockSize;
461
- };
462
-
463
- this.encrypt = function(src) {
464
- const dst = new Array(src.length);
465
-
466
- for (let i = 0; i < src.length; i += 8) {
467
- let l = (src[i] << 24) | (src[i + 1] << 16) | (src[i + 2] << 8) | src[i + 3];
468
- let r = (src[i + 4] << 24) | (src[i + 5] << 16) | (src[i + 6] << 8) | src[i + 7];
469
- let t;
470
-
471
- t = r;
472
- r = l ^ f1(r, this.masking[0], this.rotate[0]);
473
- l = t;
474
- t = r;
475
- r = l ^ f2(r, this.masking[1], this.rotate[1]);
476
- l = t;
477
- t = r;
478
- r = l ^ f3(r, this.masking[2], this.rotate[2]);
479
- l = t;
480
- t = r;
481
- r = l ^ f1(r, this.masking[3], this.rotate[3]);
482
- l = t;
483
-
484
- t = r;
485
- r = l ^ f2(r, this.masking[4], this.rotate[4]);
486
- l = t;
487
- t = r;
488
- r = l ^ f3(r, this.masking[5], this.rotate[5]);
489
- l = t;
490
- t = r;
491
- r = l ^ f1(r, this.masking[6], this.rotate[6]);
492
- l = t;
493
- t = r;
494
- r = l ^ f2(r, this.masking[7], this.rotate[7]);
495
- l = t;
496
-
497
- t = r;
498
- r = l ^ f3(r, this.masking[8], this.rotate[8]);
499
- l = t;
500
- t = r;
501
- r = l ^ f1(r, this.masking[9], this.rotate[9]);
502
- l = t;
503
- t = r;
504
- r = l ^ f2(r, this.masking[10], this.rotate[10]);
505
- l = t;
506
- t = r;
507
- r = l ^ f3(r, this.masking[11], this.rotate[11]);
508
- l = t;
509
-
510
- t = r;
511
- r = l ^ f1(r, this.masking[12], this.rotate[12]);
512
- l = t;
513
- t = r;
514
- r = l ^ f2(r, this.masking[13], this.rotate[13]);
515
- l = t;
516
- t = r;
517
- r = l ^ f3(r, this.masking[14], this.rotate[14]);
518
- l = t;
519
- t = r;
520
- r = l ^ f1(r, this.masking[15], this.rotate[15]);
521
- l = t;
522
-
523
- dst[i] = (r >>> 24) & 255;
524
- dst[i + 1] = (r >>> 16) & 255;
525
- dst[i + 2] = (r >>> 8) & 255;
526
- dst[i + 3] = r & 255;
527
- dst[i + 4] = (l >>> 24) & 255;
528
- dst[i + 5] = (l >>> 16) & 255;
529
- dst[i + 6] = (l >>> 8) & 255;
530
- dst[i + 7] = l & 255;
531
- }
532
-
533
- return dst;
534
- };
535
-
536
- this.decrypt = function(src) {
537
- const dst = new Array(src.length);
538
-
539
- for (let i = 0; i < src.length; i += 8) {
540
- let l = (src[i] << 24) | (src[i + 1] << 16) | (src[i + 2] << 8) | src[i + 3];
541
- let r = (src[i + 4] << 24) | (src[i + 5] << 16) | (src[i + 6] << 8) | src[i + 7];
542
- let t;
543
-
544
- t = r;
545
- r = l ^ f1(r, this.masking[15], this.rotate[15]);
546
- l = t;
547
- t = r;
548
- r = l ^ f3(r, this.masking[14], this.rotate[14]);
549
- l = t;
550
- t = r;
551
- r = l ^ f2(r, this.masking[13], this.rotate[13]);
552
- l = t;
553
- t = r;
554
- r = l ^ f1(r, this.masking[12], this.rotate[12]);
555
- l = t;
556
-
557
- t = r;
558
- r = l ^ f3(r, this.masking[11], this.rotate[11]);
559
- l = t;
560
- t = r;
561
- r = l ^ f2(r, this.masking[10], this.rotate[10]);
562
- l = t;
563
- t = r;
564
- r = l ^ f1(r, this.masking[9], this.rotate[9]);
565
- l = t;
566
- t = r;
567
- r = l ^ f3(r, this.masking[8], this.rotate[8]);
568
- l = t;
569
-
570
- t = r;
571
- r = l ^ f2(r, this.masking[7], this.rotate[7]);
572
- l = t;
573
- t = r;
574
- r = l ^ f1(r, this.masking[6], this.rotate[6]);
575
- l = t;
576
- t = r;
577
- r = l ^ f3(r, this.masking[5], this.rotate[5]);
578
- l = t;
579
- t = r;
580
- r = l ^ f2(r, this.masking[4], this.rotate[4]);
581
- l = t;
582
-
583
- t = r;
584
- r = l ^ f1(r, this.masking[3], this.rotate[3]);
585
- l = t;
586
- t = r;
587
- r = l ^ f3(r, this.masking[2], this.rotate[2]);
588
- l = t;
589
- t = r;
590
- r = l ^ f2(r, this.masking[1], this.rotate[1]);
591
- l = t;
592
- t = r;
593
- r = l ^ f1(r, this.masking[0], this.rotate[0]);
594
- l = t;
595
-
596
- dst[i] = (r >>> 24) & 255;
597
- dst[i + 1] = (r >>> 16) & 255;
598
- dst[i + 2] = (r >>> 8) & 255;
599
- dst[i + 3] = r & 255;
600
- dst[i + 4] = (l >>> 24) & 255;
601
- dst[i + 5] = (l >> 16) & 255;
602
- dst[i + 6] = (l >> 8) & 255;
603
- dst[i + 7] = l & 255;
604
- }
605
-
606
- return dst;
607
- };
608
- const scheduleA = new Array(4);
609
-
610
- scheduleA[0] = new Array(4);
611
- scheduleA[0][0] = [4, 0, 0xd, 0xf, 0xc, 0xe, 0x8];
612
- scheduleA[0][1] = [5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa];
613
- scheduleA[0][2] = [6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9];
614
- scheduleA[0][3] = [7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb];
615
-
616
- scheduleA[1] = new Array(4);
617
- scheduleA[1][0] = [0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0];
618
- scheduleA[1][1] = [1, 4, 0, 2, 1, 3, 16 + 2];
619
- scheduleA[1][2] = [2, 5, 7, 6, 5, 4, 16 + 1];
620
- scheduleA[1][3] = [3, 7, 0xa, 9, 0xb, 8, 16 + 3];
621
-
622
- scheduleA[2] = new Array(4);
623
- scheduleA[2][0] = [4, 0, 0xd, 0xf, 0xc, 0xe, 8];
624
- scheduleA[2][1] = [5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa];
625
- scheduleA[2][2] = [6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9];
626
- scheduleA[2][3] = [7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb];
627
-
628
-
629
- scheduleA[3] = new Array(4);
630
- scheduleA[3][0] = [0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0];
631
- scheduleA[3][1] = [1, 4, 0, 2, 1, 3, 16 + 2];
632
- scheduleA[3][2] = [2, 5, 7, 6, 5, 4, 16 + 1];
633
- scheduleA[3][3] = [3, 7, 0xa, 9, 0xb, 8, 16 + 3];
634
-
635
- const scheduleB = new Array(4);
636
-
637
- scheduleB[0] = new Array(4);
638
- scheduleB[0][0] = [16 + 8, 16 + 9, 16 + 7, 16 + 6, 16 + 2];
639
- scheduleB[0][1] = [16 + 0xa, 16 + 0xb, 16 + 5, 16 + 4, 16 + 6];
640
- scheduleB[0][2] = [16 + 0xc, 16 + 0xd, 16 + 3, 16 + 2, 16 + 9];
641
- scheduleB[0][3] = [16 + 0xe, 16 + 0xf, 16 + 1, 16 + 0, 16 + 0xc];
642
-
643
- scheduleB[1] = new Array(4);
644
- scheduleB[1][0] = [3, 2, 0xc, 0xd, 8];
645
- scheduleB[1][1] = [1, 0, 0xe, 0xf, 0xd];
646
- scheduleB[1][2] = [7, 6, 8, 9, 3];
647
- scheduleB[1][3] = [5, 4, 0xa, 0xb, 7];
648
-
649
-
650
- scheduleB[2] = new Array(4);
651
- scheduleB[2][0] = [16 + 3, 16 + 2, 16 + 0xc, 16 + 0xd, 16 + 9];
652
- scheduleB[2][1] = [16 + 1, 16 + 0, 16 + 0xe, 16 + 0xf, 16 + 0xc];
653
- scheduleB[2][2] = [16 + 7, 16 + 6, 16 + 8, 16 + 9, 16 + 2];
654
- scheduleB[2][3] = [16 + 5, 16 + 4, 16 + 0xa, 16 + 0xb, 16 + 6];
655
-
656
-
657
- scheduleB[3] = new Array(4);
658
- scheduleB[3][0] = [8, 9, 7, 6, 3];
659
- scheduleB[3][1] = [0xa, 0xb, 5, 4, 7];
660
- scheduleB[3][2] = [0xc, 0xd, 3, 2, 8];
661
- scheduleB[3][3] = [0xe, 0xf, 1, 0, 0xd];
662
-
663
- // changed 'in' to 'inn' (in javascript 'in' is a reserved word)
664
- this.keySchedule = function(inn) {
665
- const t = new Array(8);
666
- const k = new Array(32);
667
-
668
- let j;
669
-
670
- for (let i = 0; i < 4; i++) {
671
- j = i * 4;
672
- t[i] = (inn[j] << 24) | (inn[j + 1] << 16) | (inn[j + 2] << 8) | inn[j + 3];
673
- }
674
-
675
- const x = [6, 7, 4, 5];
676
- let ki = 0;
677
- let w;
678
-
679
- for (let half = 0; half < 2; half++) {
680
- for (let round = 0; round < 4; round++) {
681
- for (j = 0; j < 4; j++) {
682
- const a = scheduleA[round][j];
683
- w = t[a[1]];
684
-
685
- w ^= sBox[4][(t[a[2] >>> 2] >>> (24 - 8 * (a[2] & 3))) & 0xff];
686
- w ^= sBox[5][(t[a[3] >>> 2] >>> (24 - 8 * (a[3] & 3))) & 0xff];
687
- w ^= sBox[6][(t[a[4] >>> 2] >>> (24 - 8 * (a[4] & 3))) & 0xff];
688
- w ^= sBox[7][(t[a[5] >>> 2] >>> (24 - 8 * (a[5] & 3))) & 0xff];
689
- w ^= sBox[x[j]][(t[a[6] >>> 2] >>> (24 - 8 * (a[6] & 3))) & 0xff];
690
- t[a[0]] = w;
386
+ this.BlockSize = 8;
387
+ this.KeySize = 16;
388
+ this.setKey = function (key) {
389
+ this.masking = new Array(16);
390
+ this.rotate = new Array(16);
391
+ this.reset();
392
+ if (key.length === this.KeySize) {
393
+ this.keySchedule(key);
691
394
  }
692
-
693
- for (j = 0; j < 4; j++) {
694
- const b = scheduleB[round][j];
695
- w = sBox[4][(t[b[0] >>> 2] >>> (24 - 8 * (b[0] & 3))) & 0xff];
696
-
697
- w ^= sBox[5][(t[b[1] >>> 2] >>> (24 - 8 * (b[1] & 3))) & 0xff];
698
- w ^= sBox[6][(t[b[2] >>> 2] >>> (24 - 8 * (b[2] & 3))) & 0xff];
699
- w ^= sBox[7][(t[b[3] >>> 2] >>> (24 - 8 * (b[3] & 3))) & 0xff];
700
- w ^= sBox[4 + j][(t[b[4] >>> 2] >>> (24 - 8 * (b[4] & 3))) & 0xff];
701
- k[ki] = w;
702
- ki++;
395
+ else {
396
+ throw new Error('CAST-128: keys must be 16 bytes');
397
+ }
398
+ return true;
399
+ };
400
+ this.reset = function () {
401
+ for (let i = 0; i < 16; i++) {
402
+ this.masking[i] = 0;
403
+ this.rotate[i] = 0;
404
+ }
405
+ };
406
+ this.getBlockSize = function () {
407
+ return this.BlockSize;
408
+ };
409
+ this.encrypt = function (src) {
410
+ const dst = new Array(src.length);
411
+ for (let i = 0; i < src.length; i += 8) {
412
+ let l = (src[i] << 24) | (src[i + 1] << 16) | (src[i + 2] << 8) | src[i + 3];
413
+ let r = (src[i + 4] << 24) | (src[i + 5] << 16) | (src[i + 6] << 8) | src[i + 7];
414
+ let t;
415
+ t = r;
416
+ r = l ^ f1(r, this.masking[0], this.rotate[0]);
417
+ l = t;
418
+ t = r;
419
+ r = l ^ f2(r, this.masking[1], this.rotate[1]);
420
+ l = t;
421
+ t = r;
422
+ r = l ^ f3(r, this.masking[2], this.rotate[2]);
423
+ l = t;
424
+ t = r;
425
+ r = l ^ f1(r, this.masking[3], this.rotate[3]);
426
+ l = t;
427
+ t = r;
428
+ r = l ^ f2(r, this.masking[4], this.rotate[4]);
429
+ l = t;
430
+ t = r;
431
+ r = l ^ f3(r, this.masking[5], this.rotate[5]);
432
+ l = t;
433
+ t = r;
434
+ r = l ^ f1(r, this.masking[6], this.rotate[6]);
435
+ l = t;
436
+ t = r;
437
+ r = l ^ f2(r, this.masking[7], this.rotate[7]);
438
+ l = t;
439
+ t = r;
440
+ r = l ^ f3(r, this.masking[8], this.rotate[8]);
441
+ l = t;
442
+ t = r;
443
+ r = l ^ f1(r, this.masking[9], this.rotate[9]);
444
+ l = t;
445
+ t = r;
446
+ r = l ^ f2(r, this.masking[10], this.rotate[10]);
447
+ l = t;
448
+ t = r;
449
+ r = l ^ f3(r, this.masking[11], this.rotate[11]);
450
+ l = t;
451
+ t = r;
452
+ r = l ^ f1(r, this.masking[12], this.rotate[12]);
453
+ l = t;
454
+ t = r;
455
+ r = l ^ f2(r, this.masking[13], this.rotate[13]);
456
+ l = t;
457
+ t = r;
458
+ r = l ^ f3(r, this.masking[14], this.rotate[14]);
459
+ l = t;
460
+ t = r;
461
+ r = l ^ f1(r, this.masking[15], this.rotate[15]);
462
+ l = t;
463
+ dst[i] = (r >>> 24) & 255;
464
+ dst[i + 1] = (r >>> 16) & 255;
465
+ dst[i + 2] = (r >>> 8) & 255;
466
+ dst[i + 3] = r & 255;
467
+ dst[i + 4] = (l >>> 24) & 255;
468
+ dst[i + 5] = (l >>> 16) & 255;
469
+ dst[i + 6] = (l >>> 8) & 255;
470
+ dst[i + 7] = l & 255;
471
+ }
472
+ return dst;
473
+ };
474
+ this.decrypt = function (src) {
475
+ const dst = new Array(src.length);
476
+ for (let i = 0; i < src.length; i += 8) {
477
+ let l = (src[i] << 24) | (src[i + 1] << 16) | (src[i + 2] << 8) | src[i + 3];
478
+ let r = (src[i + 4] << 24) | (src[i + 5] << 16) | (src[i + 6] << 8) | src[i + 7];
479
+ let t;
480
+ t = r;
481
+ r = l ^ f1(r, this.masking[15], this.rotate[15]);
482
+ l = t;
483
+ t = r;
484
+ r = l ^ f3(r, this.masking[14], this.rotate[14]);
485
+ l = t;
486
+ t = r;
487
+ r = l ^ f2(r, this.masking[13], this.rotate[13]);
488
+ l = t;
489
+ t = r;
490
+ r = l ^ f1(r, this.masking[12], this.rotate[12]);
491
+ l = t;
492
+ t = r;
493
+ r = l ^ f3(r, this.masking[11], this.rotate[11]);
494
+ l = t;
495
+ t = r;
496
+ r = l ^ f2(r, this.masking[10], this.rotate[10]);
497
+ l = t;
498
+ t = r;
499
+ r = l ^ f1(r, this.masking[9], this.rotate[9]);
500
+ l = t;
501
+ t = r;
502
+ r = l ^ f3(r, this.masking[8], this.rotate[8]);
503
+ l = t;
504
+ t = r;
505
+ r = l ^ f2(r, this.masking[7], this.rotate[7]);
506
+ l = t;
507
+ t = r;
508
+ r = l ^ f1(r, this.masking[6], this.rotate[6]);
509
+ l = t;
510
+ t = r;
511
+ r = l ^ f3(r, this.masking[5], this.rotate[5]);
512
+ l = t;
513
+ t = r;
514
+ r = l ^ f2(r, this.masking[4], this.rotate[4]);
515
+ l = t;
516
+ t = r;
517
+ r = l ^ f1(r, this.masking[3], this.rotate[3]);
518
+ l = t;
519
+ t = r;
520
+ r = l ^ f3(r, this.masking[2], this.rotate[2]);
521
+ l = t;
522
+ t = r;
523
+ r = l ^ f2(r, this.masking[1], this.rotate[1]);
524
+ l = t;
525
+ t = r;
526
+ r = l ^ f1(r, this.masking[0], this.rotate[0]);
527
+ l = t;
528
+ dst[i] = (r >>> 24) & 255;
529
+ dst[i + 1] = (r >>> 16) & 255;
530
+ dst[i + 2] = (r >>> 8) & 255;
531
+ dst[i + 3] = r & 255;
532
+ dst[i + 4] = (l >>> 24) & 255;
533
+ dst[i + 5] = (l >> 16) & 255;
534
+ dst[i + 6] = (l >> 8) & 255;
535
+ dst[i + 7] = l & 255;
703
536
  }
704
- }
537
+ return dst;
538
+ };
539
+ const scheduleA = new Array(4);
540
+ scheduleA[0] = new Array(4);
541
+ scheduleA[0][0] = [4, 0, 0xd, 0xf, 0xc, 0xe, 0x8];
542
+ scheduleA[0][1] = [5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa];
543
+ scheduleA[0][2] = [6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9];
544
+ scheduleA[0][3] = [7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb];
545
+ scheduleA[1] = new Array(4);
546
+ scheduleA[1][0] = [0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0];
547
+ scheduleA[1][1] = [1, 4, 0, 2, 1, 3, 16 + 2];
548
+ scheduleA[1][2] = [2, 5, 7, 6, 5, 4, 16 + 1];
549
+ scheduleA[1][3] = [3, 7, 0xa, 9, 0xb, 8, 16 + 3];
550
+ scheduleA[2] = new Array(4);
551
+ scheduleA[2][0] = [4, 0, 0xd, 0xf, 0xc, 0xe, 8];
552
+ scheduleA[2][1] = [5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa];
553
+ scheduleA[2][2] = [6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9];
554
+ scheduleA[2][3] = [7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb];
555
+ scheduleA[3] = new Array(4);
556
+ scheduleA[3][0] = [0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0];
557
+ scheduleA[3][1] = [1, 4, 0, 2, 1, 3, 16 + 2];
558
+ scheduleA[3][2] = [2, 5, 7, 6, 5, 4, 16 + 1];
559
+ scheduleA[3][3] = [3, 7, 0xa, 9, 0xb, 8, 16 + 3];
560
+ const scheduleB = new Array(4);
561
+ scheduleB[0] = new Array(4);
562
+ scheduleB[0][0] = [16 + 8, 16 + 9, 16 + 7, 16 + 6, 16 + 2];
563
+ scheduleB[0][1] = [16 + 0xa, 16 + 0xb, 16 + 5, 16 + 4, 16 + 6];
564
+ scheduleB[0][2] = [16 + 0xc, 16 + 0xd, 16 + 3, 16 + 2, 16 + 9];
565
+ scheduleB[0][3] = [16 + 0xe, 16 + 0xf, 16 + 1, 16 + 0, 16 + 0xc];
566
+ scheduleB[1] = new Array(4);
567
+ scheduleB[1][0] = [3, 2, 0xc, 0xd, 8];
568
+ scheduleB[1][1] = [1, 0, 0xe, 0xf, 0xd];
569
+ scheduleB[1][2] = [7, 6, 8, 9, 3];
570
+ scheduleB[1][3] = [5, 4, 0xa, 0xb, 7];
571
+ scheduleB[2] = new Array(4);
572
+ scheduleB[2][0] = [16 + 3, 16 + 2, 16 + 0xc, 16 + 0xd, 16 + 9];
573
+ scheduleB[2][1] = [16 + 1, 16 + 0, 16 + 0xe, 16 + 0xf, 16 + 0xc];
574
+ scheduleB[2][2] = [16 + 7, 16 + 6, 16 + 8, 16 + 9, 16 + 2];
575
+ scheduleB[2][3] = [16 + 5, 16 + 4, 16 + 0xa, 16 + 0xb, 16 + 6];
576
+ scheduleB[3] = new Array(4);
577
+ scheduleB[3][0] = [8, 9, 7, 6, 3];
578
+ scheduleB[3][1] = [0xa, 0xb, 5, 4, 7];
579
+ scheduleB[3][2] = [0xc, 0xd, 3, 2, 8];
580
+ scheduleB[3][3] = [0xe, 0xf, 1, 0, 0xd];
581
+ // changed 'in' to 'inn' (in javascript 'in' is a reserved word)
582
+ this.keySchedule = function (inn) {
583
+ const t = new Array(8);
584
+ const k = new Array(32);
585
+ let j;
586
+ for (let i = 0; i < 4; i++) {
587
+ j = i * 4;
588
+ t[i] = (inn[j] << 24) | (inn[j + 1] << 16) | (inn[j + 2] << 8) | inn[j + 3];
589
+ }
590
+ const x = [6, 7, 4, 5];
591
+ let ki = 0;
592
+ let w;
593
+ for (let half = 0; half < 2; half++) {
594
+ for (let round = 0; round < 4; round++) {
595
+ for (j = 0; j < 4; j++) {
596
+ const a = scheduleA[round][j];
597
+ w = t[a[1]];
598
+ w ^= sBox[4][(t[a[2] >>> 2] >>> (24 - 8 * (a[2] & 3))) & 0xff];
599
+ w ^= sBox[5][(t[a[3] >>> 2] >>> (24 - 8 * (a[3] & 3))) & 0xff];
600
+ w ^= sBox[6][(t[a[4] >>> 2] >>> (24 - 8 * (a[4] & 3))) & 0xff];
601
+ w ^= sBox[7][(t[a[5] >>> 2] >>> (24 - 8 * (a[5] & 3))) & 0xff];
602
+ w ^= sBox[x[j]][(t[a[6] >>> 2] >>> (24 - 8 * (a[6] & 3))) & 0xff];
603
+ t[a[0]] = w;
604
+ }
605
+ for (j = 0; j < 4; j++) {
606
+ const b = scheduleB[round][j];
607
+ w = sBox[4][(t[b[0] >>> 2] >>> (24 - 8 * (b[0] & 3))) & 0xff];
608
+ w ^= sBox[5][(t[b[1] >>> 2] >>> (24 - 8 * (b[1] & 3))) & 0xff];
609
+ w ^= sBox[6][(t[b[2] >>> 2] >>> (24 - 8 * (b[2] & 3))) & 0xff];
610
+ w ^= sBox[7][(t[b[3] >>> 2] >>> (24 - 8 * (b[3] & 3))) & 0xff];
611
+ w ^= sBox[4 + j][(t[b[4] >>> 2] >>> (24 - 8 * (b[4] & 3))) & 0xff];
612
+ k[ki] = w;
613
+ ki++;
614
+ }
615
+ }
616
+ }
617
+ for (let i = 0; i < 16; i++) {
618
+ this.masking[i] = k[i];
619
+ this.rotate[i] = k[16 + i] & 0x1f;
620
+ }
621
+ };
622
+ // These are the three 'f' functions. See RFC 2144, section 2.2.
623
+ function f1(d, m, r) {
624
+ const t = m + d;
625
+ const I = (t << r) | (t >>> (32 - r));
626
+ return ((sBox[0][I >>> 24] ^ sBox[1][(I >>> 16) & 255]) - sBox[2][(I >>> 8) & 255]) + sBox[3][I & 255];
705
627
  }
706
-
707
- for (let i = 0; i < 16; i++) {
708
- this.masking[i] = k[i];
709
- this.rotate[i] = k[16 + i] & 0x1f;
628
+ function f2(d, m, r) {
629
+ const t = m ^ d;
630
+ const I = (t << r) | (t >>> (32 - r));
631
+ return ((sBox[0][I >>> 24] - sBox[1][(I >>> 16) & 255]) + sBox[2][(I >>> 8) & 255]) ^ sBox[3][I & 255];
710
632
  }
711
- };
712
-
713
- // These are the three 'f' functions. See RFC 2144, section 2.2.
714
-
715
- function f1(d, m, r) {
716
- const t = m + d;
717
- const I = (t << r) | (t >>> (32 - r));
718
- return ((sBox[0][I >>> 24] ^ sBox[1][(I >>> 16) & 255]) - sBox[2][(I >>> 8) & 255]) + sBox[3][I & 255];
719
- }
720
-
721
- function f2(d, m, r) {
722
- const t = m ^ d;
723
- const I = (t << r) | (t >>> (32 - r));
724
- return ((sBox[0][I >>> 24] - sBox[1][(I >>> 16) & 255]) + sBox[2][(I >>> 8) & 255]) ^ sBox[3][I & 255];
725
- }
726
-
727
- function f3(d, m, r) {
728
- const t = m - d;
729
- const I = (t << r) | (t >>> (32 - r));
730
- return ((sBox[0][I >>> 24] + sBox[1][(I >>> 16) & 255]) ^ sBox[2][(I >>> 8) & 255]) - sBox[3][I & 255];
731
- }
732
-
733
- const sBox = new Array(8);
734
- sBox[0] = [
735
- 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949,
736
- 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e,
737
- 0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d,
738
- 0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0,
739
- 0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7,
740
- 0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935,
741
- 0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d,
742
- 0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50,
743
- 0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe,
744
- 0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3,
745
- 0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167,
746
- 0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291,
747
- 0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779,
748
- 0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2,
749
- 0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511,
750
- 0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d,
751
- 0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5,
752
- 0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324,
753
- 0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c,
754
- 0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc,
755
- 0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d,
756
- 0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96,
757
- 0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a,
758
- 0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d,
759
- 0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd,
760
- 0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6,
761
- 0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9,
762
- 0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872,
763
- 0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c,
764
- 0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e,
765
- 0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9,
766
- 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf
767
- ];
768
-
769
- sBox[1] = [
770
- 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651,
771
- 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3,
772
- 0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb,
773
- 0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806,
774
- 0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b,
775
- 0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359,
776
- 0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b,
777
- 0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c,
778
- 0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34,
779
- 0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb,
780
- 0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd,
781
- 0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860,
782
- 0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b,
783
- 0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304,
784
- 0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b,
785
- 0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf,
786
- 0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c,
787
- 0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13,
788
- 0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f,
789
- 0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6,
790
- 0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6,
791
- 0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58,
792
- 0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906,
793
- 0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d,
794
- 0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6,
795
- 0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4,
796
- 0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6,
797
- 0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f,
798
- 0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249,
799
- 0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa,
800
- 0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9,
801
- 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1
802
- ];
803
-
804
- sBox[2] = [
805
- 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90,
806
- 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5,
807
- 0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e,
808
- 0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240,
809
- 0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5,
810
- 0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b,
811
- 0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71,
812
- 0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04,
813
- 0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82,
814
- 0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15,
815
- 0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2,
816
- 0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176,
817
- 0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148,
818
- 0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc,
819
- 0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341,
820
- 0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e,
821
- 0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51,
822
- 0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f,
823
- 0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a,
824
- 0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b,
825
- 0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b,
826
- 0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5,
827
- 0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45,
828
- 0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536,
829
- 0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc,
830
- 0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0,
831
- 0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69,
832
- 0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2,
833
- 0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49,
834
- 0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d,
835
- 0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a,
836
- 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783
837
- ];
838
-
839
- sBox[3] = [
840
- 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1,
841
- 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf,
842
- 0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15,
843
- 0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121,
844
- 0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25,
845
- 0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5,
846
- 0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb,
847
- 0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5,
848
- 0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d,
849
- 0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6,
850
- 0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23,
851
- 0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003,
852
- 0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6,
853
- 0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119,
854
- 0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24,
855
- 0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a,
856
- 0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79,
857
- 0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df,
858
- 0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26,
859
- 0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab,
860
- 0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7,
861
- 0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417,
862
- 0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2,
863
- 0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2,
864
- 0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a,
865
- 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919,
866
- 0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef,
867
- 0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876,
868
- 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab,
869
- 0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04,
870
- 0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282,
871
- 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2
872
- ];
873
-
874
- sBox[4] = [
875
- 0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f,
876
- 0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a,
877
- 0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff,
878
- 0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02,
879
- 0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a,
880
- 0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7,
881
- 0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9,
882
- 0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981,
883
- 0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774,
884
- 0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655,
885
- 0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2,
886
- 0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910,
887
- 0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1,
888
- 0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da,
889
- 0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049,
890
- 0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f,
891
- 0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba,
892
- 0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be,
893
- 0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3,
894
- 0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840,
895
- 0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4,
896
- 0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2,
897
- 0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7,
898
- 0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5,
899
- 0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e,
900
- 0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e,
901
- 0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801,
902
- 0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad,
903
- 0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0,
904
- 0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20,
905
- 0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8,
906
- 0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4
907
- ];
908
-
909
- sBox[5] = [
910
- 0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac,
911
- 0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138,
912
- 0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367,
913
- 0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98,
914
- 0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072,
915
- 0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3,
916
- 0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd,
917
- 0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8,
918
- 0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9,
919
- 0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54,
920
- 0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387,
921
- 0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc,
922
- 0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf,
923
- 0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf,
924
- 0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f,
925
- 0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289,
926
- 0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950,
927
- 0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f,
928
- 0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b,
929
- 0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be,
930
- 0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13,
931
- 0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976,
932
- 0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0,
933
- 0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891,
934
- 0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da,
935
- 0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc,
936
- 0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084,
937
- 0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25,
938
- 0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121,
939
- 0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5,
940
- 0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd,
941
- 0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f
942
- ];
943
-
944
- sBox[6] = [
945
- 0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f,
946
- 0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de,
947
- 0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43,
948
- 0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19,
949
- 0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2,
950
- 0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516,
951
- 0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88,
952
- 0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816,
953
- 0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756,
954
- 0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a,
955
- 0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264,
956
- 0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688,
957
- 0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28,
958
- 0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3,
959
- 0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7,
960
- 0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06,
961
- 0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033,
962
- 0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a,
963
- 0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566,
964
- 0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509,
965
- 0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962,
966
- 0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e,
967
- 0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c,
968
- 0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c,
969
- 0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285,
970
- 0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301,
971
- 0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be,
972
- 0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767,
973
- 0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647,
974
- 0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914,
975
- 0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c,
976
- 0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3
977
- ];
978
-
979
- sBox[7] = [
980
- 0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5,
981
- 0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc,
982
- 0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd,
983
- 0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d,
984
- 0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2,
985
- 0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862,
986
- 0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc,
987
- 0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c,
988
- 0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e,
989
- 0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039,
990
- 0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8,
991
- 0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42,
992
- 0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5,
993
- 0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472,
994
- 0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225,
995
- 0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c,
996
- 0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb,
997
- 0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054,
998
- 0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70,
999
- 0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc,
1000
- 0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c,
1001
- 0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3,
1002
- 0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4,
1003
- 0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101,
1004
- 0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f,
1005
- 0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e,
1006
- 0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a,
1007
- 0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c,
1008
- 0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384,
1009
- 0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c,
1010
- 0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82,
1011
- 0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e
1012
- ];
633
+ function f3(d, m, r) {
634
+ const t = m - d;
635
+ const I = (t << r) | (t >>> (32 - r));
636
+ return ((sBox[0][I >>> 24] + sBox[1][(I >>> 16) & 255]) ^ sBox[2][(I >>> 8) & 255]) - sBox[3][I & 255];
637
+ }
638
+ const sBox = new Array(8);
639
+ sBox[0] = [
640
+ 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949,
641
+ 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e,
642
+ 0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d,
643
+ 0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0,
644
+ 0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7,
645
+ 0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935,
646
+ 0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d,
647
+ 0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50,
648
+ 0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe,
649
+ 0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3,
650
+ 0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167,
651
+ 0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291,
652
+ 0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779,
653
+ 0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2,
654
+ 0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511,
655
+ 0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d,
656
+ 0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5,
657
+ 0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324,
658
+ 0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c,
659
+ 0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc,
660
+ 0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d,
661
+ 0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96,
662
+ 0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a,
663
+ 0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d,
664
+ 0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd,
665
+ 0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6,
666
+ 0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9,
667
+ 0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872,
668
+ 0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c,
669
+ 0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e,
670
+ 0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9,
671
+ 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf
672
+ ];
673
+ sBox[1] = [
674
+ 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651,
675
+ 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3,
676
+ 0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb,
677
+ 0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806,
678
+ 0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b,
679
+ 0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359,
680
+ 0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b,
681
+ 0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c,
682
+ 0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34,
683
+ 0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb,
684
+ 0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd,
685
+ 0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860,
686
+ 0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b,
687
+ 0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304,
688
+ 0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b,
689
+ 0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf,
690
+ 0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c,
691
+ 0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13,
692
+ 0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f,
693
+ 0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6,
694
+ 0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6,
695
+ 0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58,
696
+ 0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906,
697
+ 0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d,
698
+ 0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6,
699
+ 0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4,
700
+ 0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6,
701
+ 0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f,
702
+ 0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249,
703
+ 0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa,
704
+ 0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9,
705
+ 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1
706
+ ];
707
+ sBox[2] = [
708
+ 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90,
709
+ 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5,
710
+ 0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e,
711
+ 0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240,
712
+ 0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5,
713
+ 0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b,
714
+ 0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71,
715
+ 0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04,
716
+ 0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82,
717
+ 0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15,
718
+ 0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2,
719
+ 0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176,
720
+ 0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148,
721
+ 0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc,
722
+ 0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341,
723
+ 0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e,
724
+ 0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51,
725
+ 0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f,
726
+ 0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a,
727
+ 0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b,
728
+ 0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b,
729
+ 0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5,
730
+ 0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45,
731
+ 0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536,
732
+ 0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc,
733
+ 0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0,
734
+ 0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69,
735
+ 0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2,
736
+ 0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49,
737
+ 0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d,
738
+ 0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a,
739
+ 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783
740
+ ];
741
+ sBox[3] = [
742
+ 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1,
743
+ 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf,
744
+ 0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15,
745
+ 0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121,
746
+ 0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25,
747
+ 0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5,
748
+ 0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb,
749
+ 0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5,
750
+ 0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d,
751
+ 0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6,
752
+ 0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23,
753
+ 0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003,
754
+ 0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6,
755
+ 0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119,
756
+ 0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24,
757
+ 0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a,
758
+ 0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79,
759
+ 0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df,
760
+ 0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26,
761
+ 0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab,
762
+ 0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7,
763
+ 0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417,
764
+ 0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2,
765
+ 0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2,
766
+ 0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a,
767
+ 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919,
768
+ 0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef,
769
+ 0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876,
770
+ 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab,
771
+ 0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04,
772
+ 0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282,
773
+ 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2
774
+ ];
775
+ sBox[4] = [
776
+ 0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f,
777
+ 0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a,
778
+ 0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff,
779
+ 0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02,
780
+ 0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a,
781
+ 0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7,
782
+ 0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9,
783
+ 0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981,
784
+ 0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774,
785
+ 0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655,
786
+ 0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2,
787
+ 0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910,
788
+ 0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1,
789
+ 0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da,
790
+ 0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049,
791
+ 0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f,
792
+ 0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba,
793
+ 0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be,
794
+ 0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3,
795
+ 0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840,
796
+ 0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4,
797
+ 0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2,
798
+ 0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7,
799
+ 0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5,
800
+ 0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e,
801
+ 0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e,
802
+ 0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801,
803
+ 0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad,
804
+ 0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0,
805
+ 0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20,
806
+ 0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8,
807
+ 0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4
808
+ ];
809
+ sBox[5] = [
810
+ 0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac,
811
+ 0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138,
812
+ 0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367,
813
+ 0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98,
814
+ 0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072,
815
+ 0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3,
816
+ 0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd,
817
+ 0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8,
818
+ 0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9,
819
+ 0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54,
820
+ 0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387,
821
+ 0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc,
822
+ 0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf,
823
+ 0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf,
824
+ 0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f,
825
+ 0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289,
826
+ 0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950,
827
+ 0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f,
828
+ 0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b,
829
+ 0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be,
830
+ 0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13,
831
+ 0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976,
832
+ 0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0,
833
+ 0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891,
834
+ 0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da,
835
+ 0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc,
836
+ 0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084,
837
+ 0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25,
838
+ 0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121,
839
+ 0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5,
840
+ 0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd,
841
+ 0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f
842
+ ];
843
+ sBox[6] = [
844
+ 0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f,
845
+ 0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de,
846
+ 0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43,
847
+ 0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19,
848
+ 0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2,
849
+ 0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516,
850
+ 0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88,
851
+ 0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816,
852
+ 0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756,
853
+ 0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a,
854
+ 0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264,
855
+ 0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688,
856
+ 0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28,
857
+ 0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3,
858
+ 0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7,
859
+ 0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06,
860
+ 0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033,
861
+ 0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a,
862
+ 0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566,
863
+ 0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509,
864
+ 0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962,
865
+ 0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e,
866
+ 0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c,
867
+ 0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c,
868
+ 0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285,
869
+ 0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301,
870
+ 0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be,
871
+ 0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767,
872
+ 0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647,
873
+ 0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914,
874
+ 0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c,
875
+ 0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3
876
+ ];
877
+ sBox[7] = [
878
+ 0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5,
879
+ 0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc,
880
+ 0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd,
881
+ 0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d,
882
+ 0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2,
883
+ 0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862,
884
+ 0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc,
885
+ 0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c,
886
+ 0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e,
887
+ 0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039,
888
+ 0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8,
889
+ 0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42,
890
+ 0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5,
891
+ 0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472,
892
+ 0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225,
893
+ 0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c,
894
+ 0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb,
895
+ 0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054,
896
+ 0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70,
897
+ 0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc,
898
+ 0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c,
899
+ 0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3,
900
+ 0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4,
901
+ 0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101,
902
+ 0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f,
903
+ 0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e,
904
+ 0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a,
905
+ 0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c,
906
+ 0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384,
907
+ 0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c,
908
+ 0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82,
909
+ 0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e
910
+ ];
1013
911
  }
1014
-
1015
912
  function CAST5(key) {
1016
- this.cast5 = new OpenPGPSymEncCAST5();
1017
- this.cast5.setKey(key);
1018
-
1019
- this.encrypt = function(block) {
1020
- return this.cast5.encrypt(block);
1021
- };
913
+ this.cast5 = new OpenPGPSymEncCAST5();
914
+ this.cast5.setKey(key);
915
+ this.encrypt = function (block) {
916
+ return this.cast5.encrypt(block);
917
+ };
1022
918
  }
1023
-
1024
919
  CAST5.blockSize = CAST5.prototype.blockSize = 8;
1025
920
  CAST5.keySize = CAST5.prototype.keySize = 16;
1026
921
 
1027
- /* eslint-disable no-mixed-operators, no-fallthrough */
1028
-
1029
-
1030
- /* Modified by Recurity Labs GmbH
922
+ /**
923
+ * @access private
924
+ * Modified by Recurity Labs GmbH
1031
925
  *
1032
926
  * Cipher.js
1033
927
  * A block-cipher algorithm implementation on JavaScript
@@ -1046,334 +940,307 @@ CAST5.keySize = CAST5.prototype.keySize = 16;
1046
940
  * All rights for these routines are reserved to Michiel van Everdingen.
1047
941
  *
1048
942
  */
1049
-
1050
943
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1051
944
  //Math
1052
945
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1053
-
1054
946
  const MAXINT = 0xFFFFFFFF;
1055
-
1056
947
  function rotw(w, n) {
1057
- return (w << n | w >>> (32 - n)) & MAXINT;
948
+ return (w << n | w >>> (32 - n)) & MAXINT;
1058
949
  }
1059
-
1060
950
  function getW(a, i) {
1061
- return a[i] | a[i + 1] << 8 | a[i + 2] << 16 | a[i + 3] << 24;
951
+ return a[i] | a[i + 1] << 8 | a[i + 2] << 16 | a[i + 3] << 24;
1062
952
  }
1063
-
1064
953
  function setW(a, i, w) {
1065
- a.splice(i, 4, w & 0xFF, (w >>> 8) & 0xFF, (w >>> 16) & 0xFF, (w >>> 24) & 0xFF);
954
+ a.splice(i, 4, w & 0xFF, (w >>> 8) & 0xFF, (w >>> 16) & 0xFF, (w >>> 24) & 0xFF);
1066
955
  }
1067
-
1068
956
  function getB(x, n) {
1069
- return (x >>> (n * 8)) & 0xFF;
957
+ return (x >>> (n * 8)) & 0xFF;
1070
958
  }
1071
-
1072
959
  // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1073
960
  // Twofish
1074
961
  // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1075
-
1076
962
  function createTwofish() {
1077
- //
1078
- let keyBytes = null;
1079
- let dataBytes = null;
1080
- let dataOffset = -1;
1081
- // var dataLength = -1;
1082
- // var idx2 = -1;
1083
- //
1084
-
1085
- let tfsKey = [];
1086
- let tfsM = [
1087
- [],
1088
- [],
1089
- [],
1090
- []
1091
- ];
1092
-
1093
- function tfsInit(key) {
1094
- keyBytes = key;
1095
- let i;
1096
- let a;
1097
- let b;
1098
- let c;
1099
- let d;
1100
- const meKey = [];
1101
- const moKey = [];
1102
- const inKey = [];
1103
- let kLen;
1104
- const sKey = [];
1105
- let f01;
1106
- let f5b;
1107
- let fef;
1108
-
1109
- const q0 = [
1110
- [8, 1, 7, 13, 6, 15, 3, 2, 0, 11, 5, 9, 14, 12, 10, 4],
1111
- [2, 8, 11, 13, 15, 7, 6, 14, 3, 1, 9, 4, 0, 10, 12, 5]
1112
- ];
1113
- const q1 = [
1114
- [14, 12, 11, 8, 1, 2, 3, 5, 15, 4, 10, 6, 7, 0, 9, 13],
1115
- [1, 14, 2, 11, 4, 12, 3, 7, 6, 13, 10, 5, 15, 9, 0, 8]
1116
- ];
1117
- const q2 = [
1118
- [11, 10, 5, 14, 6, 13, 9, 0, 12, 8, 15, 3, 2, 4, 7, 1],
1119
- [4, 12, 7, 5, 1, 6, 9, 10, 0, 14, 13, 8, 2, 11, 3, 15]
1120
- ];
1121
- const q3 = [
1122
- [13, 7, 15, 4, 1, 2, 6, 14, 9, 11, 3, 0, 8, 5, 12, 10],
1123
- [11, 9, 5, 1, 12, 3, 13, 14, 6, 4, 7, 15, 2, 0, 8, 10]
1124
- ];
1125
- const ror4 = [0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15];
1126
- const ashx = [0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 5, 14, 7];
1127
- const q = [
1128
- [],
1129
- []
963
+ //
964
+ let keyBytes = null;
965
+ let dataBytes = null;
966
+ let dataOffset = -1;
967
+ // var dataLength = -1;
968
+ // var idx2 = -1;
969
+ //
970
+ let tfsKey = [];
971
+ let tfsM = [
972
+ [],
973
+ [],
974
+ [],
975
+ []
1130
976
  ];
1131
- const m = [
1132
- [],
1133
- [],
1134
- [],
1135
- []
1136
- ];
1137
-
1138
- function ffm5b(x) {
1139
- return x ^ (x >> 2) ^ [0, 90, 180, 238][x & 3];
1140
- }
1141
-
1142
- function ffmEf(x) {
1143
- return x ^ (x >> 1) ^ (x >> 2) ^ [0, 238, 180, 90][x & 3];
1144
- }
1145
-
1146
- function mdsRem(p, q) {
1147
- let i;
1148
- let t;
1149
- let u;
1150
- for (i = 0; i < 8; i++) {
1151
- t = q >>> 24;
1152
- q = ((q << 8) & MAXINT) | p >>> 24;
1153
- p = (p << 8) & MAXINT;
1154
- u = t << 1;
1155
- if (t & 128) {
1156
- u ^= 333;
977
+ function tfsInit(key) {
978
+ keyBytes = key;
979
+ let i;
980
+ let a;
981
+ let b;
982
+ let c;
983
+ let d;
984
+ const meKey = [];
985
+ const moKey = [];
986
+ const inKey = [];
987
+ let kLen;
988
+ const sKey = [];
989
+ let f01;
990
+ let f5b;
991
+ let fef;
992
+ const q0 = [
993
+ [8, 1, 7, 13, 6, 15, 3, 2, 0, 11, 5, 9, 14, 12, 10, 4],
994
+ [2, 8, 11, 13, 15, 7, 6, 14, 3, 1, 9, 4, 0, 10, 12, 5]
995
+ ];
996
+ const q1 = [
997
+ [14, 12, 11, 8, 1, 2, 3, 5, 15, 4, 10, 6, 7, 0, 9, 13],
998
+ [1, 14, 2, 11, 4, 12, 3, 7, 6, 13, 10, 5, 15, 9, 0, 8]
999
+ ];
1000
+ const q2 = [
1001
+ [11, 10, 5, 14, 6, 13, 9, 0, 12, 8, 15, 3, 2, 4, 7, 1],
1002
+ [4, 12, 7, 5, 1, 6, 9, 10, 0, 14, 13, 8, 2, 11, 3, 15]
1003
+ ];
1004
+ const q3 = [
1005
+ [13, 7, 15, 4, 1, 2, 6, 14, 9, 11, 3, 0, 8, 5, 12, 10],
1006
+ [11, 9, 5, 1, 12, 3, 13, 14, 6, 4, 7, 15, 2, 0, 8, 10]
1007
+ ];
1008
+ const ror4 = [0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15];
1009
+ const ashx = [0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 5, 14, 7];
1010
+ /** @type {number[][]} */
1011
+ const q = [
1012
+ [],
1013
+ []
1014
+ ];
1015
+ const m = [
1016
+ [],
1017
+ [],
1018
+ [],
1019
+ []
1020
+ ];
1021
+ function ffm5b(x) {
1022
+ return x ^ (x >> 2) ^ [0, 90, 180, 238][x & 3];
1157
1023
  }
1158
- q ^= t ^ (u << 16);
1159
- u ^= t >>> 1;
1160
- if (t & 1) {
1161
- u ^= 166;
1024
+ function ffmEf(x) {
1025
+ return x ^ (x >> 1) ^ (x >> 2) ^ [0, 238, 180, 90][x & 3];
1026
+ }
1027
+ function mdsRem(p, q) {
1028
+ let i;
1029
+ let t;
1030
+ let u;
1031
+ for (i = 0; i < 8; i++) {
1032
+ t = q >>> 24;
1033
+ q = ((q << 8) & MAXINT) | p >>> 24;
1034
+ p = (p << 8) & MAXINT;
1035
+ u = t << 1;
1036
+ if (t & 128) {
1037
+ u ^= 333;
1038
+ }
1039
+ q ^= t ^ (u << 16);
1040
+ u ^= t >>> 1;
1041
+ if (t & 1) {
1042
+ u ^= 166;
1043
+ }
1044
+ q ^= u << 24 | u << 8;
1045
+ }
1046
+ return q;
1047
+ }
1048
+ function qp(n, x) {
1049
+ const a = x >> 4;
1050
+ const b = x & 15;
1051
+ const c = q0[n][a ^ b];
1052
+ const d = q1[n][ror4[b] ^ ashx[a]];
1053
+ return q3[n][ror4[d] ^ ashx[c]] << 4 | q2[n][c ^ d];
1054
+ }
1055
+ function hFun(x, key) {
1056
+ let a = getB(x, 0);
1057
+ let b = getB(x, 1);
1058
+ let c = getB(x, 2);
1059
+ let d = getB(x, 3);
1060
+ switch (kLen) {
1061
+ case 4:
1062
+ a = q[1][a] ^ getB(key[3], 0);
1063
+ b = q[0][b] ^ getB(key[3], 1);
1064
+ c = q[0][c] ^ getB(key[3], 2);
1065
+ d = q[1][d] ^ getB(key[3], 3);
1066
+ // eslint-disable-next-line no-fallthrough
1067
+ case 3:
1068
+ a = q[1][a] ^ getB(key[2], 0);
1069
+ b = q[1][b] ^ getB(key[2], 1);
1070
+ c = q[0][c] ^ getB(key[2], 2);
1071
+ d = q[0][d] ^ getB(key[2], 3);
1072
+ // eslint-disable-next-line no-fallthrough
1073
+ case 2:
1074
+ a = q[0][q[0][a] ^ getB(key[1], 0)] ^ getB(key[0], 0);
1075
+ b = q[0][q[1][b] ^ getB(key[1], 1)] ^ getB(key[0], 1);
1076
+ c = q[1][q[0][c] ^ getB(key[1], 2)] ^ getB(key[0], 2);
1077
+ d = q[1][q[1][d] ^ getB(key[1], 3)] ^ getB(key[0], 3);
1078
+ }
1079
+ return m[0][a] ^ m[1][b] ^ m[2][c] ^ m[3][d];
1080
+ }
1081
+ keyBytes = keyBytes.slice(0, 32);
1082
+ i = keyBytes.length;
1083
+ while (i !== 16 && i !== 24 && i !== 32) {
1084
+ keyBytes[i++] = 0;
1085
+ }
1086
+ for (i = 0; i < keyBytes.length; i += 4) {
1087
+ inKey[i >> 2] = getW(keyBytes, i);
1088
+ }
1089
+ for (i = 0; i < 256; i++) {
1090
+ q[0][i] = qp(0, i);
1091
+ q[1][i] = qp(1, i);
1092
+ }
1093
+ for (i = 0; i < 256; i++) {
1094
+ f01 = q[1][i];
1095
+ f5b = ffm5b(f01);
1096
+ fef = ffmEf(f01);
1097
+ m[0][i] = f01 + (f5b << 8) + (fef << 16) + (fef << 24);
1098
+ m[2][i] = f5b + (fef << 8) + (f01 << 16) + (fef << 24);
1099
+ f01 = q[0][i];
1100
+ f5b = ffm5b(f01);
1101
+ fef = ffmEf(f01);
1102
+ m[1][i] = fef + (fef << 8) + (f5b << 16) + (f01 << 24);
1103
+ m[3][i] = f5b + (f01 << 8) + (fef << 16) + (f5b << 24);
1104
+ }
1105
+ kLen = inKey.length / 2;
1106
+ for (i = 0; i < kLen; i++) {
1107
+ a = inKey[i + i];
1108
+ meKey[i] = a;
1109
+ b = inKey[i + i + 1];
1110
+ moKey[i] = b;
1111
+ sKey[kLen - i - 1] = mdsRem(a, b);
1112
+ }
1113
+ for (i = 0; i < 40; i += 2) {
1114
+ a = 0x1010101 * i;
1115
+ b = a + 0x1010101;
1116
+ a = hFun(a, meKey);
1117
+ b = rotw(hFun(b, moKey), 8);
1118
+ tfsKey[i] = (a + b) & MAXINT;
1119
+ tfsKey[i + 1] = rotw(a + 2 * b, 9);
1120
+ }
1121
+ for (i = 0; i < 256; i++) {
1122
+ a = b = c = d = i;
1123
+ switch (kLen) {
1124
+ case 4:
1125
+ a = q[1][a] ^ getB(sKey[3], 0);
1126
+ b = q[0][b] ^ getB(sKey[3], 1);
1127
+ c = q[0][c] ^ getB(sKey[3], 2);
1128
+ d = q[1][d] ^ getB(sKey[3], 3);
1129
+ // eslint-disable-next-line no-fallthrough
1130
+ case 3:
1131
+ a = q[1][a] ^ getB(sKey[2], 0);
1132
+ b = q[1][b] ^ getB(sKey[2], 1);
1133
+ c = q[0][c] ^ getB(sKey[2], 2);
1134
+ d = q[0][d] ^ getB(sKey[2], 3);
1135
+ // eslint-disable-next-line no-fallthrough
1136
+ case 2:
1137
+ tfsM[0][i] = m[0][q[0][q[0][a] ^ getB(sKey[1], 0)] ^ getB(sKey[0], 0)];
1138
+ tfsM[1][i] = m[1][q[0][q[1][b] ^ getB(sKey[1], 1)] ^ getB(sKey[0], 1)];
1139
+ tfsM[2][i] = m[2][q[1][q[0][c] ^ getB(sKey[1], 2)] ^ getB(sKey[0], 2)];
1140
+ tfsM[3][i] = m[3][q[1][q[1][d] ^ getB(sKey[1], 3)] ^ getB(sKey[0], 3)];
1141
+ }
1162
1142
  }
1163
- q ^= u << 24 | u << 8;
1164
- }
1165
- return q;
1166
- }
1167
-
1168
- function qp(n, x) {
1169
- const a = x >> 4;
1170
- const b = x & 15;
1171
- const c = q0[n][a ^ b];
1172
- const d = q1[n][ror4[b] ^ ashx[a]];
1173
- return q3[n][ror4[d] ^ ashx[c]] << 4 | q2[n][c ^ d];
1174
- }
1175
-
1176
- function hFun(x, key) {
1177
- let a = getB(x, 0);
1178
- let b = getB(x, 1);
1179
- let c = getB(x, 2);
1180
- let d = getB(x, 3);
1181
- switch (kLen) {
1182
- case 4:
1183
- a = q[1][a] ^ getB(key[3], 0);
1184
- b = q[0][b] ^ getB(key[3], 1);
1185
- c = q[0][c] ^ getB(key[3], 2);
1186
- d = q[1][d] ^ getB(key[3], 3);
1187
- case 3:
1188
- a = q[1][a] ^ getB(key[2], 0);
1189
- b = q[1][b] ^ getB(key[2], 1);
1190
- c = q[0][c] ^ getB(key[2], 2);
1191
- d = q[0][d] ^ getB(key[2], 3);
1192
- case 2:
1193
- a = q[0][q[0][a] ^ getB(key[1], 0)] ^ getB(key[0], 0);
1194
- b = q[0][q[1][b] ^ getB(key[1], 1)] ^ getB(key[0], 1);
1195
- c = q[1][q[0][c] ^ getB(key[1], 2)] ^ getB(key[0], 2);
1196
- d = q[1][q[1][d] ^ getB(key[1], 3)] ^ getB(key[0], 3);
1197
- }
1198
- return m[0][a] ^ m[1][b] ^ m[2][c] ^ m[3][d];
1199
- }
1200
-
1201
- keyBytes = keyBytes.slice(0, 32);
1202
- i = keyBytes.length;
1203
- while (i !== 16 && i !== 24 && i !== 32) {
1204
- keyBytes[i++] = 0;
1205
- }
1206
-
1207
- for (i = 0; i < keyBytes.length; i += 4) {
1208
- inKey[i >> 2] = getW(keyBytes, i);
1209
1143
  }
1210
- for (i = 0; i < 256; i++) {
1211
- q[0][i] = qp(0, i);
1212
- q[1][i] = qp(1, i);
1144
+ function tfsG0(x) {
1145
+ return tfsM[0][getB(x, 0)] ^ tfsM[1][getB(x, 1)] ^ tfsM[2][getB(x, 2)] ^ tfsM[3][getB(x, 3)];
1213
1146
  }
1214
- for (i = 0; i < 256; i++) {
1215
- f01 = q[1][i];
1216
- f5b = ffm5b(f01);
1217
- fef = ffmEf(f01);
1218
- m[0][i] = f01 + (f5b << 8) + (fef << 16) + (fef << 24);
1219
- m[2][i] = f5b + (fef << 8) + (f01 << 16) + (fef << 24);
1220
- f01 = q[0][i];
1221
- f5b = ffm5b(f01);
1222
- fef = ffmEf(f01);
1223
- m[1][i] = fef + (fef << 8) + (f5b << 16) + (f01 << 24);
1224
- m[3][i] = f5b + (f01 << 8) + (fef << 16) + (f5b << 24);
1147
+ function tfsG1(x) {
1148
+ return tfsM[0][getB(x, 3)] ^ tfsM[1][getB(x, 0)] ^ tfsM[2][getB(x, 1)] ^ tfsM[3][getB(x, 2)];
1225
1149
  }
1226
-
1227
- kLen = inKey.length / 2;
1228
- for (i = 0; i < kLen; i++) {
1229
- a = inKey[i + i];
1230
- meKey[i] = a;
1231
- b = inKey[i + i + 1];
1232
- moKey[i] = b;
1233
- sKey[kLen - i - 1] = mdsRem(a, b);
1150
+ function tfsFrnd(r, blk) {
1151
+ let a = tfsG0(blk[0]);
1152
+ let b = tfsG1(blk[1]);
1153
+ blk[2] = rotw(blk[2] ^ (a + b + tfsKey[4 * r + 8]) & MAXINT, 31);
1154
+ blk[3] = rotw(blk[3], 1) ^ (a + 2 * b + tfsKey[4 * r + 9]) & MAXINT;
1155
+ a = tfsG0(blk[2]);
1156
+ b = tfsG1(blk[3]);
1157
+ blk[0] = rotw(blk[0] ^ (a + b + tfsKey[4 * r + 10]) & MAXINT, 31);
1158
+ blk[1] = rotw(blk[1], 1) ^ (a + 2 * b + tfsKey[4 * r + 11]) & MAXINT;
1234
1159
  }
1235
- for (i = 0; i < 40; i += 2) {
1236
- a = 0x1010101 * i;
1237
- b = a + 0x1010101;
1238
- a = hFun(a, meKey);
1239
- b = rotw(hFun(b, moKey), 8);
1240
- tfsKey[i] = (a + b) & MAXINT;
1241
- tfsKey[i + 1] = rotw(a + 2 * b, 9);
1160
+ function tfsIrnd(i, blk) {
1161
+ let a = tfsG0(blk[0]);
1162
+ let b = tfsG1(blk[1]);
1163
+ blk[2] = rotw(blk[2], 1) ^ (a + b + tfsKey[4 * i + 10]) & MAXINT;
1164
+ blk[3] = rotw(blk[3] ^ (a + 2 * b + tfsKey[4 * i + 11]) & MAXINT, 31);
1165
+ a = tfsG0(blk[2]);
1166
+ b = tfsG1(blk[3]);
1167
+ blk[0] = rotw(blk[0], 1) ^ (a + b + tfsKey[4 * i + 8]) & MAXINT;
1168
+ blk[1] = rotw(blk[1] ^ (a + 2 * b + tfsKey[4 * i + 9]) & MAXINT, 31);
1242
1169
  }
1243
- for (i = 0; i < 256; i++) {
1244
- a = b = c = d = i;
1245
- switch (kLen) {
1246
- case 4:
1247
- a = q[1][a] ^ getB(sKey[3], 0);
1248
- b = q[0][b] ^ getB(sKey[3], 1);
1249
- c = q[0][c] ^ getB(sKey[3], 2);
1250
- d = q[1][d] ^ getB(sKey[3], 3);
1251
- case 3:
1252
- a = q[1][a] ^ getB(sKey[2], 0);
1253
- b = q[1][b] ^ getB(sKey[2], 1);
1254
- c = q[0][c] ^ getB(sKey[2], 2);
1255
- d = q[0][d] ^ getB(sKey[2], 3);
1256
- case 2:
1257
- tfsM[0][i] = m[0][q[0][q[0][a] ^ getB(sKey[1], 0)] ^ getB(sKey[0], 0)];
1258
- tfsM[1][i] = m[1][q[0][q[1][b] ^ getB(sKey[1], 1)] ^ getB(sKey[0], 1)];
1259
- tfsM[2][i] = m[2][q[1][q[0][c] ^ getB(sKey[1], 2)] ^ getB(sKey[0], 2)];
1260
- tfsM[3][i] = m[3][q[1][q[1][d] ^ getB(sKey[1], 3)] ^ getB(sKey[0], 3)];
1261
- }
1170
+ function tfsClose() {
1171
+ tfsKey = [];
1172
+ tfsM = [
1173
+ [],
1174
+ [],
1175
+ [],
1176
+ []
1177
+ ];
1262
1178
  }
1263
- }
1264
-
1265
- function tfsG0(x) {
1266
- return tfsM[0][getB(x, 0)] ^ tfsM[1][getB(x, 1)] ^ tfsM[2][getB(x, 2)] ^ tfsM[3][getB(x, 3)];
1267
- }
1268
-
1269
- function tfsG1(x) {
1270
- return tfsM[0][getB(x, 3)] ^ tfsM[1][getB(x, 0)] ^ tfsM[2][getB(x, 1)] ^ tfsM[3][getB(x, 2)];
1271
- }
1272
-
1273
- function tfsFrnd(r, blk) {
1274
- let a = tfsG0(blk[0]);
1275
- let b = tfsG1(blk[1]);
1276
- blk[2] = rotw(blk[2] ^ (a + b + tfsKey[4 * r + 8]) & MAXINT, 31);
1277
- blk[3] = rotw(blk[3], 1) ^ (a + 2 * b + tfsKey[4 * r + 9]) & MAXINT;
1278
- a = tfsG0(blk[2]);
1279
- b = tfsG1(blk[3]);
1280
- blk[0] = rotw(blk[0] ^ (a + b + tfsKey[4 * r + 10]) & MAXINT, 31);
1281
- blk[1] = rotw(blk[1], 1) ^ (a + 2 * b + tfsKey[4 * r + 11]) & MAXINT;
1282
- }
1283
-
1284
- function tfsIrnd(i, blk) {
1285
- let a = tfsG0(blk[0]);
1286
- let b = tfsG1(blk[1]);
1287
- blk[2] = rotw(blk[2], 1) ^ (a + b + tfsKey[4 * i + 10]) & MAXINT;
1288
- blk[3] = rotw(blk[3] ^ (a + 2 * b + tfsKey[4 * i + 11]) & MAXINT, 31);
1289
- a = tfsG0(blk[2]);
1290
- b = tfsG1(blk[3]);
1291
- blk[0] = rotw(blk[0], 1) ^ (a + b + tfsKey[4 * i + 8]) & MAXINT;
1292
- blk[1] = rotw(blk[1] ^ (a + 2 * b + tfsKey[4 * i + 9]) & MAXINT, 31);
1293
- }
1294
-
1295
- function tfsClose() {
1296
- tfsKey = [];
1297
- tfsM = [
1298
- [],
1299
- [],
1300
- [],
1301
- []
1302
- ];
1303
- }
1304
-
1305
- function tfsEncrypt(data, offset) {
1306
- dataBytes = data;
1307
- dataOffset = offset;
1308
- const blk = [getW(dataBytes, dataOffset) ^ tfsKey[0],
1309
- getW(dataBytes, dataOffset + 4) ^ tfsKey[1],
1310
- getW(dataBytes, dataOffset + 8) ^ tfsKey[2],
1311
- getW(dataBytes, dataOffset + 12) ^ tfsKey[3]];
1312
- for (let j = 0; j < 8; j++) {
1313
- tfsFrnd(j, blk);
1179
+ function tfsEncrypt(data, offset) {
1180
+ dataBytes = data;
1181
+ dataOffset = offset;
1182
+ const blk = [getW(dataBytes, dataOffset) ^ tfsKey[0],
1183
+ getW(dataBytes, dataOffset + 4) ^ tfsKey[1],
1184
+ getW(dataBytes, dataOffset + 8) ^ tfsKey[2],
1185
+ getW(dataBytes, dataOffset + 12) ^ tfsKey[3]];
1186
+ for (let j = 0; j < 8; j++) {
1187
+ tfsFrnd(j, blk);
1188
+ }
1189
+ setW(dataBytes, dataOffset, blk[2] ^ tfsKey[4]);
1190
+ setW(dataBytes, dataOffset + 4, blk[3] ^ tfsKey[5]);
1191
+ setW(dataBytes, dataOffset + 8, blk[0] ^ tfsKey[6]);
1192
+ setW(dataBytes, dataOffset + 12, blk[1] ^ tfsKey[7]);
1193
+ dataOffset += 16;
1194
+ return dataBytes;
1314
1195
  }
1315
- setW(dataBytes, dataOffset, blk[2] ^ tfsKey[4]);
1316
- setW(dataBytes, dataOffset + 4, blk[3] ^ tfsKey[5]);
1317
- setW(dataBytes, dataOffset + 8, blk[0] ^ tfsKey[6]);
1318
- setW(dataBytes, dataOffset + 12, blk[1] ^ tfsKey[7]);
1319
- dataOffset += 16;
1320
- return dataBytes;
1321
- }
1322
-
1323
- function tfsDecrypt(data, offset) {
1324
- dataBytes = data;
1325
- dataOffset = offset;
1326
- const blk = [getW(dataBytes, dataOffset) ^ tfsKey[4],
1327
- getW(dataBytes, dataOffset + 4) ^ tfsKey[5],
1328
- getW(dataBytes, dataOffset + 8) ^ tfsKey[6],
1329
- getW(dataBytes, dataOffset + 12) ^ tfsKey[7]];
1330
- for (let j = 7; j >= 0; j--) {
1331
- tfsIrnd(j, blk);
1196
+ function tfsDecrypt(data, offset) {
1197
+ dataBytes = data;
1198
+ dataOffset = offset;
1199
+ const blk = [getW(dataBytes, dataOffset) ^ tfsKey[4],
1200
+ getW(dataBytes, dataOffset + 4) ^ tfsKey[5],
1201
+ getW(dataBytes, dataOffset + 8) ^ tfsKey[6],
1202
+ getW(dataBytes, dataOffset + 12) ^ tfsKey[7]];
1203
+ for (let j = 7; j >= 0; j--) {
1204
+ tfsIrnd(j, blk);
1205
+ }
1206
+ setW(dataBytes, dataOffset, blk[2] ^ tfsKey[0]);
1207
+ setW(dataBytes, dataOffset + 4, blk[3] ^ tfsKey[1]);
1208
+ setW(dataBytes, dataOffset + 8, blk[0] ^ tfsKey[2]);
1209
+ setW(dataBytes, dataOffset + 12, blk[1] ^ tfsKey[3]);
1210
+ dataOffset += 16;
1332
1211
  }
1333
- setW(dataBytes, dataOffset, blk[2] ^ tfsKey[0]);
1334
- setW(dataBytes, dataOffset + 4, blk[3] ^ tfsKey[1]);
1335
- setW(dataBytes, dataOffset + 8, blk[0] ^ tfsKey[2]);
1336
- setW(dataBytes, dataOffset + 12, blk[1] ^ tfsKey[3]);
1337
- dataOffset += 16;
1338
- }
1339
-
1340
- // added by Recurity Labs
1341
-
1342
- function tfsFinal() {
1343
- return dataBytes;
1344
- }
1345
-
1346
- return {
1347
- name: 'twofish',
1348
- blocksize: 128 / 8,
1349
- open: tfsInit,
1350
- close: tfsClose,
1351
- encrypt: tfsEncrypt,
1352
- decrypt: tfsDecrypt,
1353
1212
  // added by Recurity Labs
1354
- finalize: tfsFinal
1355
- };
1213
+ function tfsFinal() {
1214
+ return dataBytes;
1215
+ }
1216
+ return {
1217
+ name: 'twofish',
1218
+ blocksize: 128 / 8,
1219
+ open: tfsInit,
1220
+ close: tfsClose,
1221
+ encrypt: tfsEncrypt,
1222
+ decrypt: tfsDecrypt,
1223
+ // added by Recurity Labs
1224
+ finalize: tfsFinal
1225
+ };
1356
1226
  }
1357
-
1358
1227
  // added by Recurity Labs
1359
-
1360
1228
  function TF(key) {
1361
- this.tf = createTwofish();
1362
- this.tf.open(Array.from(key), 0);
1363
-
1364
- this.encrypt = function(block) {
1365
- return this.tf.encrypt(Array.from(block), 0);
1366
- };
1229
+ this.tf = createTwofish();
1230
+ this.tf.open(Array.from(key), 0);
1231
+ this.encrypt = function (block) {
1232
+ return this.tf.encrypt(Array.from(block), 0);
1233
+ };
1367
1234
  }
1368
-
1369
1235
  TF.keySize = TF.prototype.keySize = 32;
1370
1236
  TF.blockSize = TF.prototype.blockSize = 16;
1371
1237
 
1372
- /* Modified by Recurity Labs GmbH
1238
+ /**
1239
+ * @access private
1240
+ * Modified by Recurity Labs GmbH
1373
1241
  *
1374
1242
  * Originally written by nklein software (nklein.com)
1375
1243
  */
1376
-
1377
1244
  /*
1378
1245
  * Javascript implementation based on Bruce Schneier's reference implementation.
1379
1246
  *
@@ -1381,214 +1248,209 @@ TF.blockSize = TF.prototype.blockSize = 16;
1381
1248
  * The constructor doesn't do much of anything. It's just here
1382
1249
  * so we can start defining properties and methods and such.
1383
1250
  */
1384
- function Blowfish() {}
1385
-
1251
+ function Blowfish() { }
1386
1252
  /*
1387
1253
  * Declare the block size so that protocols know what size
1388
1254
  * Initialization Vector (IV) they will need.
1389
1255
  */
1390
1256
  Blowfish.prototype.BLOCKSIZE = 8;
1391
-
1392
1257
  /*
1393
1258
  * These are the default SBOXES.
1394
1259
  */
1395
1260
  Blowfish.prototype.SBOXES = [
1396
- [
1397
- 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96,
1398
- 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
1399
- 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658,
1400
- 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
1401
- 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,
1402
- 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
1403
- 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6,
1404
- 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
1405
- 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c,
1406
- 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
1407
- 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1,
1408
- 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
1409
- 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a,
1410
- 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
1411
- 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,
1412
- 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
1413
- 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706,
1414
- 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
1415
- 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b,
1416
- 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
1417
- 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c,
1418
- 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
1419
- 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a,
1420
- 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
1421
- 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,
1422
- 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
1423
- 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8,
1424
- 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
1425
- 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33,
1426
- 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
1427
- 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0,
1428
- 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
1429
- 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777,
1430
- 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
1431
- 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,
1432
- 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
1433
- 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e,
1434
- 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
1435
- 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9,
1436
- 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
1437
- 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f,
1438
- 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
1439
- 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a
1440
- ],
1441
- [
1442
- 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d,
1443
- 0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
1444
- 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65,
1445
- 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
1446
- 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9,
1447
- 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
1448
- 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d,
1449
- 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
1450
- 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc,
1451
- 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
1452
- 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908,
1453
- 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
1454
- 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124,
1455
- 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
1456
- 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908,
1457
- 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
1458
- 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b,
1459
- 0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
1460
- 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa,
1461
- 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
1462
- 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d,
1463
- 0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
1464
- 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5,
1465
- 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
1466
- 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96,
1467
- 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
1468
- 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca,
1469
- 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
1470
- 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77,
1471
- 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
1472
- 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054,
1473
- 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
1474
- 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea,
1475
- 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
1476
- 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646,
1477
- 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
1478
- 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea,
1479
- 0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
1480
- 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e,
1481
- 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
1482
- 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd,
1483
- 0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
1484
- 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7
1485
- ],
1486
- [
1487
- 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7,
1488
- 0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
1489
- 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af,
1490
- 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
1491
- 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4,
1492
- 0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
1493
- 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec,
1494
- 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
1495
- 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332,
1496
- 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
1497
- 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58,
1498
- 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
1499
- 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22,
1500
- 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
1501
- 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60,
1502
- 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
1503
- 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99,
1504
- 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
1505
- 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74,
1506
- 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
1507
- 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3,
1508
- 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
1509
- 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979,
1510
- 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
1511
- 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa,
1512
- 0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
1513
- 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086,
1514
- 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
1515
- 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24,
1516
- 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
1517
- 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84,
1518
- 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
1519
- 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09,
1520
- 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
1521
- 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe,
1522
- 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
1523
- 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0,
1524
- 0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
1525
- 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188,
1526
- 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
1527
- 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8,
1528
- 0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
1529
- 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0
1530
- ],
1531
- [
1532
- 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742,
1533
- 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
1534
- 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79,
1535
- 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
1536
- 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a,
1537
- 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
1538
- 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,
1539
- 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
1540
- 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797,
1541
- 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
1542
- 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6,
1543
- 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
1544
- 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba,
1545
- 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
1546
- 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5,
1547
- 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
1548
- 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,
1549
- 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
1550
- 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd,
1551
- 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
1552
- 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb,
1553
- 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
1554
- 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc,
1555
- 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
1556
- 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc,
1557
- 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
1558
- 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,
1559
- 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
1560
- 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a,
1561
- 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
1562
- 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b,
1563
- 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
1564
- 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e,
1565
- 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
1566
- 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623,
1567
- 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
1568
- 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,
1569
- 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
1570
- 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3,
1571
- 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
1572
- 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c,
1573
- 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
1574
- 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
1575
- ]
1261
+ [
1262
+ 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96,
1263
+ 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
1264
+ 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658,
1265
+ 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
1266
+ 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,
1267
+ 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
1268
+ 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6,
1269
+ 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
1270
+ 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c,
1271
+ 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
1272
+ 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1,
1273
+ 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
1274
+ 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a,
1275
+ 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
1276
+ 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,
1277
+ 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
1278
+ 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706,
1279
+ 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
1280
+ 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b,
1281
+ 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
1282
+ 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c,
1283
+ 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
1284
+ 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a,
1285
+ 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
1286
+ 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,
1287
+ 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
1288
+ 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8,
1289
+ 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
1290
+ 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33,
1291
+ 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
1292
+ 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0,
1293
+ 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
1294
+ 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777,
1295
+ 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
1296
+ 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,
1297
+ 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
1298
+ 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e,
1299
+ 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
1300
+ 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9,
1301
+ 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
1302
+ 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f,
1303
+ 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
1304
+ 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a
1305
+ ],
1306
+ [
1307
+ 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d,
1308
+ 0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
1309
+ 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65,
1310
+ 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
1311
+ 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9,
1312
+ 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
1313
+ 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d,
1314
+ 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
1315
+ 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc,
1316
+ 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
1317
+ 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908,
1318
+ 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
1319
+ 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124,
1320
+ 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
1321
+ 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908,
1322
+ 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
1323
+ 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b,
1324
+ 0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
1325
+ 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa,
1326
+ 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
1327
+ 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d,
1328
+ 0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
1329
+ 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5,
1330
+ 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
1331
+ 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96,
1332
+ 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
1333
+ 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca,
1334
+ 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
1335
+ 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77,
1336
+ 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
1337
+ 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054,
1338
+ 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
1339
+ 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea,
1340
+ 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
1341
+ 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646,
1342
+ 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
1343
+ 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea,
1344
+ 0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
1345
+ 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e,
1346
+ 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
1347
+ 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd,
1348
+ 0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
1349
+ 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7
1350
+ ],
1351
+ [
1352
+ 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7,
1353
+ 0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
1354
+ 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af,
1355
+ 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
1356
+ 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4,
1357
+ 0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
1358
+ 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec,
1359
+ 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
1360
+ 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332,
1361
+ 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
1362
+ 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58,
1363
+ 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
1364
+ 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22,
1365
+ 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
1366
+ 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60,
1367
+ 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
1368
+ 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99,
1369
+ 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
1370
+ 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74,
1371
+ 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
1372
+ 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3,
1373
+ 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
1374
+ 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979,
1375
+ 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
1376
+ 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa,
1377
+ 0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
1378
+ 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086,
1379
+ 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
1380
+ 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24,
1381
+ 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
1382
+ 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84,
1383
+ 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
1384
+ 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09,
1385
+ 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
1386
+ 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe,
1387
+ 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
1388
+ 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0,
1389
+ 0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
1390
+ 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188,
1391
+ 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
1392
+ 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8,
1393
+ 0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
1394
+ 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0
1395
+ ],
1396
+ [
1397
+ 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742,
1398
+ 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
1399
+ 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79,
1400
+ 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
1401
+ 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a,
1402
+ 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
1403
+ 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,
1404
+ 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
1405
+ 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797,
1406
+ 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
1407
+ 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6,
1408
+ 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
1409
+ 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba,
1410
+ 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
1411
+ 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5,
1412
+ 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
1413
+ 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,
1414
+ 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
1415
+ 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd,
1416
+ 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
1417
+ 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb,
1418
+ 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
1419
+ 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc,
1420
+ 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
1421
+ 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc,
1422
+ 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
1423
+ 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,
1424
+ 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
1425
+ 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a,
1426
+ 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
1427
+ 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b,
1428
+ 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
1429
+ 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e,
1430
+ 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
1431
+ 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623,
1432
+ 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
1433
+ 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,
1434
+ 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
1435
+ 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3,
1436
+ 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
1437
+ 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c,
1438
+ 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
1439
+ 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
1440
+ ]
1576
1441
  ];
1577
-
1578
1442
  //*
1579
1443
  //* This is the default PARRAY
1580
1444
  //*
1581
1445
  Blowfish.prototype.PARRAY = [
1582
- 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0,
1583
- 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
1584
- 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b
1446
+ 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0,
1447
+ 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
1448
+ 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b
1585
1449
  ];
1586
-
1587
1450
  //*
1588
1451
  //* This is the number of rounds the cipher will go
1589
1452
  //*
1590
1453
  Blowfish.prototype.NN = 16;
1591
-
1592
1454
  //*
1593
1455
  //* This function is needed to get rid of problems
1594
1456
  //* with the high-bit getting set. If we don't do
@@ -1596,61 +1458,50 @@ Blowfish.prototype.NN = 16;
1596
1458
  //* equal to ( bb & 0x00FFFFFFFF ) even when they
1597
1459
  //* agree bit-for-bit for the first 32 bits.
1598
1460
  //*
1599
- Blowfish.prototype._clean = function(xx) {
1600
- if (xx < 0) {
1601
- const yy = xx & 0x7FFFFFFF;
1602
- xx = yy + 0x80000000;
1603
- }
1604
- return xx;
1461
+ Blowfish.prototype._clean = function (xx) {
1462
+ if (xx < 0) {
1463
+ const yy = xx & 0x7FFFFFFF;
1464
+ xx = yy + 0x80000000;
1465
+ }
1466
+ return xx;
1605
1467
  };
1606
-
1607
1468
  //*
1608
1469
  //* This is the mixing function that uses the sboxes
1609
1470
  //*
1610
- Blowfish.prototype._F = function(xx) {
1611
- let yy;
1612
-
1613
- const dd = xx & 0x00FF;
1614
- xx >>>= 8;
1615
- const cc = xx & 0x00FF;
1616
- xx >>>= 8;
1617
- const bb = xx & 0x00FF;
1618
- xx >>>= 8;
1619
- const aa = xx & 0x00FF;
1620
-
1621
- yy = this.sboxes[0][aa] + this.sboxes[1][bb];
1622
- yy ^= this.sboxes[2][cc];
1623
- yy += this.sboxes[3][dd];
1624
-
1625
- return yy;
1471
+ Blowfish.prototype._F = function (xx) {
1472
+ let yy;
1473
+ const dd = xx & 0x00FF;
1474
+ xx >>>= 8;
1475
+ const cc = xx & 0x00FF;
1476
+ xx >>>= 8;
1477
+ const bb = xx & 0x00FF;
1478
+ xx >>>= 8;
1479
+ const aa = xx & 0x00FF;
1480
+ yy = this.sboxes[0][aa] + this.sboxes[1][bb];
1481
+ yy ^= this.sboxes[2][cc];
1482
+ yy += this.sboxes[3][dd];
1483
+ return yy;
1626
1484
  };
1627
-
1628
1485
  //*
1629
1486
  //* This method takes an array with two values, left and right
1630
1487
  //* and does NN rounds of Blowfish on them.
1631
1488
  //*
1632
- Blowfish.prototype._encryptBlock = function(vals) {
1633
- let dataL = vals[0];
1634
- let dataR = vals[1];
1635
-
1636
- let ii;
1637
-
1638
- for (ii = 0; ii < this.NN; ++ii) {
1639
- dataL ^= this.parray[ii];
1640
- dataR = this._F(dataL) ^ dataR;
1641
-
1642
- const tmp = dataL;
1643
- dataL = dataR;
1644
- dataR = tmp;
1645
- }
1646
-
1647
- dataL ^= this.parray[this.NN + 0];
1648
- dataR ^= this.parray[this.NN + 1];
1649
-
1650
- vals[0] = this._clean(dataR);
1651
- vals[1] = this._clean(dataL);
1489
+ Blowfish.prototype._encryptBlock = function (vals) {
1490
+ let dataL = vals[0];
1491
+ let dataR = vals[1];
1492
+ let ii;
1493
+ for (ii = 0; ii < this.NN; ++ii) {
1494
+ dataL ^= this.parray[ii];
1495
+ dataR = this._F(dataL) ^ dataR;
1496
+ const tmp = dataL;
1497
+ dataL = dataR;
1498
+ dataR = tmp;
1499
+ }
1500
+ dataL ^= this.parray[this.NN + 0];
1501
+ dataR ^= this.parray[this.NN + 1];
1502
+ vals[0] = this._clean(dataR);
1503
+ vals[1] = this._clean(dataL);
1652
1504
  };
1653
-
1654
1505
  //*
1655
1506
  //* This method takes a vector of numbers and turns them
1656
1507
  //* into long words so that they can be processed by the
@@ -1660,125 +1511,106 @@ Blowfish.prototype._encryptBlock = function(vals) {
1660
1511
  //* instead. That will involve more looping, but it won't require
1661
1512
  //* the F() method to deconstruct the vector.
1662
1513
  //*
1663
- Blowfish.prototype.encryptBlock = function(vector) {
1664
- let ii;
1665
- const vals = [0, 0];
1666
- const off = this.BLOCKSIZE / 2;
1667
- for (ii = 0; ii < this.BLOCKSIZE / 2; ++ii) {
1668
- vals[0] = (vals[0] << 8) | (vector[ii + 0] & 0x00FF);
1669
- vals[1] = (vals[1] << 8) | (vector[ii + off] & 0x00FF);
1670
- }
1671
-
1672
- this._encryptBlock(vals);
1673
-
1674
- const ret = [];
1675
- for (ii = 0; ii < this.BLOCKSIZE / 2; ++ii) {
1676
- ret[ii + 0] = ((vals[0] >>> (24 - 8 * (ii))) & 0x00FF);
1677
- ret[ii + off] = ((vals[1] >>> (24 - 8 * (ii))) & 0x00FF);
1678
- // vals[ 0 ] = ( vals[ 0 ] >>> 8 );
1679
- // vals[ 1 ] = ( vals[ 1 ] >>> 8 );
1680
- }
1681
-
1682
- return ret;
1514
+ Blowfish.prototype.encryptBlock = function (vector) {
1515
+ let ii;
1516
+ const vals = [0, 0];
1517
+ const off = this.BLOCKSIZE / 2;
1518
+ for (ii = 0; ii < this.BLOCKSIZE / 2; ++ii) {
1519
+ vals[0] = (vals[0] << 8) | (vector[ii + 0] & 0x00FF);
1520
+ vals[1] = (vals[1] << 8) | (vector[ii + off] & 0x00FF);
1521
+ }
1522
+ this._encryptBlock(vals);
1523
+ const ret = [];
1524
+ for (ii = 0; ii < this.BLOCKSIZE / 2; ++ii) {
1525
+ ret[ii + 0] = ((vals[0] >>> (24 - 8 * (ii))) & 0x00FF);
1526
+ ret[ii + off] = ((vals[1] >>> (24 - 8 * (ii))) & 0x00FF);
1527
+ // vals[ 0 ] = ( vals[ 0 ] >>> 8 );
1528
+ // vals[ 1 ] = ( vals[ 1 ] >>> 8 );
1529
+ }
1530
+ return ret;
1683
1531
  };
1684
-
1685
1532
  //*
1686
1533
  //* This method takes an array with two values, left and right
1687
1534
  //* and undoes NN rounds of Blowfish on them.
1688
1535
  //*
1689
- Blowfish.prototype._decryptBlock = function(vals) {
1690
- let dataL = vals[0];
1691
- let dataR = vals[1];
1692
-
1693
- let ii;
1694
-
1695
- for (ii = this.NN + 1; ii > 1; --ii) {
1696
- dataL ^= this.parray[ii];
1697
- dataR = this._F(dataL) ^ dataR;
1698
-
1699
- const tmp = dataL;
1700
- dataL = dataR;
1701
- dataR = tmp;
1702
- }
1703
-
1704
- dataL ^= this.parray[1];
1705
- dataR ^= this.parray[0];
1706
-
1707
- vals[0] = this._clean(dataR);
1708
- vals[1] = this._clean(dataL);
1536
+ Blowfish.prototype._decryptBlock = function (vals) {
1537
+ let dataL = vals[0];
1538
+ let dataR = vals[1];
1539
+ let ii;
1540
+ for (ii = this.NN + 1; ii > 1; --ii) {
1541
+ dataL ^= this.parray[ii];
1542
+ dataR = this._F(dataL) ^ dataR;
1543
+ const tmp = dataL;
1544
+ dataL = dataR;
1545
+ dataR = tmp;
1546
+ }
1547
+ dataL ^= this.parray[1];
1548
+ dataR ^= this.parray[0];
1549
+ vals[0] = this._clean(dataR);
1550
+ vals[1] = this._clean(dataL);
1709
1551
  };
1710
-
1711
1552
  //*
1712
1553
  //* This method takes a key array and initializes the
1713
1554
  //* sboxes and parray for this encryption.
1714
1555
  //*
1715
- Blowfish.prototype.init = function(key) {
1716
- let ii;
1717
- let jj = 0;
1718
-
1719
- this.parray = [];
1720
- for (ii = 0; ii < this.NN + 2; ++ii) {
1721
- let data = 0x00000000;
1722
- for (let kk = 0; kk < 4; ++kk) {
1723
- data = (data << 8) | (key[jj] & 0x00FF);
1724
- if (++jj >= key.length) {
1725
- jj = 0;
1726
- }
1556
+ Blowfish.prototype.init = function (key) {
1557
+ let ii;
1558
+ let jj = 0;
1559
+ this.parray = [];
1560
+ for (ii = 0; ii < this.NN + 2; ++ii) {
1561
+ let data = 0x00000000;
1562
+ for (let kk = 0; kk < 4; ++kk) {
1563
+ data = (data << 8) | (key[jj] & 0x00FF);
1564
+ if (++jj >= key.length) {
1565
+ jj = 0;
1566
+ }
1567
+ }
1568
+ this.parray[ii] = this.PARRAY[ii] ^ data;
1727
1569
  }
1728
- this.parray[ii] = this.PARRAY[ii] ^ data;
1729
- }
1730
-
1731
- this.sboxes = [];
1732
- for (ii = 0; ii < 4; ++ii) {
1733
- this.sboxes[ii] = [];
1734
- for (jj = 0; jj < 256; ++jj) {
1735
- this.sboxes[ii][jj] = this.SBOXES[ii][jj];
1570
+ this.sboxes = [];
1571
+ for (ii = 0; ii < 4; ++ii) {
1572
+ this.sboxes[ii] = [];
1573
+ for (jj = 0; jj < 256; ++jj) {
1574
+ this.sboxes[ii][jj] = this.SBOXES[ii][jj];
1575
+ }
1736
1576
  }
1737
- }
1738
-
1739
- const vals = [0x00000000, 0x00000000];
1740
-
1741
- for (ii = 0; ii < this.NN + 2; ii += 2) {
1742
- this._encryptBlock(vals);
1743
- this.parray[ii + 0] = vals[0];
1744
- this.parray[ii + 1] = vals[1];
1745
- }
1746
-
1747
- for (ii = 0; ii < 4; ++ii) {
1748
- for (jj = 0; jj < 256; jj += 2) {
1749
- this._encryptBlock(vals);
1750
- this.sboxes[ii][jj + 0] = vals[0];
1751
- this.sboxes[ii][jj + 1] = vals[1];
1577
+ const vals = [0x00000000, 0x00000000];
1578
+ for (ii = 0; ii < this.NN + 2; ii += 2) {
1579
+ this._encryptBlock(vals);
1580
+ this.parray[ii + 0] = vals[0];
1581
+ this.parray[ii + 1] = vals[1];
1582
+ }
1583
+ for (ii = 0; ii < 4; ++ii) {
1584
+ for (jj = 0; jj < 256; jj += 2) {
1585
+ this._encryptBlock(vals);
1586
+ this.sboxes[ii][jj + 0] = vals[0];
1587
+ this.sboxes[ii][jj + 1] = vals[1];
1588
+ }
1752
1589
  }
1753
- }
1754
1590
  };
1755
-
1756
1591
  // added by Recurity Labs
1757
1592
  function BF(key) {
1758
- this.bf = new Blowfish();
1759
- this.bf.init(key);
1760
-
1761
- this.encrypt = function(block) {
1762
- return this.bf.encryptBlock(block);
1763
- };
1593
+ this.bf = new Blowfish();
1594
+ this.bf.init(key);
1595
+ this.encrypt = function (block) {
1596
+ return this.bf.encryptBlock(block);
1597
+ };
1764
1598
  }
1765
-
1766
1599
  BF.keySize = BF.prototype.keySize = 16;
1767
1600
  BF.blockSize = BF.prototype.blockSize = 8;
1768
1601
 
1769
1602
  /**
1603
+ * @access private
1770
1604
  * This file is needed to dynamic import the legacy ciphers.
1771
1605
  * Separate dynamic imports are not convenient as they result in multiple chunks.
1772
1606
  */
1773
-
1774
-
1775
1607
  // We avoid importing 'enums' as this module is lazy loaded, and doing so could mess up
1776
1608
  // chunking for the lightweight build
1777
1609
  const legacyCiphers = new Map(Object.entries({
1778
- tripledes: TripleDES,
1779
- cast5: CAST5,
1780
- twofish: TF,
1781
- blowfish: BF
1610
+ tripledes: TripleDES,
1611
+ cast5: CAST5,
1612
+ twofish: TF,
1613
+ blowfish: BF
1782
1614
  }));
1783
1615
 
1784
1616
  export { legacyCiphers };