} $ntresp = ChallengeResponse($challenge, NtPasswordHash($password)); $lmresp = str_repeat("", 24); printf("NT Response:%s\n", bin2hex($ntresp)); // Response: chapid, flags (1 = use NT Response), LM Response, NT Response $resp = pack('CCa48', 1, 1, $lmresp . $ntresp); printf("Response:%d %s\n", strlen($resp), bin2hex($resp)); if (!radius_put_vendor_attr($res, RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP_RESPONSE, $resp)) { echo 'RadiusError: RADIUS_MICROSOFT_MS_CHAP_RESPONSE:' . radius_strerror($res) . "<br>\n"; exit; } } else { if ($auth_type == 'mschapv2') { echo "MS-CHAPv2<br>\n"; include_once 'mschap.php'; $authChallenge = GenerateChallenge(16); printf("Auth Challenge:%s\n", bin2hex($authChallenge)); if (!radius_put_vendor_attr($res, RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP_CHALLENGE, $authChallenge)) { echo 'RadiusError: RADIUS_MICROSOFT_MS_CHAP_CHALLENGE:' . radius_strerror($res) . "<br>\n"; exit; } // we have no client, therefore we generate the Peer-Challenge $peerChallenge = GeneratePeerChallenge(); printf("Peer Challenge:%s\n", bin2hex($peerChallenge)); $ntresp = GenerateNTResponse($authChallenge, $peerChallenge, $username, $password); $reserved = str_repeat("", 8); printf("NT Response:%s\n", bin2hex($ntresp)); // Response: chapid, flags (1 = use NT Response), Peer challenge, reserved, Response $resp = pack('CCa16a8a24', 1, 1, $peerChallenge, $reserved, $ntresp); printf("Response:%d %s\n", strlen($resp), bin2hex($resp)); if (!radius_put_vendor_attr($res, RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP2_RESPONSE, $resp)) {
function GeneratePeerChallenge() { return GenerateChallenge(16); }