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