corrade-nucleus-nucleons – Blame information for rev 20

Subversion Repositories:
Rev:
Rev Author Line No. Line
20 office 1 (function(){
2  
3 var C = (typeof window === 'undefined') ? require('./Crypto').Crypto : window.Crypto;
4  
5 // Shortcuts
6 var util = C.util,
7 charenc = C.charenc,
8 UTF8 = charenc.UTF8,
9 Binary = charenc.Binary;
10  
11 // Inner state
12 var x = [],
13 c = [],
14 b;
15  
16 var Rabbit = C.Rabbit = {
17  
18 /**
19 * Public API
20 */
21  
22 encrypt: function (message, password) {
23  
24 var
25  
26 // Convert to bytes
27 m = UTF8.stringToBytes(message),
28  
29 // Generate random IV
30 iv = util.randomBytes(8),
31  
32 // Generate key
33 k = password.constructor == String ?
34 // Derive key from passphrase
35 C.PBKDF2(password, iv, 32, { asBytes: true }) :
36 // else, assume byte array representing cryptographic key
37 password;
38  
39 // Encrypt
40 Rabbit._rabbit(m, k, util.bytesToWords(iv));
41  
42 // Return ciphertext
43 return util.bytesToBase64(iv.concat(m));
44  
45 },
46  
47 decrypt: function (ciphertext, password) {
48  
49 var
50  
51 // Convert to bytes
52 c = util.base64ToBytes(ciphertext),
53  
54 // Separate IV and message
55 iv = c.splice(0, 8),
56  
57 // Generate key
58 k = password.constructor == String ?
59 // Derive key from passphrase
60 C.PBKDF2(password, iv, 32, { asBytes: true }) :
61 // else, assume byte array representing cryptographic key
62 password;
63  
64 // Decrypt
65 Rabbit._rabbit(c, k, util.bytesToWords(iv));
66  
67 // Return plaintext
68 return UTF8.bytesToString(c);
69  
70 },
71  
72  
73 /**
74 * Internal methods
75 */
76  
77 // Encryption/decryption scheme
78 _rabbit: function (m, k, iv) {
79  
80 Rabbit._keysetup(k);
81 if (iv) Rabbit._ivsetup(iv);
82  
83 for (var s = [], i = 0; i < m.length; i++) {
84  
85 if (i % 16 == 0) {
86  
87 // Iterate the system
88 Rabbit._nextstate();
89  
90 // Generate 16 bytes of pseudo-random data
91 s[0] = x[0] ^ (x[5] >>> 16) ^ (x[3] << 16);
92 s[1] = x[2] ^ (x[7] >>> 16) ^ (x[5] << 16);
93 s[2] = x[4] ^ (x[1] >>> 16) ^ (x[7] << 16);
94 s[3] = x[6] ^ (x[3] >>> 16) ^ (x[1] << 16);
95  
96 // Swap endian
97 for (var j = 0; j < 4; j++) {
98 s[j] = ((s[j] << 8) | (s[j] >>> 24)) & 0x00FF00FF |
99 ((s[j] << 24) | (s[j] >>> 8)) & 0xFF00FF00;
100 }
101  
102 // Convert words to bytes
103 for (var b = 120; b >= 0; b -= 8)
104 s[b / 8] = (s[b >>> 5] >>> (24 - b % 32)) & 0xFF;
105  
106 }
107  
108 m[i] ^= s[i % 16];
109  
110 }
111  
112 },
113  
114 // Key setup scheme
115 _keysetup: function (k) {
116  
117 // Generate initial state values
118 x[0] = k[0];
119 x[2] = k[1];
120 x[4] = k[2];
121 x[6] = k[3];
122 x[1] = (k[3] << 16) | (k[2] >>> 16);
123 << 16) | (k[2] >< 16) | (k[2] > x[3] = (k[0] << 16) | (k[3] >>> 16);
124 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] > x[5] = (k[1] << 16) | (k[0] >>> 16);
125 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] > x[7] = (k[2] << 16) | (k[1] >>> 16);
126  
127 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] > // Generate initial counter values
128 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] > c[0] = util.rotl(k[2], 16);
129 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] > c[2] = util.rotl(k[3], 16);
130 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] > c[4] = util.rotl(k[0], 16);
131 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] > c[6] = util.rotl(k[1], 16);
132 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] > c[1] = (k[0] & 0xFFFF0000) | (k[1] & 0xFFFF);
133 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] > c[3] = (k[1] & 0xFFFF0000) | (k[2] & 0xFFFF);
134 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] > c[5] = (k[2] & 0xFFFF0000) | (k[3] & 0xFFFF);
135 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] > c[7] = (k[3] & 0xFFFF0000) | (k[0] & 0xFFFF);
136  
137 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] > // Clear carry bit
138 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] > b = 0;
139  
140 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] > // Iterate the system four times
141 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] > for (var i = 0; i < 4; i++) Rabbit._nextstate();
142  
143 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); // Modify the counters
144 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); for (var i = 0; i < 8; i++) c[i] ^= x[(i + 4) & 7];
145  
146 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; },
147  
148 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; // IV setup scheme
149 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; _ivsetup: function (iv) {
150  
151 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; // Generate four subvectors
152 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; var i0 = util.endian(iv[0]),
153 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; i2 = util.endian(iv[1]),
154 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; i1 = (i0 >>> 16) | (i2 & 0xFFFF0000),
155 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; i3 = (i2 << 16) | (i0 & 0x0000FFFF);
156  
157 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); // Modify counter values
158 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); c[0] ^= i0;
159 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); c[1] ^= i1;
160 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); c[2] ^= i2;
161 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); c[3] ^= i3;
162 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); c[4] ^= i0;
163 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); c[5] ^= i1;
164 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); c[6] ^= i2;
165 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); c[7] ^= i3;
166  
167 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); // Iterate the system four times
168 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); for (var i = 0; i < 4; i++) Rabbit._nextstate();
169  
170 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); },
171  
172 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); // Next-state function
173 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); _nextstate: function () {
174  
175 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); // Save old counter values
176 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); for (var c_old = [], i = 0; i < 8; i++) c_old[i] = c[i];
177  
178 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; // Calculate new counter values
179 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; c[0] = (c[0] + 0x4D34D34D + b) >>> 0;
180 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; c[1] = (c[1] + 0xD34D34D3 + ((c[0] >>> 0) < (c_old[0] >>> 0) ? 1 : 0)) >>> 0;
181 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] > c[2] = (c[2] + 0x34D34D34 + ((c[1] >>> 0) < (c_old[1] >>> 0) ? 1 : 0)) >>> 0;
182 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] > c[3] = (c[3] + 0x4D34D34D + ((c[2] >>> 0) < (c_old[2] >>> 0) ? 1 : 0)) >>> 0;
183 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] > c[4] = (c[4] + 0xD34D34D3 + ((c[3] >>> 0) < (c_old[3] >>> 0) ? 1 : 0)) >>> 0;
184 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] > c[5] = (c[5] + 0x34D34D34 + ((c[4] >>> 0) < (c_old[4] >>> 0) ? 1 : 0)) >>> 0;
185 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] > c[6] = (c[6] + 0x4D34D34D + ((c[5] >>> 0) < (c_old[5] >>> 0) ? 1 : 0)) >>> 0;
186 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] > c[7] = (c[7] + 0xD34D34D3 + ((c[6] >>> 0) < (c_old[6] >>> 0) ? 1 : 0)) >>> 0;
187 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] > b = (c[7] >>> 0) < (c_old[7] >>> 0) ? 1 : 0;
188  
189 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] > // Calculate the g-values
190 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] > for (var g = [], i = 0; i < 8; i++) {
191  
192 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { var gx = (x[i] + c[i]) >>> 0;
193  
194 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { // Construct high and low argument for squaring
195 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { var ga = gx & 0xFFFF,
196 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { gb = gx >>> 16;
197  
198 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { // Calculate high and low result of squaring
199 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb,
200 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { gl = (((gx & 0xFFFF0000) * gx) >>> 0) + (((gx & 0x0000FFFF) * gx) >>> 0) >>> 0;
201  
202 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { // High XOR low
203 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { g[i] = gh ^ gl;
204  
205 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { }
206  
207 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { // Calculate new state values
208 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { x[0] = g[0] + ((g[7] << 16) | (g[7] >>> 16)) + ((g[6] << 16) | (g[6] >>> 16));
209 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { << 16) | (g[7] >< 16) | (g[7] ><< 16) | (g[6] >< 16) | (g[6] > x[1] = g[1] + ((g[0] << 8) | (g[0] >>> 24)) + g[7];
210 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { << 16) | (g[7] >< 16) | (g[7] ><< 16) | (g[6] >< 16) | (g[6] ><< 8) | (g[0] >< 8) | (g[0] > x[2] = g[2] + ((g[1] << 16) | (g[1] >>> 16)) + ((g[0] << 16) | (g[0] >>> 16));
211 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { << 16) | (g[7] >< 16) | (g[7] ><< 16) | (g[6] >< 16) | (g[6] ><< 8) | (g[0] >< 8) | (g[0] ><< 16) | (g[1] >< 16) | (g[1] ><< 16) | (g[0] >< 16) | (g[0] > x[3] = g[3] + ((g[2] << 8) | (g[2] >>> 24)) + g[1];
212 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { << 16) | (g[7] >< 16) | (g[7] ><< 16) | (g[6] >< 16) | (g[6] ><< 8) | (g[0] >< 8) | (g[0] ><< 16) | (g[1] >< 16) | (g[1] ><< 16) | (g[0] >< 16) | (g[0] ><< 8) | (g[2] >< 8) | (g[2] > x[4] = g[4] + ((g[3] << 16) | (g[3] >>> 16)) + ((g[2] << 16) | (g[2] >>> 16));
213 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { << 16) | (g[7] >< 16) | (g[7] ><< 16) | (g[6] >< 16) | (g[6] ><< 8) | (g[0] >< 8) | (g[0] ><< 16) | (g[1] >< 16) | (g[1] ><< 16) | (g[0] >< 16) | (g[0] ><< 8) | (g[2] >< 8) | (g[2] ><< 16) | (g[3] >< 16) | (g[3] ><< 16) | (g[2] >< 16) | (g[2] > x[5] = g[5] + ((g[4] << 8) | (g[4] >>> 24)) + g[3];
214 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { << 16) | (g[7] >< 16) | (g[7] ><< 16) | (g[6] >< 16) | (g[6] ><< 8) | (g[0] >< 8) | (g[0] ><< 16) | (g[1] >< 16) | (g[1] ><< 16) | (g[0] >< 16) | (g[0] ><< 8) | (g[2] >< 8) | (g[2] ><< 16) | (g[3] >< 16) | (g[3] ><< 16) | (g[2] >< 16) | (g[2] ><< 8) | (g[4] >< 8) | (g[4] > x[6] = g[6] + ((g[5] << 16) | (g[5] >>> 16)) + ((g[4] << 16) | (g[4] >>> 16));
215 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { << 16) | (g[7] >< 16) | (g[7] ><< 16) | (g[6] >< 16) | (g[6] ><< 8) | (g[0] >< 8) | (g[0] ><< 16) | (g[1] >< 16) | (g[1] ><< 16) | (g[0] >< 16) | (g[0] ><< 8) | (g[2] >< 8) | (g[2] ><< 16) | (g[3] >< 16) | (g[3] ><< 16) | (g[2] >< 16) | (g[2] ><< 8) | (g[4] >< 8) | (g[4] ><< 16) | (g[5] >< 16) | (g[5] ><< 16) | (g[4] >< 16) | (g[4] > x[7] = g[7] + ((g[6] << 8) | (g[6] >>> 24)) + g[5];
216  
217 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { << 16) | (g[7] >< 16) | (g[7] ><< 16) | (g[6] >< 16) | (g[6] ><< 8) | (g[0] >< 8) | (g[0] ><< 16) | (g[1] >< 16) | (g[1] ><< 16) | (g[0] >< 16) | (g[0] ><< 8) | (g[2] >< 8) | (g[2] ><< 16) | (g[3] >< 16) | (g[3] ><< 16) | (g[2] >< 16) | (g[2] ><< 8) | (g[4] >< 8) | (g[4] ><< 16) | (g[5] >< 16) | (g[5] ><< 16) | (g[4] >< 16) | (g[4] ><< 8) | (g[6] >< 8) | (g[6] > }
218  
219 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { << 16) | (g[7] >< 16) | (g[7] ><< 16) | (g[6] >< 16) | (g[6] ><< 8) | (g[0] >< 8) | (g[0] ><< 16) | (g[1] >< 16) | (g[1] ><< 16) | (g[0] >< 16) | (g[0] ><< 8) | (g[2] >< 8) | (g[2] ><< 16) | (g[3] >< 16) | (g[3] ><< 16) | (g[2] >< 16) | (g[2] ><< 8) | (g[4] >< 8) | (g[4] ><< 16) | (g[5] >< 16) | (g[5] ><< 16) | (g[4] >< 16) | (g[4] ><< 8) | (g[6] >< 8) | (g[6] >};
220  
221 << 16) | (k[2] >< 16) | (k[2] ><< 16) | (k[3] >< 16) | (k[3] ><< 16) | (k[0] >< 16) | (k[0] ><< 16) | (k[1] >< 16) | (k[1] >< 4; i++) Rabbit._nextstate(); < 8; i++) c[i] ^= x[(i + 4) & 7]; << 16) | (i0 & 0x0000FFFF); < 16) | (i0 & 0x0000FFFF); < 4; i++) Rabbit._nextstate(); < 8; i++) c_old[i] = c[i]; < (c_old[0] >< (c_old[1] >< (c_old[2] >< (c_old[3] >< (c_old[4] >< (c_old[5] >< (c_old[6] >< (c_old[7] >< 8; i++) { << 16) | (g[7] >< 16) | (g[7] ><< 16) | (g[6] >< 16) | (g[6] ><< 8) | (g[0] >< 8) | (g[0] ><< 16) | (g[1] >< 16) | (g[1] ><< 16) | (g[0] >< 16) | (g[0] ><< 8) | (g[2] >< 8) | (g[2] ><< 16) | (g[3] >< 16) | (g[3] ><< 16) | (g[2] >< 16) | (g[2] ><< 8) | (g[4] >< 8) | (g[4] ><< 16) | (g[5] >< 16) | (g[5] ><< 16) | (g[4] >< 16) | (g[4] ><< 8) | (g[6] >< 8) | (g[6] >})();