| 540 | #define MD5STEP(f, w, x, y, z, data, s) w = rotlFixed(w + f(x, y, z) + data, s) + x |
| 541 | |
| 542 | void NetInterface::computeNetMD5(const NetAddress *address, U32 connectSequence, U32 digest[4]) |
| 543 | { |
| 544 | digest[0] = 0x67452301L; |
| 545 | digest[1] = 0xefcdab89L; |
| 546 | digest[2] = 0x98badcfeL; |
| 547 | digest[3] = 0x10325476L; |
| 548 | |
| 549 | |
| 550 | U32 a, b, c, d; |
| 551 | |
| 552 | a=digest[0]; |
| 553 | b=digest[1]; |
| 554 | c=digest[2]; |
| 555 | d=digest[3]; |
| 556 | |
| 557 | U32 in[16]; |
| 558 | in[0] = address->type; |
| 559 | in[1] = address->getHash(); |
| 560 | in[2] = address->port; |
| 561 | in[3] = connectSequence; |
| 562 | for(U32 i = 0; i < 12; i++) |
| 563 | in[i + 4] = mRandomHashData[i]; |
| 564 | |
| 565 | MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); |
| 566 | MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); |
| 567 | MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); |
| 568 | MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); |
| 569 | MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); |
| 570 | MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); |
| 571 | MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); |
| 572 | MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); |
| 573 | MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); |
| 574 | MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); |
| 575 | MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); |
| 576 | MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); |
| 577 | MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); |
| 578 | MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); |
| 579 | MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); |
| 580 | MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); |
| 581 | |
| 582 | MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); |
| 583 | MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); |
| 584 | MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); |
| 585 | MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); |
| 586 | MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); |
| 587 | MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); |
| 588 | MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); |
| 589 | MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); |
| 590 | MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); |
| 591 | MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); |
| 592 | MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); |
| 593 | MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); |
| 594 | MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); |
| 595 | MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); |
| 596 | MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); |
| 597 | MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); |
| 598 | |
| 599 | MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); |