Use the key schedule ks and salt E0, E1 to create the password hash.
(ks, E0, E1)
| 510 | |
| 511 | |
| 512 | def _body(ks, E0, E1): |
| 513 | """Use the key schedule ks and salt E0, E1 to create the password hash.""" |
| 514 | |
| 515 | # Copy global variable into locals for loop. |
| 516 | SP0, SP1, SP2, SP3, SP4, SP5, SP6, SP7 = _SPtrans |
| 517 | |
| 518 | inner = xrange(0, _ITERATIONS*2, 2) |
| 519 | l = r = 0 |
| 520 | for j in xrange(25): |
| 521 | l,r = r,l |
| 522 | for i in inner: |
| 523 | t = r ^ ((r >> 16) & 0xffff) |
| 524 | u = t & E0 |
| 525 | t = t & E1 |
| 526 | u = u ^ (u << 16) ^ r ^ ks[i] |
| 527 | t = t ^ (t << 16) ^ r ^ ks[i+1] |
| 528 | t = ((t >> 4) & 0x0fffffff) | (t << 28) |
| 529 | |
| 530 | l,r = r,(SP1[(t ) & 0x3f] ^ SP3[(t>> 8) & 0x3f] ^ |
| 531 | SP5[(t>>16) & 0x3f] ^ SP7[(t>>24) & 0x3f] ^ |
| 532 | SP0[(u ) & 0x3f] ^ SP2[(u>> 8) & 0x3f] ^ |
| 533 | SP4[(u>>16) & 0x3f] ^ SP6[(u>>24) & 0x3f] ^ l) |
| 534 | |
| 535 | l = ((l >> 1) & 0x7fffffff) | ((l & 0x1) << 31) |
| 536 | r = ((r >> 1) & 0x7fffffff) | ((r & 0x1) << 31) |
| 537 | |
| 538 | r,l = _PERM_OP(r, l, 1, 0x55555555) |
| 539 | l,r = _PERM_OP(l, r, 8, 0x00ff00ff) |
| 540 | r,l = _PERM_OP(r, l, 2, 0x33333333) |
| 541 | l,r = _PERM_OP(l, r, 16, 0x0000ffff) |
| 542 | r,l = _PERM_OP(r, l, 4, 0x0f0f0f0f) |
| 543 | |
| 544 | return l,r |
| 545 | |
| 546 | |
| 547 | def crypt(password, salt): |