2 * Test program for ms_funcs
3 * Copyright (c) 2003-2006, Jouni Malinen <j@w1.fi>
5 * This software may be distributed under the terms of the BSD license.
6 * See README for more details.
9 #include "crypto/ms_funcs.c"
12 int main(int argc, char *argv[])
14 /* Test vector from RFC2759 example */
15 char *username = "User";
16 char *password = "clientPass";
17 u8 auth_challenge[] = {
18 0x5B, 0x5D, 0x7C, 0x7D, 0x7B, 0x3F, 0x2F, 0x3E,
19 0x3C, 0x2C, 0x60, 0x21, 0x32, 0x26, 0x26, 0x28
21 u8 peer_challenge[] = {
22 0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A,
23 0x28, 0x29, 0x5F, 0x2B, 0x3A, 0x33, 0x7C, 0x7E
25 u8 challenge[] = { 0xD0, 0x2E, 0x43, 0x86, 0xBC, 0xE9, 0x12, 0x26 };
26 u8 password_hash[] = {
27 0x44, 0xEB, 0xBA, 0x8D, 0x53, 0x12, 0xB8, 0xD6,
28 0x11, 0x47, 0x44, 0x11, 0xF5, 0x69, 0x89, 0xAE
31 0x82, 0x30, 0x9E, 0xCD, 0x8D, 0x70, 0x8B, 0x5E,
32 0xA0, 0x8F, 0xAA, 0x39, 0x81, 0xCD, 0x83, 0x54,
33 0x42, 0x33, 0x11, 0x4A, 0x3D, 0x85, 0xD6, 0xDF
35 u8 password_hash_hash[] = {
36 0x41, 0xC0, 0x0C, 0x58, 0x4B, 0xD2, 0xD9, 0x1C,
37 0x40, 0x17, 0xA2, 0xA1, 0x2F, 0xA5, 0x9F, 0x3F
39 u8 authenticator_response[] = {
40 0x40, 0x7A, 0x55, 0x89, 0x11, 0x5F, 0xD0, 0xD6,
41 0x20, 0x9F, 0x51, 0x0F, 0xE9, 0xC0, 0x45, 0x66,
42 0x93, 0x2C, 0xDA, 0x56
45 0xFD, 0xEC, 0xE3, 0x71, 0x7A, 0x8C, 0x83, 0x8C,
46 0xB3, 0x88, 0xE5, 0x27, 0xAE, 0x3C, 0xDD, 0x31
48 u8 send_start_key[] = {
49 0x8B, 0x7C, 0xDC, 0x14, 0x9B, 0x99, 0x3A, 0x1B,
50 0xA1, 0x18, 0xCB, 0x15, 0x3F, 0x56, 0xDC, 0xCB
56 printf("Testing ms_funcs.c\n");
58 if (challenge_hash(peer_challenge, auth_challenge,
59 (u8 *) username, strlen(username),
61 memcmp(challenge, buf, sizeof(challenge)) != 0) {
62 printf("challenge_hash failed\n");
66 if (nt_password_hash((u8 *) password, strlen(password), buf) ||
67 memcmp(password_hash, buf, sizeof(password_hash)) != 0) {
68 printf("nt_password_hash failed\n");
72 if (generate_nt_response(auth_challenge, peer_challenge,
73 (u8 *) username, strlen(username),
74 (u8 *) password, strlen(password),
76 memcmp(nt_response, buf, sizeof(nt_response)) != 0) {
77 printf("generate_nt_response failed\n");
81 if (hash_nt_password_hash(password_hash, buf) ||
82 memcmp(password_hash_hash, buf, sizeof(password_hash_hash)) != 0) {
83 printf("hash_nt_password_hash failed\n");
87 if (generate_authenticator_response((u8 *) password, strlen(password),
88 peer_challenge, auth_challenge,
89 (u8 *) username, strlen(username),
91 memcmp(authenticator_response, buf, sizeof(authenticator_response))
93 printf("generate_authenticator_response failed\n");
97 if (get_master_key(password_hash_hash, nt_response, buf) ||
98 memcmp(master_key, buf, sizeof(master_key)) != 0) {
99 printf("get_master_key failed\n");
103 if (get_asymetric_start_key(master_key, buf, sizeof(send_start_key),
105 memcmp(send_start_key, buf, sizeof(send_start_key)) != 0) {
106 printf("get_asymetric_start_key failed\n");
111 printf("FAILED! %d errors\n", errors);