rfc 2759 sect 8.7
(HashNT,
NTResponse,
PeerChallenge,
AuthenticatorChallenge,
UserName)
| 1480 | |
| 1481 | |
| 1482 | def MS_CHAP2_GenerateAuthenticatorResponse(HashNT, |
| 1483 | NTResponse, |
| 1484 | PeerChallenge, |
| 1485 | AuthenticatorChallenge, |
| 1486 | UserName): |
| 1487 | """ |
| 1488 | rfc 2759 sect 8.7 |
| 1489 | """ |
| 1490 | Magic1 = bytes(bytearray([ |
| 1491 | 0x4D, 0x61, 0x67, 0x69, 0x63, 0x20, 0x73, 0x65, 0x72, 0x76, |
| 1492 | 0x65, 0x72, 0x20, 0x74, 0x6F, 0x20, 0x63, 0x6C, 0x69, 0x65, |
| 1493 | 0x6E, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x69, 0x6E, 0x67, |
| 1494 | 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, |
| 1495 | ])) |
| 1496 | Magic2 = bytes(bytearray([ |
| 1497 | 0x50, 0x61, 0x64, 0x20, 0x74, 0x6F, 0x20, 0x6D, 0x61, 0x6B, |
| 1498 | 0x65, 0x20, 0x69, 0x74, 0x20, 0x64, 0x6F, 0x20, 0x6D, 0x6F, |
| 1499 | 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6E, 0x20, 0x6F, 0x6E, |
| 1500 | 0x65, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6F, |
| 1501 | 0x6E |
| 1502 | ])) |
| 1503 | PasswordHash = HashNT |
| 1504 | PasswordHashHash = Hash_MD4().digest(PasswordHash) |
| 1505 | |
| 1506 | Digest = Hash_SHA().digest(PasswordHashHash + NTResponse + Magic1) |
| 1507 | |
| 1508 | Challenge = MS_CHAP2_ChallengeHash( |
| 1509 | PeerChallenge, |
| 1510 | AuthenticatorChallenge, |
| 1511 | UserName, |
| 1512 | ) |
| 1513 | |
| 1514 | return Hash_SHA().digest(Digest + Challenge + Magic2) |
| 1515 | |
| 1516 | |
| 1517 | # Answering machine |
no test coverage detected
searching dependent graphs…