Alcuin 9998 is available as a patch to the genesis, or as a tarball.
This release includes the following changes:
- Packet encryption using a pure Python implementation of Serpent1
- Digest now includes the peer secret in order to allow easy dropping of garbage packets
- Updated config file format - all peer information including port number is now specified in the config file. The --peers command line option has been removed.
1 | diff --git a/README.txt b/README.txt |
2 | index 2d5ff88..5228ab4 100644 |
3 | |
4 | |
5 | |
6 | |
7 | - gossip style message forwarding |
8 | - message deduplication |
9 | -- symmetric encryption of messages |
10 | -- support for broadcasting several important IRC commands |
11 | - over the gossip net. |
12 | - mitigation of hash length extension attacks |
13 | |
14 | GETTING STARTED |
15 | |
16 | -1. Copy config.py.example to config.py (nothing in the config file is |
17 | -used yet, but alcuin will crash if it doesn't exist). |
18 | +1. Copy config.py.example to config.py and update it appropriately. |
19 | 2. Launch alcuin with something like the following command: |
20 | -./alcuin --verbose --port=6668 --peers=206.189.163.145 |
21 | +./alcuin --port=6668 |
22 | |
23 | NOTES FOR DIFF/PATCH N00B5 |
24 | |
25 | diff --git a/lib/server.py b/lib/server.py |
26 | index f2c6206..a609aaf 100644 |
27 | |
28 | |
29 | |
30 | -VERSION = "9999" |
31 | +VERSION = "9998" |
32 | |
33 | import os |
34 | import select |
35 | |
36 | diff --git a/lib/infosec.py b/lib/infosec.py |
37 | index 0807633..255d201 100644 |
38 | |
39 | |
40 | |
41 | serpent = Serpent(self._pad(config.secret, MAX_SECRET_SIZE)) |
42 | padded_message = self._pad(message, MAX_MESSAGE_SIZE) |
43 | ciphertext = binascii.hexlify(serpent.encrypt(padded_message.encode("ascii"))) |
44 | - digest = hashlib.sha512(ciphertext).hexdigest() |
45 | + digest = hashlib.sha512(config.secret + ciphertext).hexdigest() |
46 | print("packing message: %s" % message) |
47 | print("pack digest: %s" % digest) |
48 | print("pack digest length: %d" % len(digest)) |
49 | |
50 | print("received package: %s" % package) |
51 | received_digest = package[0:128] |
52 | ciphertext = package[128:1152] |
53 | - digest = hashlib.sha512(ciphertext).hexdigest() |
54 | + digest = hashlib.sha512(peer_secret + ciphertext).hexdigest() |
55 | print("unpack package length: %d" % len(package)) |
56 | print("unpack sender digest: %s" % received_digest) |
57 | print("unpack sender digest length: %d" % len(received_digest)) |
58 | |
59 | diff --git a/alcuin b/alcuin |
60 | index bbf9ed4..44efc5d 100755 |
61 | |
62 | |
63 | |
64 | from lib.peer import Peer |
65 | from datetime import datetime |
66 | from optparse import OptionParser |
67 | -import config as cfg |
68 | |
69 | |
70 | def main(argv): |
71 | |
72 | help="listen for UDP packets on X;" |
73 | " default: 7778") |
74 | op.add_option( |
75 | - "--peers", |
76 | - metavar="X", |
77 | - help="Broadcast to X (a list of IP addresses separated by comma or whitespace)") |
78 | - op.add_option( |
79 | "--statedir", |
80 | metavar="X", |
81 | help="save persistent channel state (topic, key) in directory X") |
82 | |
83 | options.ports = "6667" |
84 | else: |
85 | options.ports = "6697" |
86 | - if options.peers is None: |
87 | - options.peers = "" |
88 | if options.udp_port is None: |
89 | options.udp_port = 7778 |
90 | else: |
91 | |
92 | except ValueError: |
93 | op.error("bad port: %r" % port) |
94 | options.ports = ports |
95 | - peers = [] |
96 | - for peer in re.split(r"[,\s]+", options.peers): |
97 | - try: |
98 | - peers.append(Peer(peer)) |
99 | - except ValueError: |
100 | - op.error("bad peer ip: %r" % peer) |
101 | - options.peers = peers |
102 | server = Server(options) |
103 | if options.daemon: |
104 | server.daemonize() |
105 | diff --git a/config.py.example b/config.py.example |
106 | index f9adc62..611913e 100644 |
107 | |
108 | |
109 | |
110 | secret = "SEEKRIT" |
111 | -peer_secrets = { |
112 | - "10.0.0.1":"K33P-0U7!" |
113 | -} |
114 | +peers = [ |
115 | + { |
116 | + "name":"schellenberg", |
117 | + "secret":"K33P-0U7!", |
118 | + "address":"10.0.0.1", |
119 | + "port":7778 |
120 | + } |
121 | +] |
122 | diff --git a/lib/client.py b/lib/client.py |
123 | index 97d8a7f..30eb5ed 100644 |
124 | |
125 | |
126 | |
127 | |
128 | def udp_data_received(self, address, data): |
129 | if data: |
130 | - message = self.infosec.unpack(address, data) |
131 | - if(message != None): |
132 | - self.message(message) |
133 | + for peer in self.server.peers: |
134 | + if(address == peer.address): |
135 | + message = self.infosec.unpack(peer, data) |
136 | + if(message != None): |
137 | + self.message(message) |
138 | + return |
139 | + print("Unknown peer address: " % address) |
140 | |
141 | def socket_readable_notification(self): |
142 | try: |
143 | diff --git a/lib/infosec.py b/lib/infosec.py |
144 | index f11b992..0807633 100644 |
145 | |
146 | |
147 | |
148 | print("pack package length: %d" % len(package)) |
149 | return package |
150 | |
151 | - def unpack(self, address, package): |
152 | - peer_secret = config.peer_secrets[address] |
153 | - if(None != peer_secret): |
154 | - serpent = Serpent(self._pad(peer_secret, MAX_SECRET_SIZE)) |
155 | - print("received package: %s" % package) |
156 | - received_digest = package[0:128] |
157 | - ciphertext = package[128:1152] |
158 | - digest = hashlib.sha512(ciphertext).hexdigest() |
159 | - print("unpack package length: %d" % len(package)) |
160 | - print("unpack sender digest: %s" % received_digest) |
161 | - print("unpack sender digest length: %d" % len(received_digest)) |
162 | - print("unpack local digest: %s" % digest) |
163 | - print("unpack local digest length: %d" % len(digest)) |
164 | - print("unpack ciphertext: %s") % ciphertext |
165 | - print("unpack ciphertext length: %d") % len(ciphertext) |
166 | - if(received_digest == digest): |
167 | - return serpent.decrypt(binascii.unhexlify(ciphertext)) |
168 | - else: |
169 | - print("unable to validate package: %s" % package) |
170 | - return None |
171 | + def unpack(self, peer, package): |
172 | + peer_secret = peer.secret |
173 | + serpent = Serpent(self._pad(peer_secret, MAX_SECRET_SIZE)) |
174 | + print("received package: %s" % package) |
175 | + received_digest = package[0:128] |
176 | + ciphertext = package[128:1152] |
177 | + digest = hashlib.sha512(ciphertext).hexdigest() |
178 | + print("unpack package length: %d" % len(package)) |
179 | + print("unpack sender digest: %s" % received_digest) |
180 | + print("unpack sender digest length: %d" % len(received_digest)) |
181 | + print("unpack local digest: %s" % digest) |
182 | + print("unpack local digest length: %d" % len(digest)) |
183 | + print("unpack ciphertext: %s") % ciphertext |
184 | + print("unpack ciphertext length: %d") % len(ciphertext) |
185 | + if(received_digest == digest): |
186 | + return serpent.decrypt(binascii.unhexlify(ciphertext)) |
187 | else: |
188 | - print("received message from unknown peer: %s" % address) |
189 | + print("unable to validate package: %s" % package) |
190 | + return None |
191 | |
192 | def _pad(self, text, size): |
193 | return text.ljust(size) |
194 | diff --git a/lib/peer.py b/lib/peer.py |
195 | index 4a64ed7..fcb0f0c 100644 |
196 | |
197 | |
198 | |
199 | import socket |
200 | from infosec import Infosec |
201 | |
202 | -class Peer(object): |
203 | - def __init__(self, address): |
204 | - self.address = address |
205 | - self.socket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM) |
206 | - self.infosec = Infosec() |
207 | +class Peer(object): |
208 | + def __init__(self, peer_entry): |
209 | + self.name = peer_entry["name"] |
210 | + self.address = peer_entry["address"] |
211 | + self.secret = peer_entry["secret"] |
212 | + self.port = peer_entry["port"] |
213 | + self.socket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM) |
214 | + self.infosec = Infosec() |
215 | |
216 | - def send(self, client, msg): |
217 | - full_message = str.encode(":%s %s" % (client.nickname, msg)) |
218 | - print("sending formatted_msg: %s" % full_message) |
219 | - self.socket.sendto(self.infosec.pack(full_message), (self.address, 7778)) |
220 | + def send(self, client, msg): |
221 | + full_message = str.encode(":%s %s" % (client.nickname, msg)) |
222 | + print("sending formatted_msg: %s" % full_message) |
223 | + self.socket.sendto(self.infosec.pack(full_message), (self.address, self.port)) |
224 | diff --git a/lib/server.py b/lib/server.py |
225 | index a248f1a..f2c6206 100644 |
226 | |
227 | |
228 | |
229 | from lib.infosec import Infosec |
230 | from lib.peer import Peer |
231 | from funcs import * |
232 | +import config as cfg |
233 | |
234 | class Server(object): |
235 | def __init__(self, options): |
236 | self.ports = options.ports |
237 | - self.peers = options.peers |
238 | self.udp_port = options.udp_port |
239 | self.password = options.password |
240 | self.ssl_pem_file = options.ssl_pem_file |
241 | |
242 | self.channels = {} # irc_lower(Channel name) --> Channel instance. |
243 | self.clients = {} # Socket --> Client instance..peers = "" |
244 | self.nicknames = {} # irc_lower(Nickname) --> Client instance. |
245 | + self.peers = [] |
246 | + for peer_entry in cfg.peers: |
247 | + self.peers.append(Peer(peer_entry)) |
248 | if self.logdir: |
249 | create_directory(self.logdir) |
250 | if self.statedir: |
251 | |
252 | diff --git a/lib/client.py b/lib/client.py |
253 | index cfc5331..97d8a7f 100644 |
254 | |
255 | |
256 | |
257 | except KeyError: |
258 | self.reply("421 %s %s :Unknown command" % (self.nickname, command)) |
259 | |
260 | - def udp_data_received(self, data): |
261 | + def udp_data_received(self, address, data): |
262 | if data: |
263 | - message = self.infosec.unpack(data) |
264 | + message = self.infosec.unpack(address, data) |
265 | if(message != None): |
266 | self.message(message) |
267 | |
268 | diff --git a/lib/infosec.py b/lib/infosec.py |
269 | index 6e87ca6..f11b992 100644 |
270 | |
271 | |
272 | |
273 | import hashlib |
274 | -PACKET_SIZE = 1024 |
275 | +import lib.serpent |
276 | + |
277 | +from lib.serpent import Serpent |
278 | +import config |
279 | +import binascii |
280 | +PACKET_SIZE = 1152 |
281 | MAX_MESSAGE_SIZE = 512 |
282 | +MAX_SECRET_SIZE = 24 |
283 | |
284 | class Infosec(object): |
285 | #def __init__(self): |
286 | # do nothing |
287 | |
288 | def pack(self, message): |
289 | - digest = hashlib.sha512(self._pad(message)).hexdigest() |
290 | - return digest + message |
291 | + serpent = Serpent(self._pad(config.secret, MAX_SECRET_SIZE)) |
292 | + padded_message = self._pad(message, MAX_MESSAGE_SIZE) |
293 | + ciphertext = binascii.hexlify(serpent.encrypt(padded_message.encode("ascii"))) |
294 | + digest = hashlib.sha512(ciphertext).hexdigest() |
295 | + print("packing message: %s" % message) |
296 | + print("pack digest: %s" % digest) |
297 | + print("pack digest length: %d" % len(digest)) |
298 | + print("pack ciphertext: %s" % ciphertext) |
299 | + print("pack ciphertext length: %d" % len(ciphertext)) |
300 | + package = digest + ciphertext |
301 | + print("pack package length: %d" % len(package)) |
302 | + return package |
303 | |
304 | - def unpack(self, package): |
305 | - print("received package: %s" % package) |
306 | - received_digest = package[0:128] |
307 | - message = package[128:1023] |
308 | - digest = hashlib.sha512(self._pad(message)).hexdigest() |
309 | - print("received_digest: %s" % received_digest) |
310 | - print("digest: %s" % digest) |
311 | - print("message: %s") % message |
312 | - if(received_digest == digest): |
313 | - return message |
314 | + def unpack(self, address, package): |
315 | + peer_secret = config.peer_secrets[address] |
316 | + if(None != peer_secret): |
317 | + serpent = Serpent(self._pad(peer_secret, MAX_SECRET_SIZE)) |
318 | + print("received package: %s" % package) |
319 | + received_digest = package[0:128] |
320 | + ciphertext = package[128:1152] |
321 | + digest = hashlib.sha512(ciphertext).hexdigest() |
322 | + print("unpack package length: %d" % len(package)) |
323 | + print("unpack sender digest: %s" % received_digest) |
324 | + print("unpack sender digest length: %d" % len(received_digest)) |
325 | + print("unpack local digest: %s" % digest) |
326 | + print("unpack local digest length: %d" % len(digest)) |
327 | + print("unpack ciphertext: %s") % ciphertext |
328 | + print("unpack ciphertext length: %d") % len(ciphertext) |
329 | + if(received_digest == digest): |
330 | + return serpent.decrypt(binascii.unhexlify(ciphertext)) |
331 | + else: |
332 | + print("unable to validate package: %s" % package) |
333 | + return None |
334 | else: |
335 | - print("unable to validate package: %s" % package) |
336 | - return None |
337 | + print("received message from unknown peer: %s" % address) |
338 | |
339 | - def _pad(self, text): |
340 | - return str(text.ljust(MAX_MESSAGE_SIZE)).encode("ascii") |
341 | + def _pad(self, text, size): |
342 | + return text.ljust(size) |
343 | |
344 | diff --git a/lib/serpent.py b/lib/serpent.py |
345 | new file mode 100644 |
346 | index 0000000..c7c9f83 |
347 | |
348 | |
349 | |
350 | +## serpent.py - pure Python implementation of the Serpent algorithm. |
351 | +## Bjorn Edstrom <be@bjrn.se> 13 december 2007. |
352 | +## |
353 | +## Copyrights |
354 | +## ========== |
355 | +## |
356 | +## This code is a derived from an implementation by Dr Brian Gladman |
357 | +## (gladman@seven77.demon.co.uk) which is subject to the following license. |
358 | +## This Python implementation is not subject to any other license. |
359 | +## |
360 | +##/* This is an independent implementation of the encryption algorithm: |
361 | +## * |
362 | +## * Serpent by Ross Anderson, Eli Biham and Lars Knudsen |
363 | +## * |
364 | +## * which is a candidate algorithm in the Advanced Encryption Standard |
365 | +## * programme of the US National Institute of Standards and Technology |
366 | +## * |
367 | +## * Copyright in this implementation is held by Dr B R Gladman but I |
368 | +## * hereby give permission for its free direct or derivative use subject |
369 | +## * to acknowledgment of its origin and compliance with any conditions |
370 | +## * that the originators of the algorithm place on its exploitation. |
371 | +## * |
372 | +## * Dr Brian Gladman (gladman@seven77.demon.co.uk) 14th January 1999 |
373 | +## */ |
374 | +## |
375 | +## The above copyright notice must not be removed. |
376 | +## |
377 | +## Information |
378 | +## =========== |
379 | +## |
380 | +## Anyone thinking of using this code should reconsider. It's slow. |
381 | +## Try python-mcrypt instead. In case a faster library is not installed |
382 | +## on the target system, this code can be used as a portable fallback. |
383 | + |
384 | +import binascii |
385 | +import base64 |
386 | + |
387 | +block_size = 16 |
388 | +key_size = 32 |
389 | + |
390 | +class Serpent: |
391 | + |
392 | + def __init__(self, key=None): |
393 | + """Serpent.""" |
394 | + |
395 | + if key: |
396 | + self.set_key(key) |
397 | + |
398 | + |
399 | + def set_key(self, key): |
400 | + """Init.""" |
401 | + |
402 | + key_len = len(key) |
403 | + if key_len % 4: |
404 | + # XXX: add padding? |
405 | + raise KeyError, "key not a multiple of 4" |
406 | + if key_len > 32: |
407 | + # XXX: prune? |
408 | + raise KeyError, "key_len > 32" |
409 | + |
410 | + self.key_context = [0] * 140 |
411 | + |
412 | + key_word32 = [0] * 32 |
413 | + i = 0 |
414 | + while key: |
415 | + key_word32[i] = struct.unpack("<L", key[0:4])[0] |
416 | + key = key[4:] |
417 | + i += 1 |
418 | + |
419 | + set_key(self.key_context, key_word32, key_len) |
420 | + #print(map(hex,self.key_context)) |
421 | + |
422 | + |
423 | + def decrypt(self, block): |
424 | + """Decrypt blocks.""" |
425 | + |
426 | + if len(block) % 16: |
427 | + raise ValueError, "block size must be a multiple of 16" |
428 | + |
429 | + plaintext = '' |
430 | + |
431 | + while block: |
432 | + a, b, c, d = struct.unpack("<4L", block[:16]) |
433 | + temp = [a, b, c, d] |
434 | + decrypt(self.key_context, temp) |
435 | + plaintext += struct.pack("<4L", *temp) |
436 | + block = block[16:] |
437 | + |
438 | + return plaintext |
439 | + |
440 | + |
441 | + def encrypt(self, block): |
442 | + """Encrypt blocks.""" |
443 | + |
444 | + if len(block) % 16: |
445 | + raise ValueError, "block size must be a multiple of 16" |
446 | + |
447 | + ciphertext = '' |
448 | + |
449 | + while block: |
450 | + a, b, c, d = struct.unpack("<4L", block[0:16]) |
451 | + temp = [a, b, c, d] |
452 | + encrypt(self.key_context, temp) |
453 | + ciphertext += struct.pack("<4L", *temp) |
454 | + block = block[16:] |
455 | + |
456 | + return ciphertext |
457 | + |
458 | + |
459 | + def get_name(self): |
460 | + """Return the name of the cipher.""" |
461 | + |
462 | + return "Serpent" |
463 | + |
464 | + |
465 | + def get_block_size(self): |
466 | + """Get cipher block size in bytes.""" |
467 | + |
468 | + return 16 |
469 | + |
470 | + |
471 | + def get_key_size(self): |
472 | + """Get cipher key size in bytes.""" |
473 | + |
474 | + return 32 |
475 | + |
476 | + |
477 | +# |
478 | +# Private. |
479 | +# |
480 | + |
481 | +import struct |
482 | +import sys |
483 | + |
484 | +WORD_BIGENDIAN = 0 |
485 | +if sys.byteorder == 'big': |
486 | + WORD_BIGENDIAN = 1 |
487 | + |
488 | +def rotr32(x, n): |
489 | + return (x >> n) | ((x << (32 - n)) & 0xFFFFFFFF) |
490 | + |
491 | +def rotl32(x, n): |
492 | + return ((x << n) & 0xFFFFFFFF) | (x >> (32 - n)) |
493 | + |
494 | +def byteswap32(x): |
495 | + return ((x & 0xff) << 24) | (((x >> & 0xff) << 16) | \ |
496 | + (((x >> 16) & 0xff) << | ((x >> 24) & 0xff) |
497 | + |
498 | +def set_key(l_key, key, key_len): |
499 | + key_len *= 8 |
500 | + if key_len > 256: |
501 | + return False |
502 | + |
503 | + i = 0 |
504 | + lk = (key_len + 31) / 32 |
505 | + while i < lk: |
506 | + l_key[i] = key[i] |
507 | + if WORD_BIGENDIAN: |
508 | + l_key[i] = byteswap32(key[i]) |
509 | + i += 1 |
510 | + |
511 | + if key_len < 256: |
512 | + while i < 8: |
513 | + l_key[i] = 0 |
514 | + i += 1 |
515 | + i = key_len / 32 |
516 | + lk = 1 << (key_len % 32) |
517 | + l_key[i] = (l_key[i] & (lk - 1)) | lk |
518 | + for i in xrange(132): |
519 | + lk = l_key[i] ^ l_key[i + 3] ^ l_key[i + 5] ^ l_key[i + 7] ^ 0x9e3779b9 ^ i |
520 | + l_key[i + 8] = ((lk << 11) & 0xFFFFFFFF) | (lk >> 21) |
521 | + |
522 | + key = l_key |
523 | + # serpent_generate.py |
524 | + a = key[4 * 0 + 8] |
525 | + b = key[4 * 0 + 9] |
526 | + c = key[4 * 0 + 10] |
527 | + d = key[4 * 0 + 11] |
528 | + e = 0 |
529 | + f = 0 |
530 | + g = 0 |
531 | + h = 0 |
532 | + t1 = 0 |
533 | + t2 = 0 |
534 | + t3 = 0 |
535 | + t4 = 0 |
536 | + t5 = 0 |
537 | + t6 = 0 |
538 | + t7 = 0 |
539 | + t8 = 0 |
540 | + t9 = 0 |
541 | + t10 = 0 |
542 | + t11 = 0 |
543 | + t12 = 0 |
544 | + t13 = 0 |
545 | + t14 = 0 |
546 | + t15 = 0 |
547 | + t16 = 0 |
548 | + t1 = a ^ c; |
549 | + t2 = d ^ t1; |
550 | + t3 = a & t2; |
551 | + t4 = d ^ t3; |
552 | + t5 = b & t4; |
553 | + g = t2 ^ t5; |
554 | + t7 = a | g; |
555 | + t8 = b | d; |
556 | + t11 = a | d; |
557 | + t9 = t4 & t7; |
558 | + f = t8 ^ t9; |
559 | + t12 = b ^ t11; |
560 | + t13 = g ^ t9; |
561 | + t15 = t3 ^ t8; |
562 | + h = t12 ^ t13; |
563 | + t16 = c & t15; |
564 | + e = t12 ^ t16 |
565 | + key[4 * 0 + 8] = e |
566 | + key[4 * 0 + 9] = f |
567 | + key[4 * 0 + 10] = g |
568 | + key[4 * 0 + 11] = h |
569 | + a = key[4 * 1 + 8] |
570 | + b = key[4 * 1 + 9] |
571 | + c = key[4 * 1 + 10] |
572 | + d = key[4 * 1 + 11] |
573 | + t1 = (~a) % 0x100000000; |
574 | + t2 = b ^ d; |
575 | + t3 = c & t1; |
576 | + t13 = d | t1; |
577 | + e = t2 ^ t3; |
578 | + t5 = c ^ t1; |
579 | + t6 = c ^ e; |
580 | + t7 = b & t6; |
581 | + t10 = e | t5; |
582 | + h = t5 ^ t7; |
583 | + t9 = d | t7; |
584 | + t11 = t9 & t10; |
585 | + t14 = t2 ^ h; |
586 | + g = a ^ t11; |
587 | + t15 = g ^ t13; |
588 | + f = t14 ^ t15 |
589 | + key[4 * 1 + 8] = e |
590 | + key[4 * 1 + 9] = f |
591 | + key[4 * 1 + 10] = g |
592 | + key[4 * 1 + 11] = h |
593 | + a = key[4 * 2 + 8] |
594 | + b = key[4 * 2 + 9] |
595 | + c = key[4 * 2 + 10] |
596 | + d = key[4 * 2 + 11] |
597 | + t1 = (~a) % 0x100000000; |
598 | + t2 = b ^ t1; |
599 | + t3 = a | t2; |
600 | + t4 = d | t2; |
601 | + t5 = c ^ t3; |
602 | + g = d ^ t5; |
603 | + t7 = b ^ t4; |
604 | + t8 = t2 ^ g; |
605 | + t9 = t5 & t7; |
606 | + h = t8 ^ t9; |
607 | + t11 = t5 ^ t7; |
608 | + f = h ^ t11; |
609 | + t13 = t8 & t11; |
610 | + e = t5 ^ t13 |
611 | + key[4 * 2 + 8] = e |
612 | + key[4 * 2 + 9] = f |
613 | + key[4 * 2 + 10] = g |
614 | + key[4 * 2 + 11] = h |
615 | + a = key[4 * 3 + 8] |
616 | + b = key[4 * 3 + 9] |
617 | + c = key[4 * 3 + 10] |
618 | + d = key[4 * 3 + 11] |
619 | + t1 = a ^ d; |
620 | + t2 = a & d; |
621 | + t3 = c ^ t1; |
622 | + t6 = b & t1; |
623 | + t4 = b ^ t3; |
624 | + t10 = (~t3) % 0x100000000; |
625 | + h = t2 ^ t4; |
626 | + t7 = a ^ t6; |
627 | + t14 = (~t7) % 0x100000000; |
628 | + t8 = c | t7; |
629 | + t11 = t3 ^ t7; |
630 | + g = t4 ^ t8; |
631 | + t12 = h & t11; |
632 | + f = t10 ^ t12; |
633 | + e = t12 ^ t14 |
634 | + key[4 * 3 + 8] = e |
635 | + key[4 * 3 + 9] = f |
636 | + key[4 * 3 + 10] = g |
637 | + key[4 * 3 + 11] = h |
638 | + a = key[4 * 4 + 8] |
639 | + b = key[4 * 4 + 9] |
640 | + c = key[4 * 4 + 10] |
641 | + d = key[4 * 4 + 11] |
642 | + t1 = (~c) % 0x100000000; |
643 | + t2 = b ^ c; |
644 | + t3 = b | t1; |
645 | + t4 = d ^ t3; |
646 | + t5 = a & t4; |
647 | + t7 = a ^ d; |
648 | + h = t2 ^ t5; |
649 | + t8 = b ^ t5; |
650 | + t9 = t2 | t8; |
651 | + t11 = d & t3; |
652 | + f = t7 ^ t9; |
653 | + t12 = t5 ^ f; |
654 | + t15 = t1 | t4; |
655 | + t13 = h & t12; |
656 | + g = t11 ^ t13; |
657 | + t16 = t12 ^ g; |
658 | + e = t15 ^ t16 |
659 | + key[4 * 4 + 8] = e |
660 | + key[4 * 4 + 9] = f |
661 | + key[4 * 4 + 10] = g |
662 | + key[4 * 4 + 11] = h |
663 | + a = key[4 * 5 + 8] |
664 | + b = key[4 * 5 + 9] |
665 | + c = key[4 * 5 + 10] |
666 | + d = key[4 * 5 + 11] |
667 | + t1 = (~a) % 0x100000000; |
668 | + t2 = a ^ d; |
669 | + t3 = b ^ t2; |
670 | + t4 = t1 | t2; |
671 | + t5 = c ^ t4; |
672 | + f = b ^ t5; |
673 | + t13 = (~t5) % 0x100000000; |
674 | + t7 = t2 | f; |
675 | + t8 = d ^ t7; |
676 | + t9 = t5 & t8; |
677 | + g = t3 ^ t9; |
678 | + t11 = t5 ^ t8; |
679 | + e = g ^ t11; |
680 | + t14 = t3 & t11; |
681 | + h = t13 ^ t14 |
682 | + key[4 * 5 + 8] = e |
683 | + key[4 * 5 + 9] = f |
684 | + key[4 * 5 + 10] = g |
685 | + key[4 * 5 + 11] = h |
686 | + a = key[4 * 6 + 8] |
687 | + b = key[4 * 6 + 9] |
688 | + c = key[4 * 6 + 10] |
689 | + d = key[4 * 6 + 11] |
690 | + t1 = (~a) % 0x100000000; |
691 | + t2 = a ^ b; |
692 | + t3 = a ^ d; |
693 | + t4 = c ^ t1; |
694 | + t5 = t2 | t3; |
695 | + e = t4 ^ t5; |
696 | + t7 = d & e; |
697 | + t8 = t2 ^ e; |
698 | + t10 = t1 | e; |
699 | + f = t7 ^ t8; |
700 | + t11 = t2 | t7; |
701 | + t12 = t3 ^ t10; |
702 | + t14 = b ^ t7; |
703 | + g = t11 ^ t12; |
704 | + t15 = f & t12; |
705 | + h = t14 ^ t15 |
706 | + key[4 * 6 + 8] = e |
707 | + key[4 * 6 + 9] = f |
708 | + key[4 * 6 + 10] = g |
709 | + key[4 * 6 + 11] = h |
710 | + a = key[4 * 7 + 8] |
711 | + b = key[4 * 7 + 9] |
712 | + c = key[4 * 7 + 10] |
713 | + d = key[4 * 7 + 11] |
714 | + t1 = a ^ d; |
715 | + t2 = d & t1; |
716 | + t3 = c ^ t2; |
717 | + t4 = b | t3; |
718 | + h = t1 ^ t4; |
719 | + t6 = (~b) % 0x100000000; |
720 | + t7 = t1 | t6; |
721 | + e = t3 ^ t7; |
722 | + t9 = a & e; |
723 | + t10 = t1 ^ t6; |
724 | + t11 = t4 & t10; |
725 | + g = t9 ^ t11; |
726 | + t13 = a ^ t3; |
727 | + t14 = t10 & g; |
728 | + f = t13 ^ t14 |
729 | + key[4 * 7 + 8] = e |
730 | + key[4 * 7 + 9] = f |
731 | + key[4 * 7 + 10] = g |
732 | + key[4 * 7 + 11] = h |
733 | + a = key[4 * 8 + 8] |
734 | + b = key[4 * 8 + 9] |
735 | + c = key[4 * 8 + 10] |
736 | + d = key[4 * 8 + 11] |
737 | + t1 = a ^ c; |
738 | + t2 = d ^ t1; |
739 | + t3 = a & t2; |
740 | + t4 = d ^ t3; |
741 | + t5 = b & t4; |
742 | + g = t2 ^ t5; |
743 | + t7 = a | g; |
744 | + t8 = b | d; |
745 | + t11 = a | d; |
746 | + t9 = t4 & t7; |
747 | + f = t8 ^ t9; |
748 | + t12 = b ^ t11; |
749 | + t13 = g ^ t9; |
750 | + t15 = t3 ^ t8; |
751 | + h = t12 ^ t13; |
752 | + t16 = c & t15; |
753 | + e = t12 ^ t16 |
754 | + key[4 * 8 + 8] = e |
755 | + key[4 * 8 + 9] = f |
756 | + key[4 * 8 + 10] = g |
757 | + key[4 * 8 + 11] = h |
758 | + a = key[4 * 9 + 8] |
759 | + b = key[4 * 9 + 9] |
760 | + c = key[4 * 9 + 10] |
761 | + d = key[4 * 9 + 11] |
762 | + t1 = (~a) % 0x100000000; |
763 | + t2 = b ^ d; |
764 | + t3 = c & t1; |
765 | + t13 = d | t1; |
766 | + e = t2 ^ t3; |
767 | + t5 = c ^ t1; |
768 | + t6 = c ^ e; |
769 | + t7 = b & t6; |
770 | + t10 = e | t5; |
771 | + h = t5 ^ t7; |
772 | + t9 = d | t7; |
773 | + t11 = t9 & t10; |
774 | + t14 = t2 ^ h; |
775 | + g = a ^ t11; |
776 | + t15 = g ^ t13; |
777 | + f = t14 ^ t15 |
778 | + key[4 * 9 + 8] = e |
779 | + key[4 * 9 + 9] = f |
780 | + key[4 * 9 + 10] = g |
781 | + key[4 * 9 + 11] = h |
782 | + a = key[4 * 10 + 8] |
783 | + b = key[4 * 10 + 9] |
784 | + c = key[4 * 10 + 10] |
785 | + d = key[4 * 10 + 11] |
786 | + t1 = (~a) % 0x100000000; |
787 | + t2 = b ^ t1; |
788 | + t3 = a | t2; |
789 | + t4 = d | t2; |
790 | + t5 = c ^ t3; |
791 | + g = d ^ t5; |
792 | + t7 = b ^ t4; |
793 | + t8 = t2 ^ g; |
794 | + t9 = t5 & t7; |
795 | + h = t8 ^ t9; |
796 | + t11 = t5 ^ t7; |
797 | + f = h ^ t11; |
798 | + t13 = t8 & t11; |
799 | + e = t5 ^ t13 |
800 | + key[4 * 10 + 8] = e |
801 | + key[4 * 10 + 9] = f |
802 | + key[4 * 10 + 10] = g |
803 | + key[4 * 10 + 11] = h |
804 | + a = key[4 * 11 + 8] |
805 | + b = key[4 * 11 + 9] |
806 | + c = key[4 * 11 + 10] |
807 | + d = key[4 * 11 + 11] |
808 | + t1 = a ^ d; |
809 | + t2 = a & d; |
810 | + t3 = c ^ t1; |
811 | + t6 = b & t1; |
812 | + t4 = b ^ t3; |
813 | + t10 = (~t3) % 0x100000000; |
814 | + h = t2 ^ t4; |
815 | + t7 = a ^ t6; |
816 | + t14 = (~t7) % 0x100000000; |
817 | + t8 = c | t7; |
818 | + t11 = t3 ^ t7; |
819 | + g = t4 ^ t8; |
820 | + t12 = h & t11; |
821 | + f = t10 ^ t12; |
822 | + e = t12 ^ t14 |
823 | + key[4 * 11 + 8] = e |
824 | + key[4 * 11 + 9] = f |
825 | + key[4 * 11 + 10] = g |
826 | + key[4 * 11 + 11] = h |
827 | + a = key[4 * 12 + 8] |
828 | + b = key[4 * 12 + 9] |
829 | + c = key[4 * 12 + 10] |
830 | + d = key[4 * 12 + 11] |
831 | + t1 = (~c) % 0x100000000; |
832 | + t2 = b ^ c; |
833 | + t3 = b | t1; |
834 | + t4 = d ^ t3; |
835 | + t5 = a & t4; |
836 | + t7 = a ^ d; |
837 | + h = t2 ^ t5; |
838 | + t8 = b ^ t5; |
839 | + t9 = t2 | t8; |
840 | + t11 = d & t3; |
841 | + f = t7 ^ t9; |
842 | + t12 = t5 ^ f; |
843 | + t15 = t1 | t4; |
844 | + t13 = h & t12; |
845 | + g = t11 ^ t13; |
846 | + t16 = t12 ^ g; |
847 | + e = t15 ^ t16 |
848 | + key[4 * 12 + 8] = e |
849 | + key[4 * 12 + 9] = f |
850 | + key[4 * 12 + 10] = g |
851 | + key[4 * 12 + 11] = h |
852 | + a = key[4 * 13 + 8] |
853 | + b = key[4 * 13 + 9] |
854 | + c = key[4 * 13 + 10] |
855 | + d = key[4 * 13 + 11] |
856 | + t1 = (~a) % 0x100000000; |
857 | + t2 = a ^ d; |
858 | + t3 = b ^ t2; |
859 | + t4 = t1 | t2; |
860 | + t5 = c ^ t4; |
861 | + f = b ^ t5; |
862 | + t13 = (~t5) % 0x100000000; |
863 | + t7 = t2 | f; |
864 | + t8 = d ^ t7; |
865 | + t9 = t5 & t8; |
866 | + g = t3 ^ t9; |
867 | + t11 = t5 ^ t8; |
868 | + e = g ^ t11; |
869 | + t14 = t3 & t11; |
870 | + h = t13 ^ t14 |
871 | + key[4 * 13 + 8] = e |
872 | + key[4 * 13 + 9] = f |
873 | + key[4 * 13 + 10] = g |
874 | + key[4 * 13 + 11] = h |
875 | + a = key[4 * 14 + 8] |
876 | + b = key[4 * 14 + 9] |
877 | + c = key[4 * 14 + 10] |
878 | + d = key[4 * 14 + 11] |
879 | + t1 = (~a) % 0x100000000; |
880 | + t2 = a ^ b; |
881 | + t3 = a ^ d; |
882 | + t4 = c ^ t1; |
883 | + t5 = t2 | t3; |
884 | + e = t4 ^ t5; |
885 | + t7 = d & e; |
886 | + t8 = t2 ^ e; |
887 | + t10 = t1 | e; |
888 | + f = t7 ^ t8; |
889 | + t11 = t2 | t7; |
890 | + t12 = t3 ^ t10; |
891 | + t14 = b ^ t7; |
892 | + g = t11 ^ t12; |
893 | + t15 = f & t12; |
894 | + h = t14 ^ t15 |
895 | + key[4 * 14 + 8] = e |
896 | + key[4 * 14 + 9] = f |
897 | + key[4 * 14 + 10] = g |
898 | + key[4 * 14 + 11] = h |
899 | + a = key[4 * 15 + 8] |
900 | + b = key[4 * 15 + 9] |
901 | + c = key[4 * 15 + 10] |
902 | + d = key[4 * 15 + 11] |
903 | + t1 = a ^ d; |
904 | + t2 = d & t1; |
905 | + t3 = c ^ t2; |
906 | + t4 = b | t3; |
907 | + h = t1 ^ t4; |
908 | + t6 = (~b) % 0x100000000; |
909 | + t7 = t1 | t6; |
910 | + e = t3 ^ t7; |
911 | + t9 = a & e; |
912 | + t10 = t1 ^ t6; |
913 | + t11 = t4 & t10; |
914 | + g = t9 ^ t11; |
915 | + t13 = a ^ t3; |
916 | + t14 = t10 & g; |
917 | + f = t13 ^ t14 |
918 | + key[4 * 15 + 8] = e |
919 | + key[4 * 15 + 9] = f |
920 | + key[4 * 15 + 10] = g |
921 | + key[4 * 15 + 11] = h |
922 | + a = key[4 * 16 + 8] |
923 | + b = key[4 * 16 + 9] |
924 | + c = key[4 * 16 + 10] |
925 | + d = key[4 * 16 + 11] |
926 | + t1 = a ^ c; |
927 | + t2 = d ^ t1; |
928 | + t3 = a & t2; |
929 | + t4 = d ^ t3; |
930 | + t5 = b & t4; |
931 | + g = t2 ^ t5; |
932 | + t7 = a | g; |
933 | + t8 = b | d; |
934 | + t11 = a | d; |
935 | + t9 = t4 & t7; |
936 | + f = t8 ^ t9; |
937 | + t12 = b ^ t11; |
938 | + t13 = g ^ t9; |
939 | + t15 = t3 ^ t8; |
940 | + h = t12 ^ t13; |
941 | + t16 = c & t15; |
942 | + e = t12 ^ t16 |
943 | + key[4 * 16 + 8] = e |
944 | + key[4 * 16 + 9] = f |
945 | + key[4 * 16 + 10] = g |
946 | + key[4 * 16 + 11] = h |
947 | + a = key[4 * 17 + 8] |
948 | + b = key[4 * 17 + 9] |
949 | + c = key[4 * 17 + 10] |
950 | + d = key[4 * 17 + 11] |
951 | + t1 = (~a) % 0x100000000; |
952 | + t2 = b ^ d; |
953 | + t3 = c & t1; |
954 | + t13 = d | t1; |
955 | + e = t2 ^ t3; |
956 | + t5 = c ^ t1; |
957 | + t6 = c ^ e; |
958 | + t7 = b & t6; |
959 | + t10 = e | t5; |
960 | + h = t5 ^ t7; |
961 | + t9 = d | t7; |
962 | + t11 = t9 & t10; |
963 | + t14 = t2 ^ h; |
964 | + g = a ^ t11; |
965 | + t15 = g ^ t13; |
966 | + f = t14 ^ t15 |
967 | + key[4 * 17 + 8] = e |
968 | + key[4 * 17 + 9] = f |
969 | + key[4 * 17 + 10] = g |
970 | + key[4 * 17 + 11] = h |
971 | + a = key[4 * 18 + 8] |
972 | + b = key[4 * 18 + 9] |
973 | + c = key[4 * 18 + 10] |
974 | + d = key[4 * 18 + 11] |
975 | + t1 = (~a) % 0x100000000; |
976 | + t2 = b ^ t1; |
977 | + t3 = a | t2; |
978 | + t4 = d | t2; |
979 | + t5 = c ^ t3; |
980 | + g = d ^ t5; |
981 | + t7 = b ^ t4; |
982 | + t8 = t2 ^ g; |
983 | + t9 = t5 & t7; |
984 | + h = t8 ^ t9; |
985 | + t11 = t5 ^ t7; |
986 | + f = h ^ t11; |
987 | + t13 = t8 & t11; |
988 | + e = t5 ^ t13 |
989 | + key[4 * 18 + 8] = e |
990 | + key[4 * 18 + 9] = f |
991 | + key[4 * 18 + 10] = g |
992 | + key[4 * 18 + 11] = h |
993 | + a = key[4 * 19 + 8] |
994 | + b = key[4 * 19 + 9] |
995 | + c = key[4 * 19 + 10] |
996 | + d = key[4 * 19 + 11] |
997 | + t1 = a ^ d; |
998 | + t2 = a & d; |
999 | + t3 = c ^ t1; |
1000 | + t6 = b & t1; |
1001 | + t4 = b ^ t3; |
1002 | + t10 = (~t3) % 0x100000000; |
1003 | + h = t2 ^ t4; |
1004 | + t7 = a ^ t6; |
1005 | + t14 = (~t7) % 0x100000000; |
1006 | + t8 = c | t7; |
1007 | + t11 = t3 ^ t7; |
1008 | + g = t4 ^ t8; |
1009 | + t12 = h & t11; |
1010 | + f = t10 ^ t12; |
1011 | + e = t12 ^ t14 |
1012 | + key[4 * 19 + 8] = e |
1013 | + key[4 * 19 + 9] = f |
1014 | + key[4 * 19 + 10] = g |
1015 | + key[4 * 19 + 11] = h |
1016 | + a = key[4 * 20 + 8] |
1017 | + b = key[4 * 20 + 9] |
1018 | + c = key[4 * 20 + 10] |
1019 | + d = key[4 * 20 + 11] |
1020 | + t1 = (~c) % 0x100000000; |
1021 | + t2 = b ^ c; |
1022 | + t3 = b | t1; |
1023 | + t4 = d ^ t3; |
1024 | + t5 = a & t4; |
1025 | + t7 = a ^ d; |
1026 | + h = t2 ^ t5; |
1027 | + t8 = b ^ t5; |
1028 | + t9 = t2 | t8; |
1029 | + t11 = d & t3; |
1030 | + f = t7 ^ t9; |
1031 | + t12 = t5 ^ f; |
1032 | + t15 = t1 | t4; |
1033 | + t13 = h & t12; |
1034 | + g = t11 ^ t13; |
1035 | + t16 = t12 ^ g; |
1036 | + e = t15 ^ t16 |
1037 | + key[4 * 20 + 8] = e |
1038 | + key[4 * 20 + 9] = f |
1039 | + key[4 * 20 + 10] = g |
1040 | + key[4 * 20 + 11] = h |
1041 | + a = key[4 * 21 + 8] |
1042 | + b = key[4 * 21 + 9] |
1043 | + c = key[4 * 21 + 10] |
1044 | + d = key[4 * 21 + 11] |
1045 | + t1 = (~a) % 0x100000000; |
1046 | + t2 = a ^ d; |
1047 | + t3 = b ^ t2; |
1048 | + t4 = t1 | t2; |
1049 | + t5 = c ^ t4; |
1050 | + f = b ^ t5; |
1051 | + t13 = (~t5) % 0x100000000; |
1052 | + t7 = t2 | f; |
1053 | + t8 = d ^ t7; |
1054 | + t9 = t5 & t8; |
1055 | + g = t3 ^ t9; |
1056 | + t11 = t5 ^ t8; |
1057 | + e = g ^ t11; |
1058 | + t14 = t3 & t11; |
1059 | + h = t13 ^ t14 |
1060 | + key[4 * 21 + 8] = e |
1061 | + key[4 * 21 + 9] = f |
1062 | + key[4 * 21 + 10] = g |
1063 | + key[4 * 21 + 11] = h |
1064 | + a = key[4 * 22 + 8] |
1065 | + b = key[4 * 22 + 9] |
1066 | + c = key[4 * 22 + 10] |
1067 | + d = key[4 * 22 + 11] |
1068 | + t1 = (~a) % 0x100000000; |
1069 | + t2 = a ^ b; |
1070 | + t3 = a ^ d; |
1071 | + t4 = c ^ t1; |
1072 | + t5 = t2 | t3; |
1073 | + e = t4 ^ t5; |
1074 | + t7 = d & e; |
1075 | + t8 = t2 ^ e; |
1076 | + t10 = t1 | e; |
1077 | + f = t7 ^ t8; |
1078 | + t11 = t2 | t7; |
1079 | + t12 = t3 ^ t10; |
1080 | + t14 = b ^ t7; |
1081 | + g = t11 ^ t12; |
1082 | + t15 = f & t12; |
1083 | + h = t14 ^ t15 |
1084 | + key[4 * 22 + 8] = e |
1085 | + key[4 * 22 + 9] = f |
1086 | + key[4 * 22 + 10] = g |
1087 | + key[4 * 22 + 11] = h |
1088 | + a = key[4 * 23 + 8] |
1089 | + b = key[4 * 23 + 9] |
1090 | + c = key[4 * 23 + 10] |
1091 | + d = key[4 * 23 + 11] |
1092 | + t1 = a ^ d; |
1093 | + t2 = d & t1; |
1094 | + t3 = c ^ t2; |
1095 | + t4 = b | t3; |
1096 | + h = t1 ^ t4; |
1097 | + t6 = (~b) % 0x100000000; |
1098 | + t7 = t1 | t6; |
1099 | + e = t3 ^ t7; |
1100 | + t9 = a & e; |
1101 | + t10 = t1 ^ t6; |
1102 | + t11 = t4 & t10; |
1103 | + g = t9 ^ t11; |
1104 | + t13 = a ^ t3; |
1105 | + t14 = t10 & g; |
1106 | + f = t13 ^ t14 |
1107 | + key[4 * 23 + 8] = e |
1108 | + key[4 * 23 + 9] = f |
1109 | + key[4 * 23 + 10] = g |
1110 | + key[4 * 23 + 11] = h |
1111 | + a = key[4 * 24 + 8] |
1112 | + b = key[4 * 24 + 9] |
1113 | + c = key[4 * 24 + 10] |
1114 | + d = key[4 * 24 + 11] |
1115 | + t1 = a ^ c; |
1116 | + t2 = d ^ t1; |
1117 | + t3 = a & t2; |
1118 | + t4 = d ^ t3; |
1119 | + t5 = b & t4; |
1120 | + g = t2 ^ t5; |
1121 | + t7 = a | g; |
1122 | + t8 = b | d; |
1123 | + t11 = a | d; |
1124 | + t9 = t4 & t7; |
1125 | + f = t8 ^ t9; |
1126 | + t12 = b ^ t11; |
1127 | + t13 = g ^ t9; |
1128 | + t15 = t3 ^ t8; |
1129 | + h = t12 ^ t13; |
1130 | + t16 = c & t15; |
1131 | + e = t12 ^ t16 |
1132 | + key[4 * 24 + 8] = e |
1133 | + key[4 * 24 + 9] = f |
1134 | + key[4 * 24 + 10] = g |
1135 | + key[4 * 24 + 11] = h |
1136 | + a = key[4 * 25 + 8] |
1137 | + b = key[4 * 25 + 9] |
1138 | + c = key[4 * 25 + 10] |
1139 | + d = key[4 * 25 + 11] |
1140 | + t1 = (~a) % 0x100000000; |
1141 | + t2 = b ^ d; |
1142 | + t3 = c & t1; |
1143 | + t13 = d | t1; |
1144 | + e = t2 ^ t3; |
1145 | + t5 = c ^ t1; |
1146 | + t6 = c ^ e; |
1147 | + t7 = b & t6; |
1148 | + t10 = e | t5; |
1149 | + h = t5 ^ t7; |
1150 | + t9 = d | t7; |
1151 | + t11 = t9 & t10; |
1152 | + t14 = t2 ^ h; |
1153 | + g = a ^ t11; |
1154 | + t15 = g ^ t13; |
1155 | + f = t14 ^ t15 |
1156 | + key[4 * 25 + 8] = e |
1157 | + key[4 * 25 + 9] = f |
1158 | + key[4 * 25 + 10] = g |
1159 | + key[4 * 25 + 11] = h |
1160 | + a = key[4 * 26 + 8] |
1161 | + b = key[4 * 26 + 9] |
1162 | + c = key[4 * 26 + 10] |
1163 | + d = key[4 * 26 + 11] |
1164 | + t1 = (~a) % 0x100000000; |
1165 | + t2 = b ^ t1; |
1166 | + t3 = a | t2; |
1167 | + t4 = d | t2; |
1168 | + t5 = c ^ t3; |
1169 | + g = d ^ t5; |
1170 | + t7 = b ^ t4; |
1171 | + t8 = t2 ^ g; |
1172 | + t9 = t5 & t7; |
1173 | + h = t8 ^ t9; |
1174 | + t11 = t5 ^ t7; |
1175 | + f = h ^ t11; |
1176 | + t13 = t8 & t11; |
1177 | + e = t5 ^ t13 |
1178 | + key[4 * 26 + 8] = e |
1179 | + key[4 * 26 + 9] = f |
1180 | + key[4 * 26 + 10] = g |
1181 | + key[4 * 26 + 11] = h |
1182 | + a = key[4 * 27 + 8] |
1183 | + b = key[4 * 27 + 9] |
1184 | + c = key[4 * 27 + 10] |
1185 | + d = key[4 * 27 + 11] |
1186 | + t1 = a ^ d; |
1187 | + t2 = a & d; |
1188 | + t3 = c ^ t1; |
1189 | + t6 = b & t1; |
1190 | + t4 = b ^ t3; |
1191 | + t10 = (~t3) % 0x100000000; |
1192 | + h = t2 ^ t4; |
1193 | + t7 = a ^ t6; |
1194 | + t14 = (~t7) % 0x100000000; |
1195 | + t8 = c | t7; |
1196 | + t11 = t3 ^ t7; |
1197 | + g = t4 ^ t8; |
1198 | + t12 = h & t11; |
1199 | + f = t10 ^ t12; |
1200 | + e = t12 ^ t14 |
1201 | + key[4 * 27 + 8] = e |
1202 | + key[4 * 27 + 9] = f |
1203 | + key[4 * 27 + 10] = g |
1204 | + key[4 * 27 + 11] = h |
1205 | + a = key[4 * 28 + 8] |
1206 | + b = key[4 * 28 + 9] |
1207 | + c = key[4 * 28 + 10] |
1208 | + d = key[4 * 28 + 11] |
1209 | + t1 = (~c) % 0x100000000; |
1210 | + t2 = b ^ c; |
1211 | + t3 = b | t1; |
1212 | + t4 = d ^ t3; |
1213 | + t5 = a & t4; |
1214 | + t7 = a ^ d; |
1215 | + h = t2 ^ t5; |
1216 | + t8 = b ^ t5; |
1217 | + t9 = t2 | t8; |
1218 | + t11 = d & t3; |
1219 | + f = t7 ^ t9; |
1220 | + t12 = t5 ^ f; |
1221 | + t15 = t1 | t4; |
1222 | + t13 = h & t12; |
1223 | + g = t11 ^ t13; |
1224 | + t16 = t12 ^ g; |
1225 | + e = t15 ^ t16 |
1226 | + key[4 * 28 + 8] = e |
1227 | + key[4 * 28 + 9] = f |
1228 | + key[4 * 28 + 10] = g |
1229 | + key[4 * 28 + 11] = h |
1230 | + a = key[4 * 29 + 8] |
1231 | + b = key[4 * 29 + 9] |
1232 | + c = key[4 * 29 + 10] |
1233 | + d = key[4 * 29 + 11] |
1234 | + t1 = (~a) % 0x100000000; |
1235 | + t2 = a ^ d; |
1236 | + t3 = b ^ t2; |
1237 | + t4 = t1 | t2; |
1238 | + t5 = c ^ t4; |
1239 | + f = b ^ t5; |
1240 | + t13 = (~t5) % 0x100000000; |
1241 | + t7 = t2 | f; |
1242 | + t8 = d ^ t7; |
1243 | + t9 = t5 & t8; |
1244 | + g = t3 ^ t9; |
1245 | + t11 = t5 ^ t8; |
1246 | + e = g ^ t11; |
1247 | + t14 = t3 & t11; |
1248 | + h = t13 ^ t14 |
1249 | + key[4 * 29 + 8] = e |
1250 | + key[4 * 29 + 9] = f |
1251 | + key[4 * 29 + 10] = g |
1252 | + key[4 * 29 + 11] = h |
1253 | + a = key[4 * 30 + 8] |
1254 | + b = key[4 * 30 + 9] |
1255 | + c = key[4 * 30 + 10] |
1256 | + d = key[4 * 30 + 11] |
1257 | + t1 = (~a) % 0x100000000; |
1258 | + t2 = a ^ b; |
1259 | + t3 = a ^ d; |
1260 | + t4 = c ^ t1; |
1261 | + t5 = t2 | t3; |
1262 | + e = t4 ^ t5; |
1263 | + t7 = d & e; |
1264 | + t8 = t2 ^ e; |
1265 | + t10 = t1 | e; |
1266 | + f = t7 ^ t8; |
1267 | + t11 = t2 | t7; |
1268 | + t12 = t3 ^ t10; |
1269 | + t14 = b ^ t7; |
1270 | + g = t11 ^ t12; |
1271 | + t15 = f & t12; |
1272 | + h = t14 ^ t15 |
1273 | + key[4 * 30 + 8] = e |
1274 | + key[4 * 30 + 9] = f |
1275 | + key[4 * 30 + 10] = g |
1276 | + key[4 * 30 + 11] = h |
1277 | + a = key[4 * 31 + 8] |
1278 | + b = key[4 * 31 + 9] |
1279 | + c = key[4 * 31 + 10] |
1280 | + d = key[4 * 31 + 11] |
1281 | + t1 = a ^ d; |
1282 | + t2 = d & t1; |
1283 | + t3 = c ^ t2; |
1284 | + t4 = b | t3; |
1285 | + h = t1 ^ t4; |
1286 | + t6 = (~b) % 0x100000000; |
1287 | + t7 = t1 | t6; |
1288 | + e = t3 ^ t7; |
1289 | + t9 = a & e; |
1290 | + t10 = t1 ^ t6; |
1291 | + t11 = t4 & t10; |
1292 | + g = t9 ^ t11; |
1293 | + t13 = a ^ t3; |
1294 | + t14 = t10 & g; |
1295 | + f = t13 ^ t14 |
1296 | + key[4 * 31 + 8] = e |
1297 | + key[4 * 31 + 9] = f |
1298 | + key[4 * 31 + 10] = g |
1299 | + key[4 * 31 + 11] = h |
1300 | + a = key[4 * 32 + 8] |
1301 | + b = key[4 * 32 + 9] |
1302 | + c = key[4 * 32 + 10] |
1303 | + d = key[4 * 32 + 11] |
1304 | + t1 = a ^ c; |
1305 | + t2 = d ^ t1; |
1306 | + t3 = a & t2; |
1307 | + t4 = d ^ t3; |
1308 | + t5 = b & t4; |
1309 | + g = t2 ^ t5; |
1310 | + t7 = a | g; |
1311 | + t8 = b | d; |
1312 | + t11 = a | d; |
1313 | + t9 = t4 & t7; |
1314 | + f = t8 ^ t9; |
1315 | + t12 = b ^ t11; |
1316 | + t13 = g ^ t9; |
1317 | + t15 = t3 ^ t8; |
1318 | + h = t12 ^ t13; |
1319 | + t16 = c & t15; |
1320 | + e = t12 ^ t16 |
1321 | + key[4 * 32 + 8] = e |
1322 | + key[4 * 32 + 9] = f |
1323 | + key[4 * 32 + 10] = g |
1324 | + key[4 * 32 + 11] = h |
1325 | + |
1326 | +def encrypt(key, in_blk): |
1327 | + # serpent_generate.py |
1328 | + a = in_blk[0] |
1329 | + b = in_blk[1] |
1330 | + c = in_blk[2] |
1331 | + d = in_blk[3] |
1332 | + if WORD_BIGENDIAN: |
1333 | + a = byteswap32(a) |
1334 | + b = byteswap32(b) |
1335 | + c = byteswap32(c) |
1336 | + d = byteswap32(d) |
1337 | + e = 0 |
1338 | + f = 0 |
1339 | + g = 0 |
1340 | + h = 0 |
1341 | + t1 = 0 |
1342 | + t2 = 0 |
1343 | + t3 = 0 |
1344 | + t4 = 0 |
1345 | + t5 = 0 |
1346 | + t6 = 0 |
1347 | + t7 = 0 |
1348 | + t8 = 0 |
1349 | + t9 = 0 |
1350 | + t10 = 0 |
1351 | + t11 = 0 |
1352 | + t12 = 0 |
1353 | + t13 = 0 |
1354 | + t14 = 0 |
1355 | + t15 = 0 |
1356 | + t16 = 0 |
1357 | + a ^= key[4 * 0 + 8] |
1358 | + b ^= key[4 * 0 + 9] |
1359 | + c ^= key[4 * 0 + 10] |
1360 | + d ^= key[4 * 0 + 11] |
1361 | + t1 = a ^ d; |
1362 | + t2 = a & d; |
1363 | + t3 = c ^ t1; |
1364 | + t6 = b & t1; |
1365 | + t4 = b ^ t3; |
1366 | + t10 = (~t3) % 0x100000000; |
1367 | + h = t2 ^ t4; |
1368 | + t7 = a ^ t6; |
1369 | + t14 = (~t7) % 0x100000000; |
1370 | + t8 = c | t7; |
1371 | + t11 = t3 ^ t7; |
1372 | + g = t4 ^ t8; |
1373 | + t12 = h & t11; |
1374 | + f = t10 ^ t12; |
1375 | + e = t12 ^ t14 |
1376 | + e = rotl32(e, 13) |
1377 | + g = rotl32(g, 3) |
1378 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
1379 | + f ^= e ^ g |
1380 | + h = rotl32(h, 7) |
1381 | + f = rotl32(f, 1) |
1382 | + e ^= f ^ h |
1383 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
1384 | + e = rotl32(e, 5) |
1385 | + g = rotl32(g, 22) |
1386 | + e ^= key[4 * 1 + 8] |
1387 | + f ^= key[4 * 1 + 9] |
1388 | + g ^= key[4 * 1 + 10] |
1389 | + h ^= key[4 * 1 + 11] |
1390 | + t1 = (~e) % 0x100000000; |
1391 | + t2 = f ^ t1; |
1392 | + t3 = e | t2; |
1393 | + t4 = h | t2; |
1394 | + t5 = g ^ t3; |
1395 | + c = h ^ t5; |
1396 | + t7 = f ^ t4; |
1397 | + t8 = t2 ^ c; |
1398 | + t9 = t5 & t7; |
1399 | + d = t8 ^ t9; |
1400 | + t11 = t5 ^ t7; |
1401 | + b = d ^ t11; |
1402 | + t13 = t8 & t11; |
1403 | + a = t5 ^ t13 |
1404 | + a = rotl32(a, 13) |
1405 | + c = rotl32(c, 3) |
1406 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
1407 | + b ^= a ^ c |
1408 | + d = rotl32(d, 7) |
1409 | + b = rotl32(b, 1) |
1410 | + a ^= b ^ d |
1411 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
1412 | + a = rotl32(a, 5) |
1413 | + c = rotl32(c, 22) |
1414 | + a ^= key[4 * 2 + 8] |
1415 | + b ^= key[4 * 2 + 9] |
1416 | + c ^= key[4 * 2 + 10] |
1417 | + d ^= key[4 * 2 + 11] |
1418 | + t1 = (~a) % 0x100000000; |
1419 | + t2 = b ^ d; |
1420 | + t3 = c & t1; |
1421 | + t13 = d | t1; |
1422 | + e = t2 ^ t3; |
1423 | + t5 = c ^ t1; |
1424 | + t6 = c ^ e; |
1425 | + t7 = b & t6; |
1426 | + t10 = e | t5; |
1427 | + h = t5 ^ t7; |
1428 | + t9 = d | t7; |
1429 | + t11 = t9 & t10; |
1430 | + t14 = t2 ^ h; |
1431 | + g = a ^ t11; |
1432 | + t15 = g ^ t13; |
1433 | + f = t14 ^ t15 |
1434 | + e = rotl32(e, 13) |
1435 | + g = rotl32(g, 3) |
1436 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
1437 | + f ^= e ^ g |
1438 | + h = rotl32(h, 7) |
1439 | + f = rotl32(f, 1) |
1440 | + e ^= f ^ h |
1441 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
1442 | + e = rotl32(e, 5) |
1443 | + g = rotl32(g, 22) |
1444 | + e ^= key[4 * 3 + 8] |
1445 | + f ^= key[4 * 3 + 9] |
1446 | + g ^= key[4 * 3 + 10] |
1447 | + h ^= key[4 * 3 + 11] |
1448 | + t1 = e ^ g; |
1449 | + t2 = h ^ t1; |
1450 | + t3 = e & t2; |
1451 | + t4 = h ^ t3; |
1452 | + t5 = f & t4; |
1453 | + c = t2 ^ t5; |
1454 | + t7 = e | c; |
1455 | + t8 = f | h; |
1456 | + t11 = e | h; |
1457 | + t9 = t4 & t7; |
1458 | + b = t8 ^ t9; |
1459 | + t12 = f ^ t11; |
1460 | + t13 = c ^ t9; |
1461 | + t15 = t3 ^ t8; |
1462 | + d = t12 ^ t13; |
1463 | + t16 = g & t15; |
1464 | + a = t12 ^ t16 |
1465 | + a = rotl32(a, 13) |
1466 | + c = rotl32(c, 3) |
1467 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
1468 | + b ^= a ^ c |
1469 | + d = rotl32(d, 7) |
1470 | + b = rotl32(b, 1) |
1471 | + a ^= b ^ d |
1472 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
1473 | + a = rotl32(a, 5) |
1474 | + c = rotl32(c, 22) |
1475 | + a ^= key[4 * 4 + 8] |
1476 | + b ^= key[4 * 4 + 9] |
1477 | + c ^= key[4 * 4 + 10] |
1478 | + d ^= key[4 * 4 + 11] |
1479 | + t1 = a ^ d; |
1480 | + t2 = d & t1; |
1481 | + t3 = c ^ t2; |
1482 | + t4 = b | t3; |
1483 | + h = t1 ^ t4; |
1484 | + t6 = (~b) % 0x100000000; |
1485 | + t7 = t1 | t6; |
1486 | + e = t3 ^ t7; |
1487 | + t9 = a & e; |
1488 | + t10 = t1 ^ t6; |
1489 | + t11 = t4 & t10; |
1490 | + g = t9 ^ t11; |
1491 | + t13 = a ^ t3; |
1492 | + t14 = t10 & g; |
1493 | + f = t13 ^ t14 |
1494 | + e = rotl32(e, 13) |
1495 | + g = rotl32(g, 3) |
1496 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
1497 | + f ^= e ^ g |
1498 | + h = rotl32(h, 7) |
1499 | + f = rotl32(f, 1) |
1500 | + e ^= f ^ h |
1501 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
1502 | + e = rotl32(e, 5) |
1503 | + g = rotl32(g, 22) |
1504 | + e ^= key[4 * 5 + 8] |
1505 | + f ^= key[4 * 5 + 9] |
1506 | + g ^= key[4 * 5 + 10] |
1507 | + h ^= key[4 * 5 + 11] |
1508 | + t1 = (~e) % 0x100000000; |
1509 | + t2 = e ^ f; |
1510 | + t3 = e ^ h; |
1511 | + t4 = g ^ t1; |
1512 | + t5 = t2 | t3; |
1513 | + a = t4 ^ t5; |
1514 | + t7 = h & a; |
1515 | + t8 = t2 ^ a; |
1516 | + t10 = t1 | a; |
1517 | + b = t7 ^ t8; |
1518 | + t11 = t2 | t7; |
1519 | + t12 = t3 ^ t10; |
1520 | + t14 = f ^ t7; |
1521 | + c = t11 ^ t12; |
1522 | + t15 = b & t12; |
1523 | + d = t14 ^ t15 |
1524 | + a = rotl32(a, 13) |
1525 | + c = rotl32(c, 3) |
1526 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
1527 | + b ^= a ^ c |
1528 | + d = rotl32(d, 7) |
1529 | + b = rotl32(b, 1) |
1530 | + a ^= b ^ d |
1531 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
1532 | + a = rotl32(a, 5) |
1533 | + c = rotl32(c, 22) |
1534 | + a ^= key[4 * 6 + 8] |
1535 | + b ^= key[4 * 6 + 9] |
1536 | + c ^= key[4 * 6 + 10] |
1537 | + d ^= key[4 * 6 + 11] |
1538 | + t1 = (~a) % 0x100000000; |
1539 | + t2 = a ^ d; |
1540 | + t3 = b ^ t2; |
1541 | + t4 = t1 | t2; |
1542 | + t5 = c ^ t4; |
1543 | + f = b ^ t5; |
1544 | + t13 = (~t5) % 0x100000000; |
1545 | + t7 = t2 | f; |
1546 | + t8 = d ^ t7; |
1547 | + t9 = t5 & t8; |
1548 | + g = t3 ^ t9; |
1549 | + t11 = t5 ^ t8; |
1550 | + e = g ^ t11; |
1551 | + t14 = t3 & t11; |
1552 | + h = t13 ^ t14 |
1553 | + e = rotl32(e, 13) |
1554 | + g = rotl32(g, 3) |
1555 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
1556 | + f ^= e ^ g |
1557 | + h = rotl32(h, 7) |
1558 | + f = rotl32(f, 1) |
1559 | + e ^= f ^ h |
1560 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
1561 | + e = rotl32(e, 5) |
1562 | + g = rotl32(g, 22) |
1563 | + e ^= key[4 * 7 + 8] |
1564 | + f ^= key[4 * 7 + 9] |
1565 | + g ^= key[4 * 7 + 10] |
1566 | + h ^= key[4 * 7 + 11] |
1567 | + t1 = (~g) % 0x100000000; |
1568 | + t2 = f ^ g; |
1569 | + t3 = f | t1; |
1570 | + t4 = h ^ t3; |
1571 | + t5 = e & t4; |
1572 | + t7 = e ^ h; |
1573 | + d = t2 ^ t5; |
1574 | + t8 = f ^ t5; |
1575 | + t9 = t2 | t8; |
1576 | + t11 = h & t3; |
1577 | + b = t7 ^ t9; |
1578 | + t12 = t5 ^ b; |
1579 | + t15 = t1 | t4; |
1580 | + t13 = d & t12; |
1581 | + c = t11 ^ t13; |
1582 | + t16 = t12 ^ c; |
1583 | + a = t15 ^ t16 |
1584 | + a = rotl32(a, 13) |
1585 | + c = rotl32(c, 3) |
1586 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
1587 | + b ^= a ^ c |
1588 | + d = rotl32(d, 7) |
1589 | + b = rotl32(b, 1) |
1590 | + a ^= b ^ d |
1591 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
1592 | + a = rotl32(a, 5) |
1593 | + c = rotl32(c, 22) |
1594 | + a ^= key[4 * 8 + 8] |
1595 | + b ^= key[4 * 8 + 9] |
1596 | + c ^= key[4 * 8 + 10] |
1597 | + d ^= key[4 * 8 + 11] |
1598 | + t1 = a ^ d; |
1599 | + t2 = a & d; |
1600 | + t3 = c ^ t1; |
1601 | + t6 = b & t1; |
1602 | + t4 = b ^ t3; |
1603 | + t10 = (~t3) % 0x100000000; |
1604 | + h = t2 ^ t4; |
1605 | + t7 = a ^ t6; |
1606 | + t14 = (~t7) % 0x100000000; |
1607 | + t8 = c | t7; |
1608 | + t11 = t3 ^ t7; |
1609 | + g = t4 ^ t8; |
1610 | + t12 = h & t11; |
1611 | + f = t10 ^ t12; |
1612 | + e = t12 ^ t14 |
1613 | + e = rotl32(e, 13) |
1614 | + g = rotl32(g, 3) |
1615 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
1616 | + f ^= e ^ g |
1617 | + h = rotl32(h, 7) |
1618 | + f = rotl32(f, 1) |
1619 | + e ^= f ^ h |
1620 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
1621 | + e = rotl32(e, 5) |
1622 | + g = rotl32(g, 22) |
1623 | + e ^= key[4 * 9 + 8] |
1624 | + f ^= key[4 * 9 + 9] |
1625 | + g ^= key[4 * 9 + 10] |
1626 | + h ^= key[4 * 9 + 11] |
1627 | + t1 = (~e) % 0x100000000; |
1628 | + t2 = f ^ t1; |
1629 | + t3 = e | t2; |
1630 | + t4 = h | t2; |
1631 | + t5 = g ^ t3; |
1632 | + c = h ^ t5; |
1633 | + t7 = f ^ t4; |
1634 | + t8 = t2 ^ c; |
1635 | + t9 = t5 & t7; |
1636 | + d = t8 ^ t9; |
1637 | + t11 = t5 ^ t7; |
1638 | + b = d ^ t11; |
1639 | + t13 = t8 & t11; |
1640 | + a = t5 ^ t13 |
1641 | + a = rotl32(a, 13) |
1642 | + c = rotl32(c, 3) |
1643 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
1644 | + b ^= a ^ c |
1645 | + d = rotl32(d, 7) |
1646 | + b = rotl32(b, 1) |
1647 | + a ^= b ^ d |
1648 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
1649 | + a = rotl32(a, 5) |
1650 | + c = rotl32(c, 22) |
1651 | + a ^= key[4 * 10 + 8] |
1652 | + b ^= key[4 * 10 + 9] |
1653 | + c ^= key[4 * 10 + 10] |
1654 | + d ^= key[4 * 10 + 11] |
1655 | + t1 = (~a) % 0x100000000; |
1656 | + t2 = b ^ d; |
1657 | + t3 = c & t1; |
1658 | + t13 = d | t1; |
1659 | + e = t2 ^ t3; |
1660 | + t5 = c ^ t1; |
1661 | + t6 = c ^ e; |
1662 | + t7 = b & t6; |
1663 | + t10 = e | t5; |
1664 | + h = t5 ^ t7; |
1665 | + t9 = d | t7; |
1666 | + t11 = t9 & t10; |
1667 | + t14 = t2 ^ h; |
1668 | + g = a ^ t11; |
1669 | + t15 = g ^ t13; |
1670 | + f = t14 ^ t15 |
1671 | + e = rotl32(e, 13) |
1672 | + g = rotl32(g, 3) |
1673 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
1674 | + f ^= e ^ g |
1675 | + h = rotl32(h, 7) |
1676 | + f = rotl32(f, 1) |
1677 | + e ^= f ^ h |
1678 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
1679 | + e = rotl32(e, 5) |
1680 | + g = rotl32(g, 22) |
1681 | + e ^= key[4 * 11 + 8] |
1682 | + f ^= key[4 * 11 + 9] |
1683 | + g ^= key[4 * 11 + 10] |
1684 | + h ^= key[4 * 11 + 11] |
1685 | + t1 = e ^ g; |
1686 | + t2 = h ^ t1; |
1687 | + t3 = e & t2; |
1688 | + t4 = h ^ t3; |
1689 | + t5 = f & t4; |
1690 | + c = t2 ^ t5; |
1691 | + t7 = e | c; |
1692 | + t8 = f | h; |
1693 | + t11 = e | h; |
1694 | + t9 = t4 & t7; |
1695 | + b = t8 ^ t9; |
1696 | + t12 = f ^ t11; |
1697 | + t13 = c ^ t9; |
1698 | + t15 = t3 ^ t8; |
1699 | + d = t12 ^ t13; |
1700 | + t16 = g & t15; |
1701 | + a = t12 ^ t16 |
1702 | + a = rotl32(a, 13) |
1703 | + c = rotl32(c, 3) |
1704 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
1705 | + b ^= a ^ c |
1706 | + d = rotl32(d, 7) |
1707 | + b = rotl32(b, 1) |
1708 | + a ^= b ^ d |
1709 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
1710 | + a = rotl32(a, 5) |
1711 | + c = rotl32(c, 22) |
1712 | + a ^= key[4 * 12 + 8] |
1713 | + b ^= key[4 * 12 + 9] |
1714 | + c ^= key[4 * 12 + 10] |
1715 | + d ^= key[4 * 12 + 11] |
1716 | + t1 = a ^ d; |
1717 | + t2 = d & t1; |
1718 | + t3 = c ^ t2; |
1719 | + t4 = b | t3; |
1720 | + h = t1 ^ t4; |
1721 | + t6 = (~b) % 0x100000000; |
1722 | + t7 = t1 | t6; |
1723 | + e = t3 ^ t7; |
1724 | + t9 = a & e; |
1725 | + t10 = t1 ^ t6; |
1726 | + t11 = t4 & t10; |
1727 | + g = t9 ^ t11; |
1728 | + t13 = a ^ t3; |
1729 | + t14 = t10 & g; |
1730 | + f = t13 ^ t14 |
1731 | + e = rotl32(e, 13) |
1732 | + g = rotl32(g, 3) |
1733 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
1734 | + f ^= e ^ g |
1735 | + h = rotl32(h, 7) |
1736 | + f = rotl32(f, 1) |
1737 | + e ^= f ^ h |
1738 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
1739 | + e = rotl32(e, 5) |
1740 | + g = rotl32(g, 22) |
1741 | + e ^= key[4 * 13 + 8] |
1742 | + f ^= key[4 * 13 + 9] |
1743 | + g ^= key[4 * 13 + 10] |
1744 | + h ^= key[4 * 13 + 11] |
1745 | + t1 = (~e) % 0x100000000; |
1746 | + t2 = e ^ f; |
1747 | + t3 = e ^ h; |
1748 | + t4 = g ^ t1; |
1749 | + t5 = t2 | t3; |
1750 | + a = t4 ^ t5; |
1751 | + t7 = h & a; |
1752 | + t8 = t2 ^ a; |
1753 | + t10 = t1 | a; |
1754 | + b = t7 ^ t8; |
1755 | + t11 = t2 | t7; |
1756 | + t12 = t3 ^ t10; |
1757 | + t14 = f ^ t7; |
1758 | + c = t11 ^ t12; |
1759 | + t15 = b & t12; |
1760 | + d = t14 ^ t15 |
1761 | + a = rotl32(a, 13) |
1762 | + c = rotl32(c, 3) |
1763 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
1764 | + b ^= a ^ c |
1765 | + d = rotl32(d, 7) |
1766 | + b = rotl32(b, 1) |
1767 | + a ^= b ^ d |
1768 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
1769 | + a = rotl32(a, 5) |
1770 | + c = rotl32(c, 22) |
1771 | + a ^= key[4 * 14 + 8] |
1772 | + b ^= key[4 * 14 + 9] |
1773 | + c ^= key[4 * 14 + 10] |
1774 | + d ^= key[4 * 14 + 11] |
1775 | + t1 = (~a) % 0x100000000; |
1776 | + t2 = a ^ d; |
1777 | + t3 = b ^ t2; |
1778 | + t4 = t1 | t2; |
1779 | + t5 = c ^ t4; |
1780 | + f = b ^ t5; |
1781 | + t13 = (~t5) % 0x100000000; |
1782 | + t7 = t2 | f; |
1783 | + t8 = d ^ t7; |
1784 | + t9 = t5 & t8; |
1785 | + g = t3 ^ t9; |
1786 | + t11 = t5 ^ t8; |
1787 | + e = g ^ t11; |
1788 | + t14 = t3 & t11; |
1789 | + h = t13 ^ t14 |
1790 | + e = rotl32(e, 13) |
1791 | + g = rotl32(g, 3) |
1792 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
1793 | + f ^= e ^ g |
1794 | + h = rotl32(h, 7) |
1795 | + f = rotl32(f, 1) |
1796 | + e ^= f ^ h |
1797 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
1798 | + e = rotl32(e, 5) |
1799 | + g = rotl32(g, 22) |
1800 | + e ^= key[4 * 15 + 8] |
1801 | + f ^= key[4 * 15 + 9] |
1802 | + g ^= key[4 * 15 + 10] |
1803 | + h ^= key[4 * 15 + 11] |
1804 | + t1 = (~g) % 0x100000000; |
1805 | + t2 = f ^ g; |
1806 | + t3 = f | t1; |
1807 | + t4 = h ^ t3; |
1808 | + t5 = e & t4; |
1809 | + t7 = e ^ h; |
1810 | + d = t2 ^ t5; |
1811 | + t8 = f ^ t5; |
1812 | + t9 = t2 | t8; |
1813 | + t11 = h & t3; |
1814 | + b = t7 ^ t9; |
1815 | + t12 = t5 ^ b; |
1816 | + t15 = t1 | t4; |
1817 | + t13 = d & t12; |
1818 | + c = t11 ^ t13; |
1819 | + t16 = t12 ^ c; |
1820 | + a = t15 ^ t16 |
1821 | + a = rotl32(a, 13) |
1822 | + c = rotl32(c, 3) |
1823 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
1824 | + b ^= a ^ c |
1825 | + d = rotl32(d, 7) |
1826 | + b = rotl32(b, 1) |
1827 | + a ^= b ^ d |
1828 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
1829 | + a = rotl32(a, 5) |
1830 | + c = rotl32(c, 22) |
1831 | + a ^= key[4 * 16 + 8] |
1832 | + b ^= key[4 * 16 + 9] |
1833 | + c ^= key[4 * 16 + 10] |
1834 | + d ^= key[4 * 16 + 11] |
1835 | + t1 = a ^ d; |
1836 | + t2 = a & d; |
1837 | + t3 = c ^ t1; |
1838 | + t6 = b & t1; |
1839 | + t4 = b ^ t3; |
1840 | + t10 = (~t3) % 0x100000000; |
1841 | + h = t2 ^ t4; |
1842 | + t7 = a ^ t6; |
1843 | + t14 = (~t7) % 0x100000000; |
1844 | + t8 = c | t7; |
1845 | + t11 = t3 ^ t7; |
1846 | + g = t4 ^ t8; |
1847 | + t12 = h & t11; |
1848 | + f = t10 ^ t12; |
1849 | + e = t12 ^ t14 |
1850 | + e = rotl32(e, 13) |
1851 | + g = rotl32(g, 3) |
1852 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
1853 | + f ^= e ^ g |
1854 | + h = rotl32(h, 7) |
1855 | + f = rotl32(f, 1) |
1856 | + e ^= f ^ h |
1857 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
1858 | + e = rotl32(e, 5) |
1859 | + g = rotl32(g, 22) |
1860 | + e ^= key[4 * 17 + 8] |
1861 | + f ^= key[4 * 17 + 9] |
1862 | + g ^= key[4 * 17 + 10] |
1863 | + h ^= key[4 * 17 + 11] |
1864 | + t1 = (~e) % 0x100000000; |
1865 | + t2 = f ^ t1; |
1866 | + t3 = e | t2; |
1867 | + t4 = h | t2; |
1868 | + t5 = g ^ t3; |
1869 | + c = h ^ t5; |
1870 | + t7 = f ^ t4; |
1871 | + t8 = t2 ^ c; |
1872 | + t9 = t5 & t7; |
1873 | + d = t8 ^ t9; |
1874 | + t11 = t5 ^ t7; |
1875 | + b = d ^ t11; |
1876 | + t13 = t8 & t11; |
1877 | + a = t5 ^ t13 |
1878 | + a = rotl32(a, 13) |
1879 | + c = rotl32(c, 3) |
1880 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
1881 | + b ^= a ^ c |
1882 | + d = rotl32(d, 7) |
1883 | + b = rotl32(b, 1) |
1884 | + a ^= b ^ d |
1885 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
1886 | + a = rotl32(a, 5) |
1887 | + c = rotl32(c, 22) |
1888 | + a ^= key[4 * 18 + 8] |
1889 | + b ^= key[4 * 18 + 9] |
1890 | + c ^= key[4 * 18 + 10] |
1891 | + d ^= key[4 * 18 + 11] |
1892 | + t1 = (~a) % 0x100000000; |
1893 | + t2 = b ^ d; |
1894 | + t3 = c & t1; |
1895 | + t13 = d | t1; |
1896 | + e = t2 ^ t3; |
1897 | + t5 = c ^ t1; |
1898 | + t6 = c ^ e; |
1899 | + t7 = b & t6; |
1900 | + t10 = e | t5; |
1901 | + h = t5 ^ t7; |
1902 | + t9 = d | t7; |
1903 | + t11 = t9 & t10; |
1904 | + t14 = t2 ^ h; |
1905 | + g = a ^ t11; |
1906 | + t15 = g ^ t13; |
1907 | + f = t14 ^ t15 |
1908 | + e = rotl32(e, 13) |
1909 | + g = rotl32(g, 3) |
1910 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
1911 | + f ^= e ^ g |
1912 | + h = rotl32(h, 7) |
1913 | + f = rotl32(f, 1) |
1914 | + e ^= f ^ h |
1915 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
1916 | + e = rotl32(e, 5) |
1917 | + g = rotl32(g, 22) |
1918 | + e ^= key[4 * 19 + 8] |
1919 | + f ^= key[4 * 19 + 9] |
1920 | + g ^= key[4 * 19 + 10] |
1921 | + h ^= key[4 * 19 + 11] |
1922 | + t1 = e ^ g; |
1923 | + t2 = h ^ t1; |
1924 | + t3 = e & t2; |
1925 | + t4 = h ^ t3; |
1926 | + t5 = f & t4; |
1927 | + c = t2 ^ t5; |
1928 | + t7 = e | c; |
1929 | + t8 = f | h; |
1930 | + t11 = e | h; |
1931 | + t9 = t4 & t7; |
1932 | + b = t8 ^ t9; |
1933 | + t12 = f ^ t11; |
1934 | + t13 = c ^ t9; |
1935 | + t15 = t3 ^ t8; |
1936 | + d = t12 ^ t13; |
1937 | + t16 = g & t15; |
1938 | + a = t12 ^ t16 |
1939 | + a = rotl32(a, 13) |
1940 | + c = rotl32(c, 3) |
1941 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
1942 | + b ^= a ^ c |
1943 | + d = rotl32(d, 7) |
1944 | + b = rotl32(b, 1) |
1945 | + a ^= b ^ d |
1946 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
1947 | + a = rotl32(a, 5) |
1948 | + c = rotl32(c, 22) |
1949 | + a ^= key[4 * 20 + 8] |
1950 | + b ^= key[4 * 20 + 9] |
1951 | + c ^= key[4 * 20 + 10] |
1952 | + d ^= key[4 * 20 + 11] |
1953 | + t1 = a ^ d; |
1954 | + t2 = d & t1; |
1955 | + t3 = c ^ t2; |
1956 | + t4 = b | t3; |
1957 | + h = t1 ^ t4; |
1958 | + t6 = (~b) % 0x100000000; |
1959 | + t7 = t1 | t6; |
1960 | + e = t3 ^ t7; |
1961 | + t9 = a & e; |
1962 | + t10 = t1 ^ t6; |
1963 | + t11 = t4 & t10; |
1964 | + g = t9 ^ t11; |
1965 | + t13 = a ^ t3; |
1966 | + t14 = t10 & g; |
1967 | + f = t13 ^ t14 |
1968 | + e = rotl32(e, 13) |
1969 | + g = rotl32(g, 3) |
1970 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
1971 | + f ^= e ^ g |
1972 | + h = rotl32(h, 7) |
1973 | + f = rotl32(f, 1) |
1974 | + e ^= f ^ h |
1975 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
1976 | + e = rotl32(e, 5) |
1977 | + g = rotl32(g, 22) |
1978 | + e ^= key[4 * 21 + 8] |
1979 | + f ^= key[4 * 21 + 9] |
1980 | + g ^= key[4 * 21 + 10] |
1981 | + h ^= key[4 * 21 + 11] |
1982 | + t1 = (~e) % 0x100000000; |
1983 | + t2 = e ^ f; |
1984 | + t3 = e ^ h; |
1985 | + t4 = g ^ t1; |
1986 | + t5 = t2 | t3; |
1987 | + a = t4 ^ t5; |
1988 | + t7 = h & a; |
1989 | + t8 = t2 ^ a; |
1990 | + t10 = t1 | a; |
1991 | + b = t7 ^ t8; |
1992 | + t11 = t2 | t7; |
1993 | + t12 = t3 ^ t10; |
1994 | + t14 = f ^ t7; |
1995 | + c = t11 ^ t12; |
1996 | + t15 = b & t12; |
1997 | + d = t14 ^ t15 |
1998 | + a = rotl32(a, 13) |
1999 | + c = rotl32(c, 3) |
2000 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2001 | + b ^= a ^ c |
2002 | + d = rotl32(d, 7) |
2003 | + b = rotl32(b, 1) |
2004 | + a ^= b ^ d |
2005 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2006 | + a = rotl32(a, 5) |
2007 | + c = rotl32(c, 22) |
2008 | + a ^= key[4 * 22 + 8] |
2009 | + b ^= key[4 * 22 + 9] |
2010 | + c ^= key[4 * 22 + 10] |
2011 | + d ^= key[4 * 22 + 11] |
2012 | + t1 = (~a) % 0x100000000; |
2013 | + t2 = a ^ d; |
2014 | + t3 = b ^ t2; |
2015 | + t4 = t1 | t2; |
2016 | + t5 = c ^ t4; |
2017 | + f = b ^ t5; |
2018 | + t13 = (~t5) % 0x100000000; |
2019 | + t7 = t2 | f; |
2020 | + t8 = d ^ t7; |
2021 | + t9 = t5 & t8; |
2022 | + g = t3 ^ t9; |
2023 | + t11 = t5 ^ t8; |
2024 | + e = g ^ t11; |
2025 | + t14 = t3 & t11; |
2026 | + h = t13 ^ t14 |
2027 | + e = rotl32(e, 13) |
2028 | + g = rotl32(g, 3) |
2029 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2030 | + f ^= e ^ g |
2031 | + h = rotl32(h, 7) |
2032 | + f = rotl32(f, 1) |
2033 | + e ^= f ^ h |
2034 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2035 | + e = rotl32(e, 5) |
2036 | + g = rotl32(g, 22) |
2037 | + e ^= key[4 * 23 + 8] |
2038 | + f ^= key[4 * 23 + 9] |
2039 | + g ^= key[4 * 23 + 10] |
2040 | + h ^= key[4 * 23 + 11] |
2041 | + t1 = (~g) % 0x100000000; |
2042 | + t2 = f ^ g; |
2043 | + t3 = f | t1; |
2044 | + t4 = h ^ t3; |
2045 | + t5 = e & t4; |
2046 | + t7 = e ^ h; |
2047 | + d = t2 ^ t5; |
2048 | + t8 = f ^ t5; |
2049 | + t9 = t2 | t8; |
2050 | + t11 = h & t3; |
2051 | + b = t7 ^ t9; |
2052 | + t12 = t5 ^ b; |
2053 | + t15 = t1 | t4; |
2054 | + t13 = d & t12; |
2055 | + c = t11 ^ t13; |
2056 | + t16 = t12 ^ c; |
2057 | + a = t15 ^ t16 |
2058 | + a = rotl32(a, 13) |
2059 | + c = rotl32(c, 3) |
2060 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2061 | + b ^= a ^ c |
2062 | + d = rotl32(d, 7) |
2063 | + b = rotl32(b, 1) |
2064 | + a ^= b ^ d |
2065 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2066 | + a = rotl32(a, 5) |
2067 | + c = rotl32(c, 22) |
2068 | + a ^= key[4 * 24 + 8] |
2069 | + b ^= key[4 * 24 + 9] |
2070 | + c ^= key[4 * 24 + 10] |
2071 | + d ^= key[4 * 24 + 11] |
2072 | + t1 = a ^ d; |
2073 | + t2 = a & d; |
2074 | + t3 = c ^ t1; |
2075 | + t6 = b & t1; |
2076 | + t4 = b ^ t3; |
2077 | + t10 = (~t3) % 0x100000000; |
2078 | + h = t2 ^ t4; |
2079 | + t7 = a ^ t6; |
2080 | + t14 = (~t7) % 0x100000000; |
2081 | + t8 = c | t7; |
2082 | + t11 = t3 ^ t7; |
2083 | + g = t4 ^ t8; |
2084 | + t12 = h & t11; |
2085 | + f = t10 ^ t12; |
2086 | + e = t12 ^ t14 |
2087 | + e = rotl32(e, 13) |
2088 | + g = rotl32(g, 3) |
2089 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2090 | + f ^= e ^ g |
2091 | + h = rotl32(h, 7) |
2092 | + f = rotl32(f, 1) |
2093 | + e ^= f ^ h |
2094 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2095 | + e = rotl32(e, 5) |
2096 | + g = rotl32(g, 22) |
2097 | + e ^= key[4 * 25 + 8] |
2098 | + f ^= key[4 * 25 + 9] |
2099 | + g ^= key[4 * 25 + 10] |
2100 | + h ^= key[4 * 25 + 11] |
2101 | + t1 = (~e) % 0x100000000; |
2102 | + t2 = f ^ t1; |
2103 | + t3 = e | t2; |
2104 | + t4 = h | t2; |
2105 | + t5 = g ^ t3; |
2106 | + c = h ^ t5; |
2107 | + t7 = f ^ t4; |
2108 | + t8 = t2 ^ c; |
2109 | + t9 = t5 & t7; |
2110 | + d = t8 ^ t9; |
2111 | + t11 = t5 ^ t7; |
2112 | + b = d ^ t11; |
2113 | + t13 = t8 & t11; |
2114 | + a = t5 ^ t13 |
2115 | + a = rotl32(a, 13) |
2116 | + c = rotl32(c, 3) |
2117 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2118 | + b ^= a ^ c |
2119 | + d = rotl32(d, 7) |
2120 | + b = rotl32(b, 1) |
2121 | + a ^= b ^ d |
2122 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2123 | + a = rotl32(a, 5) |
2124 | + c = rotl32(c, 22) |
2125 | + a ^= key[4 * 26 + 8] |
2126 | + b ^= key[4 * 26 + 9] |
2127 | + c ^= key[4 * 26 + 10] |
2128 | + d ^= key[4 * 26 + 11] |
2129 | + t1 = (~a) % 0x100000000; |
2130 | + t2 = b ^ d; |
2131 | + t3 = c & t1; |
2132 | + t13 = d | t1; |
2133 | + e = t2 ^ t3; |
2134 | + t5 = c ^ t1; |
2135 | + t6 = c ^ e; |
2136 | + t7 = b & t6; |
2137 | + t10 = e | t5; |
2138 | + h = t5 ^ t7; |
2139 | + t9 = d | t7; |
2140 | + t11 = t9 & t10; |
2141 | + t14 = t2 ^ h; |
2142 | + g = a ^ t11; |
2143 | + t15 = g ^ t13; |
2144 | + f = t14 ^ t15 |
2145 | + e = rotl32(e, 13) |
2146 | + g = rotl32(g, 3) |
2147 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2148 | + f ^= e ^ g |
2149 | + h = rotl32(h, 7) |
2150 | + f = rotl32(f, 1) |
2151 | + e ^= f ^ h |
2152 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2153 | + e = rotl32(e, 5) |
2154 | + g = rotl32(g, 22) |
2155 | + e ^= key[4 * 27 + 8] |
2156 | + f ^= key[4 * 27 + 9] |
2157 | + g ^= key[4 * 27 + 10] |
2158 | + h ^= key[4 * 27 + 11] |
2159 | + t1 = e ^ g; |
2160 | + t2 = h ^ t1; |
2161 | + t3 = e & t2; |
2162 | + t4 = h ^ t3; |
2163 | + t5 = f & t4; |
2164 | + c = t2 ^ t5; |
2165 | + t7 = e | c; |
2166 | + t8 = f | h; |
2167 | + t11 = e | h; |
2168 | + t9 = t4 & t7; |
2169 | + b = t8 ^ t9; |
2170 | + t12 = f ^ t11; |
2171 | + t13 = c ^ t9; |
2172 | + t15 = t3 ^ t8; |
2173 | + d = t12 ^ t13; |
2174 | + t16 = g & t15; |
2175 | + a = t12 ^ t16 |
2176 | + a = rotl32(a, 13) |
2177 | + c = rotl32(c, 3) |
2178 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2179 | + b ^= a ^ c |
2180 | + d = rotl32(d, 7) |
2181 | + b = rotl32(b, 1) |
2182 | + a ^= b ^ d |
2183 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2184 | + a = rotl32(a, 5) |
2185 | + c = rotl32(c, 22) |
2186 | + a ^= key[4 * 28 + 8] |
2187 | + b ^= key[4 * 28 + 9] |
2188 | + c ^= key[4 * 28 + 10] |
2189 | + d ^= key[4 * 28 + 11] |
2190 | + t1 = a ^ d; |
2191 | + t2 = d & t1; |
2192 | + t3 = c ^ t2; |
2193 | + t4 = b | t3; |
2194 | + h = t1 ^ t4; |
2195 | + t6 = (~b) % 0x100000000; |
2196 | + t7 = t1 | t6; |
2197 | + e = t3 ^ t7; |
2198 | + t9 = a & e; |
2199 | + t10 = t1 ^ t6; |
2200 | + t11 = t4 & t10; |
2201 | + g = t9 ^ t11; |
2202 | + t13 = a ^ t3; |
2203 | + t14 = t10 & g; |
2204 | + f = t13 ^ t14 |
2205 | + e = rotl32(e, 13) |
2206 | + g = rotl32(g, 3) |
2207 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2208 | + f ^= e ^ g |
2209 | + h = rotl32(h, 7) |
2210 | + f = rotl32(f, 1) |
2211 | + e ^= f ^ h |
2212 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2213 | + e = rotl32(e, 5) |
2214 | + g = rotl32(g, 22) |
2215 | + e ^= key[4 * 29 + 8] |
2216 | + f ^= key[4 * 29 + 9] |
2217 | + g ^= key[4 * 29 + 10] |
2218 | + h ^= key[4 * 29 + 11] |
2219 | + t1 = (~e) % 0x100000000; |
2220 | + t2 = e ^ f; |
2221 | + t3 = e ^ h; |
2222 | + t4 = g ^ t1; |
2223 | + t5 = t2 | t3; |
2224 | + a = t4 ^ t5; |
2225 | + t7 = h & a; |
2226 | + t8 = t2 ^ a; |
2227 | + t10 = t1 | a; |
2228 | + b = t7 ^ t8; |
2229 | + t11 = t2 | t7; |
2230 | + t12 = t3 ^ t10; |
2231 | + t14 = f ^ t7; |
2232 | + c = t11 ^ t12; |
2233 | + t15 = b & t12; |
2234 | + d = t14 ^ t15 |
2235 | + a = rotl32(a, 13) |
2236 | + c = rotl32(c, 3) |
2237 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2238 | + b ^= a ^ c |
2239 | + d = rotl32(d, 7) |
2240 | + b = rotl32(b, 1) |
2241 | + a ^= b ^ d |
2242 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2243 | + a = rotl32(a, 5) |
2244 | + c = rotl32(c, 22) |
2245 | + a ^= key[4 * 30 + 8] |
2246 | + b ^= key[4 * 30 + 9] |
2247 | + c ^= key[4 * 30 + 10] |
2248 | + d ^= key[4 * 30 + 11] |
2249 | + t1 = (~a) % 0x100000000; |
2250 | + t2 = a ^ d; |
2251 | + t3 = b ^ t2; |
2252 | + t4 = t1 | t2; |
2253 | + t5 = c ^ t4; |
2254 | + f = b ^ t5; |
2255 | + t13 = (~t5) % 0x100000000; |
2256 | + t7 = t2 | f; |
2257 | + t8 = d ^ t7; |
2258 | + t9 = t5 & t8; |
2259 | + g = t3 ^ t9; |
2260 | + t11 = t5 ^ t8; |
2261 | + e = g ^ t11; |
2262 | + t14 = t3 & t11; |
2263 | + h = t13 ^ t14 |
2264 | + e = rotl32(e, 13) |
2265 | + g = rotl32(g, 3) |
2266 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2267 | + f ^= e ^ g |
2268 | + h = rotl32(h, 7) |
2269 | + f = rotl32(f, 1) |
2270 | + e ^= f ^ h |
2271 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2272 | + e = rotl32(e, 5) |
2273 | + g = rotl32(g, 22) |
2274 | + e ^= key[4 * 31 + 8] |
2275 | + f ^= key[4 * 31 + 9] |
2276 | + g ^= key[4 * 31 + 10] |
2277 | + h ^= key[4 * 31 + 11] |
2278 | + t1 = (~g) % 0x100000000; |
2279 | + t2 = f ^ g; |
2280 | + t3 = f | t1; |
2281 | + t4 = h ^ t3; |
2282 | + t5 = e & t4; |
2283 | + t7 = e ^ h; |
2284 | + d = t2 ^ t5; |
2285 | + t8 = f ^ t5; |
2286 | + t9 = t2 | t8; |
2287 | + t11 = h & t3; |
2288 | + b = t7 ^ t9; |
2289 | + t12 = t5 ^ b; |
2290 | + t15 = t1 | t4; |
2291 | + t13 = d & t12; |
2292 | + c = t11 ^ t13; |
2293 | + t16 = t12 ^ c; |
2294 | + a = t15 ^ t16 |
2295 | + a ^= key[4 * 32 + 8] |
2296 | + b ^= key[4 * 32 + 9] |
2297 | + c ^= key[4 * 32 + 10] |
2298 | + d ^= key[4 * 32 + 11] |
2299 | + if WORD_BIGENDIAN: |
2300 | + a = byteswap32(a) |
2301 | + b = byteswap32(b) |
2302 | + c = byteswap32(c) |
2303 | + d = byteswap32(d) |
2304 | + in_blk[0] = a |
2305 | + in_blk[1] = b |
2306 | + in_blk[2] = c |
2307 | + in_blk[3] = d |
2308 | + |
2309 | +def decrypt(key, in_blk): |
2310 | + # serpent_generate.py |
2311 | + a = in_blk[0] |
2312 | + b = in_blk[1] |
2313 | + c = in_blk[2] |
2314 | + d = in_blk[3] |
2315 | + if WORD_BIGENDIAN: |
2316 | + a = byteswap32(a) |
2317 | + b = byteswap32(b) |
2318 | + c = byteswap32(c) |
2319 | + d = byteswap32(d) |
2320 | + e = 0 |
2321 | + f = 0 |
2322 | + g = 0 |
2323 | + h = 0 |
2324 | + t1 = 0 |
2325 | + t2 = 0 |
2326 | + t3 = 0 |
2327 | + t4 = 0 |
2328 | + t5 = 0 |
2329 | + t6 = 0 |
2330 | + t7 = 0 |
2331 | + t8 = 0 |
2332 | + t9 = 0 |
2333 | + t10 = 0 |
2334 | + t11 = 0 |
2335 | + t12 = 0 |
2336 | + t13 = 0 |
2337 | + t14 = 0 |
2338 | + t15 = 0 |
2339 | + t16 = 0 |
2340 | + a ^= key[4 * 32 + 8] |
2341 | + b ^= key[4 * 32 + 9] |
2342 | + c ^= key[4 * 32 + 10] |
2343 | + d ^= key[4 * 32 + 11] |
2344 | + t1 = a & b; |
2345 | + t2 = a | b; |
2346 | + t3 = c | t1; |
2347 | + t4 = d & t2; |
2348 | + h = t3 ^ t4; |
2349 | + t6 = (~d) % 0x100000000; |
2350 | + t7 = b ^ t4; |
2351 | + t8 = h ^ t6; |
2352 | + t11 = c ^ t7; |
2353 | + t9 = t7 | t8; |
2354 | + f = a ^ t9; |
2355 | + t12 = d | f; |
2356 | + e = t11 ^ t12; |
2357 | + t14 = a & h; |
2358 | + t15 = t3 ^ f; |
2359 | + t16 = e ^ t14; |
2360 | + g = t15 ^ t16 |
2361 | + e ^= key[4 * 31 + 8] |
2362 | + f ^= key[4 * 31 + 9] |
2363 | + g ^= key[4 * 31 + 10] |
2364 | + h ^= key[4 * 31 + 11] |
2365 | + g = rotr32(g, 22) |
2366 | + e = rotr32(e, 5) |
2367 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2368 | + e ^= f ^ h |
2369 | + h = rotr32(h, 7) |
2370 | + f = rotr32(f, 1) |
2371 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2372 | + f ^= e ^ g |
2373 | + g = rotr32(g, 3) |
2374 | + e = rotr32(e, 13) |
2375 | + t1 = (~e) % 0x100000000; |
2376 | + t2 = e ^ f; |
2377 | + t3 = g ^ t2; |
2378 | + t4 = g | t1; |
2379 | + t5 = h ^ t4; |
2380 | + t13 = h & t1; |
2381 | + b = t3 ^ t5; |
2382 | + t7 = t3 & t5; |
2383 | + t8 = t2 ^ t7; |
2384 | + t9 = f | t8; |
2385 | + d = t5 ^ t9; |
2386 | + t11 = f | d; |
2387 | + a = t8 ^ t11; |
2388 | + t14 = t3 ^ t11; |
2389 | + c = t13 ^ t14 |
2390 | + a ^= key[4 * 30 + 8] |
2391 | + b ^= key[4 * 30 + 9] |
2392 | + c ^= key[4 * 30 + 10] |
2393 | + d ^= key[4 * 30 + 11] |
2394 | + c = rotr32(c, 22) |
2395 | + a = rotr32(a, 5) |
2396 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2397 | + a ^= b ^ d |
2398 | + d = rotr32(d, 7) |
2399 | + b = rotr32(b, 1) |
2400 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2401 | + b ^= a ^ c |
2402 | + c = rotr32(c, 3) |
2403 | + a = rotr32(a, 13) |
2404 | + t1 = (~c) % 0x100000000; |
2405 | + t2 = b & t1; |
2406 | + t3 = d ^ t2; |
2407 | + t4 = a & t3; |
2408 | + t5 = b ^ t1; |
2409 | + h = t4 ^ t5; |
2410 | + t7 = b | h; |
2411 | + t8 = a & t7; |
2412 | + f = t3 ^ t8; |
2413 | + t10 = a | d; |
2414 | + t11 = t1 ^ t7; |
2415 | + e = t10 ^ t11; |
2416 | + t13 = a ^ c; |
2417 | + t14 = b & t10; |
2418 | + t15 = t4 | t13; |
2419 | + g = t14 ^ t15 |
2420 | + e ^= key[4 * 29 + 8] |
2421 | + f ^= key[4 * 29 + 9] |
2422 | + g ^= key[4 * 29 + 10] |
2423 | + h ^= key[4 * 29 + 11] |
2424 | + g = rotr32(g, 22) |
2425 | + e = rotr32(e, 5) |
2426 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2427 | + e ^= f ^ h |
2428 | + h = rotr32(h, 7) |
2429 | + f = rotr32(f, 1) |
2430 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2431 | + f ^= e ^ g |
2432 | + g = rotr32(g, 3) |
2433 | + e = rotr32(e, 13) |
2434 | + t1 = g ^ h; |
2435 | + t2 = g | h; |
2436 | + t3 = f ^ t2; |
2437 | + t4 = e & t3; |
2438 | + b = t1 ^ t4; |
2439 | + t6 = e ^ h; |
2440 | + t7 = f | h; |
2441 | + t8 = t6 & t7; |
2442 | + d = t3 ^ t8; |
2443 | + t10 = (~e) % 0x100000000; |
2444 | + t11 = g ^ d; |
2445 | + t12 = t10 | t11; |
2446 | + a = t3 ^ t12; |
2447 | + t14 = g | t4; |
2448 | + t15 = t7 ^ t14; |
2449 | + t16 = d | t10; |
2450 | + c = t15 ^ t16 |
2451 | + a ^= key[4 * 28 + 8] |
2452 | + b ^= key[4 * 28 + 9] |
2453 | + c ^= key[4 * 28 + 10] |
2454 | + d ^= key[4 * 28 + 11] |
2455 | + c = rotr32(c, 22) |
2456 | + a = rotr32(a, 5) |
2457 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2458 | + a ^= b ^ d |
2459 | + d = rotr32(d, 7) |
2460 | + b = rotr32(b, 1) |
2461 | + |
2462 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2463 | + b ^= a ^ c |
2464 | + c = rotr32(c, 3) |
2465 | + a = rotr32(a, 13) |
2466 | + t1 = b ^ c; |
2467 | + t2 = b | c; |
2468 | + t3 = a ^ c; |
2469 | + t7 = a ^ d; |
2470 | + t4 = t2 ^ t3; |
2471 | + t5 = d | t4; |
2472 | + t9 = t2 ^ t7; |
2473 | + e = t1 ^ t5; |
2474 | + t8 = t1 | t5; |
2475 | + t11 = a & t4; |
2476 | + g = t8 ^ t9; |
2477 | + t12 = e | t9; |
2478 | + f = t11 ^ t12; |
2479 | + t14 = a & g; |
2480 | + t15 = t2 ^ t14; |
2481 | + t16 = e & t15; |
2482 | + h = t4 ^ t16 |
2483 | + e ^= key[4 * 27 + 8] |
2484 | + f ^= key[4 * 27 + 9] |
2485 | + g ^= key[4 * 27 + 10] |
2486 | + h ^= key[4 * 27 + 11] |
2487 | + g = rotr32(g, 22) |
2488 | + e = rotr32(e, 5) |
2489 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2490 | + e ^= f ^ h |
2491 | + h = rotr32(h, 7) |
2492 | + f = rotr32(f, 1) |
2493 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2494 | + f ^= e ^ g |
2495 | + g = rotr32(g, 3) |
2496 | + e = rotr32(e, 13) |
2497 | + t1 = f ^ h; |
2498 | + t2 = (~t1) % 0x100000000; |
2499 | + t3 = e ^ g; |
2500 | + t4 = g ^ t1; |
2501 | + t7 = e | t2; |
2502 | + t5 = f & t4; |
2503 | + t8 = h ^ t7; |
2504 | + t11 = (~t4) % 0x100000000; |
2505 | + a = t3 ^ t5; |
2506 | + t9 = t3 | t8; |
2507 | + t14 = h & t11; |
2508 | + d = t1 ^ t9; |
2509 | + t12 = a | d; |
2510 | + b = t11 ^ t12; |
2511 | + t15 = t3 ^ t12; |
2512 | + c = t14 ^ t15 |
2513 | + a ^= key[4 * 26 + 8] |
2514 | + b ^= key[4 * 26 + 9] |
2515 | + c ^= key[4 * 26 + 10] |
2516 | + d ^= key[4 * 26 + 11] |
2517 | + c = rotr32(c, 22) |
2518 | + a = rotr32(a, 5) |
2519 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2520 | + a ^= b ^ d |
2521 | + d = rotr32(d, 7) |
2522 | + b = rotr32(b, 1) |
2523 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2524 | + b ^= a ^ c |
2525 | + c = rotr32(c, 3) |
2526 | + a = rotr32(a, 13) |
2527 | + t1 = a ^ d; |
2528 | + t2 = a & b; |
2529 | + t3 = b ^ c; |
2530 | + t4 = a ^ t3; |
2531 | + t5 = b | d; |
2532 | + t7 = c | t1; |
2533 | + h = t4 ^ t5; |
2534 | + t8 = b ^ t7; |
2535 | + t11 = (~t2) % 0x100000000; |
2536 | + t9 = t4 & t8; |
2537 | + f = t1 ^ t9; |
2538 | + t13 = t9 ^ t11; |
2539 | + t12 = h & f; |
2540 | + g = t12 ^ t13; |
2541 | + t15 = a & d; |
2542 | + t16 = c ^ t13; |
2543 | + e = t15 ^ t16 |
2544 | + e ^= key[4 * 25 + 8] |
2545 | + f ^= key[4 * 25 + 9] |
2546 | + g ^= key[4 * 25 + 10] |
2547 | + h ^= key[4 * 25 + 11] |
2548 | + g = rotr32(g, 22) |
2549 | + e = rotr32(e, 5) |
2550 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2551 | + e ^= f ^ h |
2552 | + h = rotr32(h, 7) |
2553 | + f = rotr32(f, 1) |
2554 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2555 | + f ^= e ^ g |
2556 | + g = rotr32(g, 3) |
2557 | + e = rotr32(e, 13) |
2558 | + t1 = (~e) % 0x100000000 |
2559 | + t2 = e ^ f |
2560 | + t3 = t1 | t2 |
2561 | + t4 = h ^ t3 |
2562 | + t7 = h & t2 |
2563 | + t5 = g ^ t4 |
2564 | + t8 = t1 ^ t7 |
2565 | + c = t2 ^ t5 |
2566 | + t11 = e & t4 |
2567 | + t9 = c & t8 |
2568 | + t14 = t5 ^ t8 |
2569 | + b = t4 ^ t9 |
2570 | + t12 = t5 | b |
2571 | + d = t11 ^ t12 |
2572 | + a = d ^ t14 |
2573 | + a ^= key[4 * 24 + 8] |
2574 | + b ^= key[4 * 24 + 9] |
2575 | + c ^= key[4 * 24 + 10] |
2576 | + d ^= key[4 * 24 + 11] |
2577 | + c = rotr32(c, 22) |
2578 | + a = rotr32(a, 5) |
2579 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2580 | + a ^= b ^ d |
2581 | + d = rotr32(d, 7) |
2582 | + b = rotr32(b, 1) |
2583 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2584 | + b ^= a ^ c |
2585 | + c = rotr32(c, 3) |
2586 | + a = rotr32(a, 13) |
2587 | + t1 = a & b; |
2588 | + t2 = a | b; |
2589 | + t3 = c | t1; |
2590 | + t4 = d & t2; |
2591 | + h = t3 ^ t4; |
2592 | + t6 = (~d) % 0x100000000; |
2593 | + t7 = b ^ t4; |
2594 | + t8 = h ^ t6; |
2595 | + t11 = c ^ t7; |
2596 | + t9 = t7 | t8; |
2597 | + f = a ^ t9; |
2598 | + t12 = d | f; |
2599 | + e = t11 ^ t12; |
2600 | + t14 = a & h; |
2601 | + t15 = t3 ^ f; |
2602 | + t16 = e ^ t14; |
2603 | + g = t15 ^ t16 |
2604 | + e ^= key[4 * 23 + 8] |
2605 | + f ^= key[4 * 23 + 9] |
2606 | + g ^= key[4 * 23 + 10] |
2607 | + h ^= key[4 * 23 + 11] |
2608 | + g = rotr32(g, 22) |
2609 | + e = rotr32(e, 5) |
2610 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2611 | + e ^= f ^ h |
2612 | + h = rotr32(h, 7) |
2613 | + f = rotr32(f, 1) |
2614 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2615 | + f ^= e ^ g |
2616 | + g = rotr32(g, 3) |
2617 | + e = rotr32(e, 13) |
2618 | + t1 = (~e) % 0x100000000; |
2619 | + t2 = e ^ f; |
2620 | + t3 = g ^ t2; |
2621 | + t4 = g | t1; |
2622 | + t5 = h ^ t4; |
2623 | + t13 = h & t1; |
2624 | + b = t3 ^ t5; |
2625 | + t7 = t3 & t5; |
2626 | + t8 = t2 ^ t7; |
2627 | + t9 = f | t8; |
2628 | + d = t5 ^ t9; |
2629 | + t11 = f | d; |
2630 | + a = t8 ^ t11; |
2631 | + t14 = t3 ^ t11; |
2632 | + c = t13 ^ t14 |
2633 | + a ^= key[4 * 22 + 8] |
2634 | + b ^= key[4 * 22 + 9] |
2635 | + c ^= key[4 * 22 + 10] |
2636 | + d ^= key[4 * 22 + 11] |
2637 | + c = rotr32(c, 22) |
2638 | + a = rotr32(a, 5) |
2639 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2640 | + a ^= b ^ d |
2641 | + d = rotr32(d, 7) |
2642 | + b = rotr32(b, 1) |
2643 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2644 | + b ^= a ^ c |
2645 | + c = rotr32(c, 3) |
2646 | + a = rotr32(a, 13) |
2647 | + t1 = (~c) % 0x100000000; |
2648 | + t2 = b & t1; |
2649 | + t3 = d ^ t2; |
2650 | + t4 = a & t3; |
2651 | + t5 = b ^ t1; |
2652 | + h = t4 ^ t5; |
2653 | + t7 = b | h; |
2654 | + t8 = a & t7; |
2655 | + f = t3 ^ t8; |
2656 | + t10 = a | d; |
2657 | + t11 = t1 ^ t7; |
2658 | + e = t10 ^ t11; |
2659 | + t13 = a ^ c; |
2660 | + t14 = b & t10; |
2661 | + t15 = t4 | t13; |
2662 | + g = t14 ^ t15 |
2663 | + e ^= key[4 * 21 + 8] |
2664 | + f ^= key[4 * 21 + 9] |
2665 | + g ^= key[4 * 21 + 10] |
2666 | + h ^= key[4 * 21 + 11] |
2667 | + g = rotr32(g, 22) |
2668 | + e = rotr32(e, 5) |
2669 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2670 | + e ^= f ^ h |
2671 | + h = rotr32(h, 7) |
2672 | + f = rotr32(f, 1) |
2673 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2674 | + f ^= e ^ g |
2675 | + g = rotr32(g, 3) |
2676 | + e = rotr32(e, 13) |
2677 | + t1 = g ^ h; |
2678 | + t2 = g | h; |
2679 | + t3 = f ^ t2; |
2680 | + t4 = e & t3; |
2681 | + b = t1 ^ t4; |
2682 | + t6 = e ^ h; |
2683 | + t7 = f | h; |
2684 | + t8 = t6 & t7; |
2685 | + d = t3 ^ t8; |
2686 | + t10 = (~e) % 0x100000000; |
2687 | + t11 = g ^ d; |
2688 | + t12 = t10 | t11; |
2689 | + a = t3 ^ t12; |
2690 | + t14 = g | t4; |
2691 | + t15 = t7 ^ t14; |
2692 | + t16 = d | t10; |
2693 | + c = t15 ^ t16 |
2694 | + a ^= key[4 * 20 + 8] |
2695 | + b ^= key[4 * 20 + 9] |
2696 | + c ^= key[4 * 20 + 10] |
2697 | + d ^= key[4 * 20 + 11] |
2698 | + c = rotr32(c, 22) |
2699 | + a = rotr32(a, 5) |
2700 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2701 | + a ^= b ^ d |
2702 | + d = rotr32(d, 7) |
2703 | + b = rotr32(b, 1) |
2704 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2705 | + b ^= a ^ c |
2706 | + c = rotr32(c, 3) |
2707 | + a = rotr32(a, 13) |
2708 | + t1 = b ^ c; |
2709 | + t2 = b | c; |
2710 | + t3 = a ^ c; |
2711 | + t7 = a ^ d; |
2712 | + t4 = t2 ^ t3; |
2713 | + t5 = d | t4; |
2714 | + t9 = t2 ^ t7; |
2715 | + e = t1 ^ t5; |
2716 | + t8 = t1 | t5; |
2717 | + t11 = a & t4; |
2718 | + g = t8 ^ t9; |
2719 | + t12 = e | t9; |
2720 | + f = t11 ^ t12; |
2721 | + t14 = a & g; |
2722 | + t15 = t2 ^ t14; |
2723 | + t16 = e & t15; |
2724 | + h = t4 ^ t16 |
2725 | + e ^= key[4 * 19 + 8] |
2726 | + f ^= key[4 * 19 + 9] |
2727 | + g ^= key[4 * 19 + 10] |
2728 | + h ^= key[4 * 19 + 11] |
2729 | + g = rotr32(g, 22) |
2730 | + e = rotr32(e, 5) |
2731 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2732 | + e ^= f ^ h |
2733 | + h = rotr32(h, 7) |
2734 | + f = rotr32(f, 1) |
2735 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2736 | + f ^= e ^ g |
2737 | + g = rotr32(g, 3) |
2738 | + e = rotr32(e, 13) |
2739 | + t1 = f ^ h; |
2740 | + t2 = (~t1) % 0x100000000; |
2741 | + t3 = e ^ g; |
2742 | + t4 = g ^ t1; |
2743 | + t7 = e | t2; |
2744 | + t5 = f & t4; |
2745 | + t8 = h ^ t7; |
2746 | + t11 = (~t4) % 0x100000000; |
2747 | + a = t3 ^ t5; |
2748 | + t9 = t3 | t8; |
2749 | + t14 = h & t11; |
2750 | + d = t1 ^ t9; |
2751 | + t12 = a | d; |
2752 | + b = t11 ^ t12; |
2753 | + t15 = t3 ^ t12; |
2754 | + c = t14 ^ t15 |
2755 | + a ^= key[4 * 18 + 8] |
2756 | + b ^= key[4 * 18 + 9] |
2757 | + c ^= key[4 * 18 + 10] |
2758 | + d ^= key[4 * 18 + 11] |
2759 | + c = rotr32(c, 22) |
2760 | + a = rotr32(a, 5) |
2761 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2762 | + a ^= b ^ d |
2763 | + d = rotr32(d, 7) |
2764 | + b = rotr32(b, 1) |
2765 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2766 | + b ^= a ^ c |
2767 | + c = rotr32(c, 3) |
2768 | + a = rotr32(a, 13) |
2769 | + t1 = a ^ d; |
2770 | + t2 = a & b; |
2771 | + t3 = b ^ c; |
2772 | + t4 = a ^ t3; |
2773 | + t5 = b | d; |
2774 | + t7 = c | t1; |
2775 | + h = t4 ^ t5; |
2776 | + t8 = b ^ t7; |
2777 | + t11 = (~t2) % 0x100000000; |
2778 | + t9 = t4 & t8; |
2779 | + f = t1 ^ t9; |
2780 | + t13 = t9 ^ t11; |
2781 | + t12 = h & f; |
2782 | + g = t12 ^ t13; |
2783 | + t15 = a & d; |
2784 | + t16 = c ^ t13; |
2785 | + e = t15 ^ t16 |
2786 | + e ^= key[4 * 17 + 8] |
2787 | + f ^= key[4 * 17 + 9] |
2788 | + g ^= key[4 * 17 + 10] |
2789 | + h ^= key[4 * 17 + 11] |
2790 | + g = rotr32(g, 22) |
2791 | + e = rotr32(e, 5) |
2792 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2793 | + e ^= f ^ h |
2794 | + h = rotr32(h, 7) |
2795 | + f = rotr32(f, 1) |
2796 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2797 | + f ^= e ^ g |
2798 | + g = rotr32(g, 3) |
2799 | + e = rotr32(e, 13) |
2800 | + t1 = (~e) % 0x100000000 |
2801 | + t2 = e ^ f |
2802 | + t3 = t1 | t2 |
2803 | + t4 = h ^ t3 |
2804 | + t7 = h & t2 |
2805 | + t5 = g ^ t4 |
2806 | + t8 = t1 ^ t7 |
2807 | + c = t2 ^ t5 |
2808 | + t11 = e & t4 |
2809 | + t9 = c & t8 |
2810 | + t14 = t5 ^ t8 |
2811 | + b = t4 ^ t9 |
2812 | + t12 = t5 | b |
2813 | + d = t11 ^ t12 |
2814 | + a = d ^ t14 |
2815 | + a ^= key[4 * 16 + 8] |
2816 | + b ^= key[4 * 16 + 9] |
2817 | + c ^= key[4 * 16 + 10] |
2818 | + d ^= key[4 * 16 + 11] |
2819 | + c = rotr32(c, 22) |
2820 | + a = rotr32(a, 5) |
2821 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2822 | + a ^= b ^ d |
2823 | + d = rotr32(d, 7) |
2824 | + b = rotr32(b, 1) |
2825 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2826 | + b ^= a ^ c |
2827 | + c = rotr32(c, 3) |
2828 | + a = rotr32(a, 13) |
2829 | + t1 = a & b; |
2830 | + t2 = a | b; |
2831 | + t3 = c | t1; |
2832 | + t4 = d & t2; |
2833 | + h = t3 ^ t4; |
2834 | + t6 = (~d) % 0x100000000; |
2835 | + t7 = b ^ t4; |
2836 | + t8 = h ^ t6; |
2837 | + t11 = c ^ t7; |
2838 | + t9 = t7 | t8; |
2839 | + f = a ^ t9; |
2840 | + t12 = d | f; |
2841 | + e = t11 ^ t12; |
2842 | + t14 = a & h; |
2843 | + t15 = t3 ^ f; |
2844 | + t16 = e ^ t14; |
2845 | + g = t15 ^ t16 |
2846 | + e ^= key[4 * 15 + 8] |
2847 | + f ^= key[4 * 15 + 9] |
2848 | + g ^= key[4 * 15 + 10] |
2849 | + h ^= key[4 * 15 + 11] |
2850 | + g = rotr32(g, 22) |
2851 | + e = rotr32(e, 5) |
2852 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2853 | + e ^= f ^ h |
2854 | + h = rotr32(h, 7) |
2855 | + f = rotr32(f, 1) |
2856 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2857 | + f ^= e ^ g |
2858 | + g = rotr32(g, 3) |
2859 | + e = rotr32(e, 13) |
2860 | + t1 = (~e) % 0x100000000; |
2861 | + t2 = e ^ f; |
2862 | + t3 = g ^ t2; |
2863 | + t4 = g | t1; |
2864 | + t5 = h ^ t4; |
2865 | + t13 = h & t1; |
2866 | + b = t3 ^ t5; |
2867 | + t7 = t3 & t5; |
2868 | + t8 = t2 ^ t7; |
2869 | + t9 = f | t8; |
2870 | + d = t5 ^ t9; |
2871 | + t11 = f | d; |
2872 | + a = t8 ^ t11; |
2873 | + t14 = t3 ^ t11; |
2874 | + c = t13 ^ t14 |
2875 | + a ^= key[4 * 14 + 8] |
2876 | + b ^= key[4 * 14 + 9] |
2877 | + c ^= key[4 * 14 + 10] |
2878 | + d ^= key[4 * 14 + 11] |
2879 | + c = rotr32(c, 22) |
2880 | + a = rotr32(a, 5) |
2881 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2882 | + a ^= b ^ d |
2883 | + d = rotr32(d, 7) |
2884 | + b = rotr32(b, 1) |
2885 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2886 | + b ^= a ^ c |
2887 | + c = rotr32(c, 3) |
2888 | + a = rotr32(a, 13) |
2889 | + t1 = (~c) % 0x100000000; |
2890 | + t2 = b & t1; |
2891 | + t3 = d ^ t2; |
2892 | + t4 = a & t3; |
2893 | + t5 = b ^ t1; |
2894 | + h = t4 ^ t5; |
2895 | + t7 = b | h; |
2896 | + t8 = a & t7; |
2897 | + f = t3 ^ t8; |
2898 | + t10 = a | d; |
2899 | + t11 = t1 ^ t7; |
2900 | + e = t10 ^ t11; |
2901 | + t13 = a ^ c; |
2902 | + t14 = b & t10; |
2903 | + t15 = t4 | t13; |
2904 | + g = t14 ^ t15 |
2905 | + e ^= key[4 * 13 + 8] |
2906 | + f ^= key[4 * 13 + 9] |
2907 | + g ^= key[4 * 13 + 10] |
2908 | + h ^= key[4 * 13 + 11] |
2909 | + g = rotr32(g, 22) |
2910 | + e = rotr32(e, 5) |
2911 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2912 | + e ^= f ^ h |
2913 | + h = rotr32(h, 7) |
2914 | + f = rotr32(f, 1) |
2915 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2916 | + f ^= e ^ g |
2917 | + g = rotr32(g, 3) |
2918 | + e = rotr32(e, 13) |
2919 | + t1 = g ^ h; |
2920 | + t2 = g | h; |
2921 | + t3 = f ^ t2; |
2922 | + t4 = e & t3; |
2923 | + b = t1 ^ t4; |
2924 | + t6 = e ^ h; |
2925 | + t7 = f | h; |
2926 | + t8 = t6 & t7; |
2927 | + d = t3 ^ t8; |
2928 | + t10 = (~e) % 0x100000000; |
2929 | + t11 = g ^ d; |
2930 | + t12 = t10 | t11; |
2931 | + a = t3 ^ t12; |
2932 | + t14 = g | t4; |
2933 | + t15 = t7 ^ t14; |
2934 | + t16 = d | t10; |
2935 | + c = t15 ^ t16 |
2936 | + a ^= key[4 * 12 + 8] |
2937 | + b ^= key[4 * 12 + 9] |
2938 | + c ^= key[4 * 12 + 10] |
2939 | + d ^= key[4 * 12 + 11] |
2940 | + c = rotr32(c, 22) |
2941 | + a = rotr32(a, 5) |
2942 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
2943 | + a ^= b ^ d |
2944 | + d = rotr32(d, 7) |
2945 | + b = rotr32(b, 1) |
2946 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
2947 | + b ^= a ^ c |
2948 | + c = rotr32(c, 3) |
2949 | + a = rotr32(a, 13) |
2950 | + t1 = b ^ c; |
2951 | + t2 = b | c; |
2952 | + t3 = a ^ c; |
2953 | + t7 = a ^ d; |
2954 | + t4 = t2 ^ t3; |
2955 | + t5 = d | t4; |
2956 | + t9 = t2 ^ t7; |
2957 | + e = t1 ^ t5; |
2958 | + t8 = t1 | t5; |
2959 | + t11 = a & t4; |
2960 | + g = t8 ^ t9; |
2961 | + t12 = e | t9; |
2962 | + f = t11 ^ t12; |
2963 | + t14 = a & g; |
2964 | + t15 = t2 ^ t14; |
2965 | + t16 = e & t15; |
2966 | + h = t4 ^ t16 |
2967 | + e ^= key[4 * 11 + 8] |
2968 | + f ^= key[4 * 11 + 9] |
2969 | + g ^= key[4 * 11 + 10] |
2970 | + h ^= key[4 * 11 + 11] |
2971 | + g = rotr32(g, 22) |
2972 | + e = rotr32(e, 5) |
2973 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
2974 | + e ^= f ^ h |
2975 | + h = rotr32(h, 7) |
2976 | + f = rotr32(f, 1) |
2977 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
2978 | + f ^= e ^ g |
2979 | + g = rotr32(g, 3) |
2980 | + e = rotr32(e, 13) |
2981 | + t1 = f ^ h; |
2982 | + t2 = (~t1) % 0x100000000; |
2983 | + t3 = e ^ g; |
2984 | + t4 = g ^ t1; |
2985 | + t7 = e | t2; |
2986 | + t5 = f & t4; |
2987 | + t8 = h ^ t7; |
2988 | + t11 = (~t4) % 0x100000000; |
2989 | + a = t3 ^ t5; |
2990 | + t9 = t3 | t8; |
2991 | + t14 = h & t11; |
2992 | + d = t1 ^ t9; |
2993 | + t12 = a | d; |
2994 | + b = t11 ^ t12; |
2995 | + t15 = t3 ^ t12; |
2996 | + c = t14 ^ t15 |
2997 | + a ^= key[4 * 10 + 8] |
2998 | + b ^= key[4 * 10 + 9] |
2999 | + c ^= key[4 * 10 + 10] |
3000 | + d ^= key[4 * 10 + 11] |
3001 | + c = rotr32(c, 22) |
3002 | + a = rotr32(a, 5) |
3003 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
3004 | + a ^= b ^ d |
3005 | + d = rotr32(d, 7) |
3006 | + b = rotr32(b, 1) |
3007 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
3008 | + b ^= a ^ c |
3009 | + c = rotr32(c, 3) |
3010 | + a = rotr32(a, 13) |
3011 | + t1 = a ^ d; |
3012 | + t2 = a & b; |
3013 | + t3 = b ^ c; |
3014 | + t4 = a ^ t3; |
3015 | + t5 = b | d; |
3016 | + t7 = c | t1; |
3017 | + h = t4 ^ t5; |
3018 | + t8 = b ^ t7; |
3019 | + t11 = (~t2) % 0x100000000; |
3020 | + t9 = t4 & t8; |
3021 | + f = t1 ^ t9; |
3022 | + t13 = t9 ^ t11; |
3023 | + t12 = h & f; |
3024 | + g = t12 ^ t13; |
3025 | + t15 = a & d; |
3026 | + t16 = c ^ t13; |
3027 | + e = t15 ^ t16 |
3028 | + e ^= key[4 * 9 + 8] |
3029 | + f ^= key[4 * 9 + 9] |
3030 | + g ^= key[4 * 9 + 10] |
3031 | + h ^= key[4 * 9 + 11] |
3032 | + g = rotr32(g, 22) |
3033 | + e = rotr32(e, 5) |
3034 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
3035 | + e ^= f ^ h |
3036 | + h = rotr32(h, 7) |
3037 | + f = rotr32(f, 1) |
3038 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
3039 | + f ^= e ^ g |
3040 | + g = rotr32(g, 3) |
3041 | + e = rotr32(e, 13) |
3042 | + t1 = (~e) % 0x100000000 |
3043 | + t2 = e ^ f |
3044 | + t3 = t1 | t2 |
3045 | + t4 = h ^ t3 |
3046 | + t7 = h & t2 |
3047 | + t5 = g ^ t4 |
3048 | + t8 = t1 ^ t7 |
3049 | + c = t2 ^ t5 |
3050 | + t11 = e & t4 |
3051 | + t9 = c & t8 |
3052 | + t14 = t5 ^ t8 |
3053 | + b = t4 ^ t9 |
3054 | + t12 = t5 | b |
3055 | + d = t11 ^ t12 |
3056 | + a = d ^ t14 |
3057 | + a ^= key[4 * 8 + 8] |
3058 | + b ^= key[4 * 8 + 9] |
3059 | + c ^= key[4 * 8 + 10] |
3060 | + d ^= key[4 * 8 + 11] |
3061 | + c = rotr32(c, 22) |
3062 | + a = rotr32(a, 5) |
3063 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
3064 | + a ^= b ^ d |
3065 | + d = rotr32(d, 7) |
3066 | + b = rotr32(b, 1) |
3067 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
3068 | + b ^= a ^ c |
3069 | + c = rotr32(c, 3) |
3070 | + a = rotr32(a, 13) |
3071 | + t1 = a & b; |
3072 | + t2 = a | b; |
3073 | + t3 = c | t1; |
3074 | + t4 = d & t2; |
3075 | + h = t3 ^ t4; |
3076 | + t6 = (~d) % 0x100000000; |
3077 | + t7 = b ^ t4; |
3078 | + t8 = h ^ t6; |
3079 | + t11 = c ^ t7; |
3080 | + t9 = t7 | t8; |
3081 | + f = a ^ t9; |
3082 | + t12 = d | f; |
3083 | + e = t11 ^ t12; |
3084 | + t14 = a & h; |
3085 | + t15 = t3 ^ f; |
3086 | + t16 = e ^ t14; |
3087 | + g = t15 ^ t16 |
3088 | + e ^= key[4 * 7 + 8] |
3089 | + f ^= key[4 * 7 + 9] |
3090 | + g ^= key[4 * 7 + 10] |
3091 | + h ^= key[4 * 7 + 11] |
3092 | + g = rotr32(g, 22) |
3093 | + e = rotr32(e, 5) |
3094 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
3095 | + e ^= f ^ h |
3096 | + h = rotr32(h, 7) |
3097 | + f = rotr32(f, 1) |
3098 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
3099 | + f ^= e ^ g |
3100 | + g = rotr32(g, 3) |
3101 | + e = rotr32(e, 13) |
3102 | + t1 = (~e) % 0x100000000; |
3103 | + t2 = e ^ f; |
3104 | + t3 = g ^ t2; |
3105 | + t4 = g | t1; |
3106 | + t5 = h ^ t4; |
3107 | + t13 = h & t1; |
3108 | + b = t3 ^ t5; |
3109 | + t7 = t3 & t5; |
3110 | + t8 = t2 ^ t7; |
3111 | + t9 = f | t8; |
3112 | + d = t5 ^ t9; |
3113 | + t11 = f | d; |
3114 | + a = t8 ^ t11; |
3115 | + t14 = t3 ^ t11; |
3116 | + c = t13 ^ t14 |
3117 | + a ^= key[4 * 6 + 8] |
3118 | + b ^= key[4 * 6 + 9] |
3119 | + c ^= key[4 * 6 + 10] |
3120 | + d ^= key[4 * 6 + 11] |
3121 | + c = rotr32(c, 22) |
3122 | + a = rotr32(a, 5) |
3123 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
3124 | + a ^= b ^ d |
3125 | + d = rotr32(d, 7) |
3126 | + b = rotr32(b, 1) |
3127 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
3128 | + b ^= a ^ c |
3129 | + c = rotr32(c, 3) |
3130 | + a = rotr32(a, 13) |
3131 | + t1 = (~c) % 0x100000000; |
3132 | + t2 = b & t1; |
3133 | + t3 = d ^ t2; |
3134 | + t4 = a & t3; |
3135 | + t5 = b ^ t1; |
3136 | + h = t4 ^ t5; |
3137 | + t7 = b | h; |
3138 | + t8 = a & t7; |
3139 | + f = t3 ^ t8; |
3140 | + t10 = a | d; |
3141 | + t11 = t1 ^ t7; |
3142 | + e = t10 ^ t11; |
3143 | + t13 = a ^ c; |
3144 | + t14 = b & t10; |
3145 | + t15 = t4 | t13; |
3146 | + g = t14 ^ t15 |
3147 | + e ^= key[4 * 5 + 8] |
3148 | + f ^= key[4 * 5 + 9] |
3149 | + g ^= key[4 * 5 + 10] |
3150 | + h ^= key[4 * 5 + 11] |
3151 | + g = rotr32(g, 22) |
3152 | + e = rotr32(e, 5) |
3153 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
3154 | + e ^= f ^ h |
3155 | + h = rotr32(h, 7) |
3156 | + f = rotr32(f, 1) |
3157 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
3158 | + f ^= e ^ g |
3159 | + g = rotr32(g, 3) |
3160 | + e = rotr32(e, 13) |
3161 | + t1 = g ^ h; |
3162 | + t2 = g | h; |
3163 | + t3 = f ^ t2; |
3164 | + t4 = e & t3; |
3165 | + b = t1 ^ t4; |
3166 | + t6 = e ^ h; |
3167 | + t7 = f | h; |
3168 | + t8 = t6 & t7; |
3169 | + d = t3 ^ t8; |
3170 | + t10 = (~e) % 0x100000000; |
3171 | + t11 = g ^ d; |
3172 | + t12 = t10 | t11; |
3173 | + a = t3 ^ t12; |
3174 | + t14 = g | t4; |
3175 | + t15 = t7 ^ t14; |
3176 | + t16 = d | t10; |
3177 | + c = t15 ^ t16 |
3178 | + a ^= key[4 * 4 + 8] |
3179 | + b ^= key[4 * 4 + 9] |
3180 | + c ^= key[4 * 4 + 10] |
3181 | + d ^= key[4 * 4 + 11] |
3182 | + c = rotr32(c, 22) |
3183 | + a = rotr32(a, 5) |
3184 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
3185 | + a ^= b ^ d |
3186 | + d = rotr32(d, 7) |
3187 | + b = rotr32(b, 1) |
3188 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
3189 | + b ^= a ^ c |
3190 | + c = rotr32(c, 3) |
3191 | + a = rotr32(a, 13) |
3192 | + t1 = b ^ c; |
3193 | + t2 = b | c; |
3194 | + t3 = a ^ c; |
3195 | + t7 = a ^ d; |
3196 | + t4 = t2 ^ t3; |
3197 | + t5 = d | t4; |
3198 | + t9 = t2 ^ t7; |
3199 | + e = t1 ^ t5; |
3200 | + t8 = t1 | t5; |
3201 | + t11 = a & t4; |
3202 | + g = t8 ^ t9; |
3203 | + t12 = e | t9; |
3204 | + f = t11 ^ t12; |
3205 | + t14 = a & g; |
3206 | + t15 = t2 ^ t14; |
3207 | + t16 = e & t15; |
3208 | + h = t4 ^ t16 |
3209 | + e ^= key[4 * 3 + 8] |
3210 | + f ^= key[4 * 3 + 9] |
3211 | + g ^= key[4 * 3 + 10] |
3212 | + h ^= key[4 * 3 + 11] |
3213 | + g = rotr32(g, 22) |
3214 | + e = rotr32(e, 5) |
3215 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
3216 | + e ^= f ^ h |
3217 | + h = rotr32(h, 7) |
3218 | + f = rotr32(f, 1) |
3219 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
3220 | + f ^= e ^ g |
3221 | + g = rotr32(g, 3) |
3222 | + e = rotr32(e, 13) |
3223 | + t1 = f ^ h; |
3224 | + t2 = (~t1) % 0x100000000; |
3225 | + t3 = e ^ g; |
3226 | + t4 = g ^ t1; |
3227 | + t7 = e | t2; |
3228 | + t5 = f & t4; |
3229 | + t8 = h ^ t7; |
3230 | + t11 = (~t4) % 0x100000000; |
3231 | + a = t3 ^ t5; |
3232 | + t9 = t3 | t8; |
3233 | + t14 = h & t11; |
3234 | + d = t1 ^ t9; |
3235 | + t12 = a | d; |
3236 | + b = t11 ^ t12; |
3237 | + t15 = t3 ^ t12; |
3238 | + c = t14 ^ t15 |
3239 | + a ^= key[4 * 2 + 8] |
3240 | + b ^= key[4 * 2 + 9] |
3241 | + c ^= key[4 * 2 + 10] |
3242 | + d ^= key[4 * 2 + 11] |
3243 | + c = rotr32(c, 22) |
3244 | + a = rotr32(a, 5) |
3245 | + c ^= d ^ ((b << 7) & 0xFFFFFFFF) |
3246 | + a ^= b ^ d |
3247 | + d = rotr32(d, 7) |
3248 | + b = rotr32(b, 1) |
3249 | + d ^= c ^ ((a << 3) & 0xFFFFFFFF) |
3250 | + b ^= a ^ c |
3251 | + c = rotr32(c, 3) |
3252 | + a = rotr32(a, 13) |
3253 | + t1 = a ^ d; |
3254 | + t2 = a & b; |
3255 | + t3 = b ^ c; |
3256 | + t4 = a ^ t3; |
3257 | + t5 = b | d; |
3258 | + t7 = c | t1; |
3259 | + h = t4 ^ t5; |
3260 | + t8 = b ^ t7; |
3261 | + t11 = (~t2) % 0x100000000; |
3262 | + t9 = t4 & t8; |
3263 | + f = t1 ^ t9; |
3264 | + t13 = t9 ^ t11; |
3265 | + t12 = h & f; |
3266 | + g = t12 ^ t13; |
3267 | + t15 = a & d; |
3268 | + t16 = c ^ t13; |
3269 | + e = t15 ^ t16 |
3270 | + e ^= key[4 * 1 + 8] |
3271 | + f ^= key[4 * 1 + 9] |
3272 | + g ^= key[4 * 1 + 10] |
3273 | + h ^= key[4 * 1 + 11] |
3274 | + g = rotr32(g, 22) |
3275 | + e = rotr32(e, 5) |
3276 | + g ^= h ^ ((f << 7) & 0xFFFFFFFF) |
3277 | + e ^= f ^ h |
3278 | + h = rotr32(h, 7) |
3279 | + f = rotr32(f, 1) |
3280 | + h ^= g ^ ((e << 3) & 0xFFFFFFFF) |
3281 | + f ^= e ^ g |
3282 | + g = rotr32(g, 3) |
3283 | + e = rotr32(e, 13) |
3284 | + t1 = (~e) % 0x100000000 |
3285 | + t2 = e ^ f |
3286 | + t3 = t1 | t2 |
3287 | + t4 = h ^ t3 |
3288 | + t7 = h & t2 |
3289 | + t5 = g ^ t4 |
3290 | + t8 = t1 ^ t7 |
3291 | + c = t2 ^ t5 |
3292 | + t11 = e & t4 |
3293 | + t9 = c & t8 |
3294 | + t14 = t5 ^ t8 |
3295 | + b = t4 ^ t9 |
3296 | + t12 = t5 | b |
3297 | + d = t11 ^ t12 |
3298 | + a = d ^ t14 |
3299 | + a ^= key[4 * 0 + 8] |
3300 | + b ^= key[4 * 0 + 9] |
3301 | + c ^= key[4 * 0 + 10] |
3302 | + d ^= key[4 * 0 + 11] |
3303 | + if WORD_BIGENDIAN: |
3304 | + a = byteswap32(a) |
3305 | + b = byteswap32(b) |
3306 | + c = byteswap32(c) |
3307 | + d = byteswap32(d) |
3308 | + in_blk[0] = a |
3309 | + in_blk[1] = b |
3310 | + in_blk[2] = c |
3311 | + in_blk[3] = d |
3312 | + |
3313 | +__testkey = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f' |
3314 | +__testdat = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' |
3315 | +assert '\xde&\x9f\xf83\xe42\xb8[.\x88\xd2p\x1c\xe7\\' == Serpent(__testkey).encrypt(__testdat) |
3316 | +assert __testdat == Serpent(__testkey).decrypt('\xde&\x9f\xf83\xe42\xb8[.\x88\xd2p\x1c\xe7\\') |
3317 | + |
3318 | +#CBC Encrypt - Jason Reaves |
3319 | +def serpent_cbc_encrypt(key, data, iv='\x00'*16): |
3320 | + out = "" |
3321 | + last = iv |
3322 | + for i in range((len(data)/16)): |
3323 | + temp = data[i*16:(i+1)*16] |
3324 | + to_encode = "" |
3325 | + for j in range(4): |
3326 | + temp1 = struct.unpack_from('<I', temp[j*4:])[0] |
3327 | + temp2 = struct.unpack_from('<I', last[j*4:])[0] |
3328 | + to_encode += struct.pack('<I',((temp1 ^ temp2) & 0xffffffff)) |
3329 | + last= Serpent(key).encrypt(to_encode) |
3330 | + out += last |
3331 | + #print(binascii.hexlify(Serpent(key).encrypt(data))) |
3332 | + return out |
3333 | + |
3334 | +#CBC Decrypt - Jason Reaves |
3335 | +def serpent_cbc_decrypt(key,data,iv='\x00'*16): |
3336 | + out2 = "" |
3337 | + last = iv |
3338 | + for i in range((len(data)/16)): |
3339 | + temp = Serpent(key).decrypt(data[i*16:(i+1)*16]) |
3340 | + to_decode = "" |
3341 | + for j in range(4): |
3342 | + temp1 = struct.unpack_from('<I', temp[j*4:])[0] |
3343 | + temp2 = struct.unpack_from('<I', last[j*4:])[0] |
3344 | + to_decode += struct.pack('<I',((temp1 ^ temp2) & 0xffffffff)) |
3345 | + out2 += to_decode |
3346 | + last = data[i*16:(i+1)*16] |
3347 | + return out2 |
3348 | diff --git a/lib/server.py b/lib/server.py |
3349 | index 38bf514..a248f1a 100644 |
3350 | |
3351 | |
3352 | |
3353 | if x == udp_server_socket: |
3354 | bytes_address_pair = udp_server_socket.recvfrom(PACKET_SIZE) |
3355 | message = bytes_address_pair[0] |
3356 | - address = bytes_address_pair[1] |
3357 | - print message |
3358 | + address = bytes_address_pair[1][0] |
3359 | for c in self.clients: |
3360 | - self.clients[c].udp_data_received(message) |
3361 | + self.clients[c].udp_data_received(address, message) |
3362 | for x in iwtd: |
3363 | if x in self.clients: |
3364 | self.clients[x].socket_readable_notification() |
3365 |
- I haven't thoroughly read through this library. It has many many lines of single letter variables. I don't know if this is the standard in implementation of encryption algos but it looks like it will be very difficult to properly fit in head. In addition, the purported authors insist that the implementation is very slow. I don't know how important that is since nothing gets decrypted until the hash is validated, which should be much faster. [↩]