xref: /openbsd-src/regress/lib/libradius/test25.c (revision 0eaf192d8f98a1706afb2186171b5fb45b160397)
1*0eaf192dSyasuoka #include "incs.h"
2*0eaf192dSyasuoka 
3*0eaf192dSyasuoka /*
4*0eaf192dSyasuoka  * MS-MPPE-{Send,Recv}-Key attribute
5*0eaf192dSyasuoka  */
6*0eaf192dSyasuoka 
test25(void)7*0eaf192dSyasuoka void test25(void)
8*0eaf192dSyasuoka {
9*0eaf192dSyasuoka 	uint8_t ra[] = {
10*0eaf192dSyasuoka 		0x67, 0x8a, 0xe6, 0xed, 0x69, 0x6e, 0x1b, 0xd1, 0x0a, 0xe2, 0xfe, 0xa1, 0x05, 0xd4, 0x6a, 0x56,
11*0eaf192dSyasuoka 	};
12*0eaf192dSyasuoka 	uint8_t encrypted[] = {
13*0eaf192dSyasuoka 		0x80, 0x36,
14*0eaf192dSyasuoka 		0xf4, 0xab, 0xbe, 0x21, 0x17, 0xfb, 0x3e, 0x4a, 0x78, 0x74, 0xdc, 0xe9, 0x1c, 0x5b, 0x04, 0x49,
15*0eaf192dSyasuoka 		0x8e, 0xc7, 0x72, 0x0f, 0x16, 0x86, 0x88, 0x56, 0x2d, 0xbc, 0x88, 0xe2, 0x1c, 0xab, 0x62, 0x71,
16*0eaf192dSyasuoka 	};
17*0eaf192dSyasuoka 	uint8_t plainkey[] = {
18*0eaf192dSyasuoka 		0xfc, 0x6e, 0xa4, 0x18, 0x37, 0x3d, 0x8e, 0x90, 0xc1, 0x36, 0xfa, 0xe3, 0x73, 0x5e, 0x37, 0xd1,
19*0eaf192dSyasuoka 	};
20*0eaf192dSyasuoka 	uint8_t plainkey2[] = {
21*0eaf192dSyasuoka 		0x86, 0xfe, 0x22, 0x0e, 0x76, 0x24, 0xba, 0x2a, 0x10, 0x05, 0xf6, 0xbf, 0x9b, 0x55, 0xe0, 0xb2,
22*0eaf192dSyasuoka 	};
23*0eaf192dSyasuoka 
24*0eaf192dSyasuoka 	uint8_t plain[256];
25*0eaf192dSyasuoka 	size_t plen;
26*0eaf192dSyasuoka 	uint8_t cipher[256];
27*0eaf192dSyasuoka 	size_t clen;
28*0eaf192dSyasuoka 	RADIUS_PACKET *packet, *response;
29*0eaf192dSyasuoka 
30*0eaf192dSyasuoka 	plen = sizeof(plain);
31*0eaf192dSyasuoka 	CHECK(radius_decrypt_mppe_key_attr(plain, &plen, encrypted, sizeof(encrypted), ra, "hogehogefugafuga") == 0);
32*0eaf192dSyasuoka 	CHECK(plen == 16);
33*0eaf192dSyasuoka 	CHECK(memcmp(plain, plainkey, 16) == 0);
34*0eaf192dSyasuoka 
35*0eaf192dSyasuoka 	clen = sizeof(cipher);
36*0eaf192dSyasuoka 	CHECK(radius_encrypt_mppe_key_attr(cipher, &clen, plainkey, 16, ra, "hogehogefugafuga") == 0);
37*0eaf192dSyasuoka 	CHECK(clen == 34);
38*0eaf192dSyasuoka 	memset(plain, 0, sizeof(plain));
39*0eaf192dSyasuoka 	plen = sizeof(plain);
40*0eaf192dSyasuoka 	CHECK(radius_decrypt_mppe_key_attr(plain, &plen, cipher, clen, ra, "hogehogefugafuga") == 0);
41*0eaf192dSyasuoka 	CHECK(plen == 16);
42*0eaf192dSyasuoka 	CHECK(memcmp(plain, plainkey, 16) == 0);
43*0eaf192dSyasuoka 
44*0eaf192dSyasuoka 	clen = 33;
45*0eaf192dSyasuoka 	CHECK(radius_encrypt_mppe_key_attr(cipher, &clen, plainkey, 16, ra, "hogehogefugafuga") != 0);
46*0eaf192dSyasuoka 	plen = 15;
47*0eaf192dSyasuoka 	CHECK(radius_decrypt_mppe_key_attr(plain, &plen, cipher, 34, ra, "hogehogefugafuga") != 0);
48*0eaf192dSyasuoka 	plen = 16;
49*0eaf192dSyasuoka 	CHECK(radius_decrypt_mppe_key_attr(plain, &plen, cipher, 33, ra, "hogehogefugafuga") != 0);
50*0eaf192dSyasuoka 
51*0eaf192dSyasuoka 	packet = radius_new_request_packet(RADIUS_CODE_ACCESS_REQUEST);
52*0eaf192dSyasuoka 
53*0eaf192dSyasuoka 	CHECK(radius_put_mppe_send_key_attr(packet, plainkey, sizeof(plainkey), "sharedsecret") == 0);
54*0eaf192dSyasuoka 	clen = sizeof(cipher);
55*0eaf192dSyasuoka 	CHECK(radius_get_vs_raw_attr(packet, RADIUS_VENDOR_MICROSOFT, RADIUS_VTYPE_MPPE_SEND_KEY, cipher, &clen) == 0);
56*0eaf192dSyasuoka 	CHECK(clen == 34);
57*0eaf192dSyasuoka 	plen = sizeof(plain);
58*0eaf192dSyasuoka 	CHECK(radius_decrypt_mppe_key_attr(plain, &plen, cipher, clen, radius_get_authenticator_retval(packet), "sharedsecret") == 0);
59*0eaf192dSyasuoka 	CHECK(plen == 16);
60*0eaf192dSyasuoka 	CHECK(memcmp(plain, plainkey, plen) == 0);
61*0eaf192dSyasuoka 	memset(plain, 0, sizeof(plain));
62*0eaf192dSyasuoka 	plen = sizeof(plain);
63*0eaf192dSyasuoka 	CHECK(radius_get_mppe_send_key_attr(packet, plain, &plen, "sharedsecret") == 0);
64*0eaf192dSyasuoka 	CHECK(plen == 16);
65*0eaf192dSyasuoka 	CHECK(memcmp(plain, plainkey, plen) == 0);
66*0eaf192dSyasuoka 
67*0eaf192dSyasuoka 	response = radius_new_response_packet(RADIUS_CODE_ACCESS_ACCEPT, packet);
68*0eaf192dSyasuoka 
69*0eaf192dSyasuoka 	CHECK(radius_put_mppe_recv_key_attr(response, plainkey2, sizeof(plainkey2), "sharedsecret") == 0);
70*0eaf192dSyasuoka 	clen = sizeof(cipher);
71*0eaf192dSyasuoka 	CHECK(radius_get_vs_raw_attr(response, RADIUS_VENDOR_MICROSOFT, RADIUS_VTYPE_MPPE_RECV_KEY, cipher, &clen) == 0);
72*0eaf192dSyasuoka 	CHECK(clen == 34);
73*0eaf192dSyasuoka 	plen = sizeof(plain);
74*0eaf192dSyasuoka 	CHECK(radius_decrypt_mppe_key_attr(plain, &plen, cipher, clen, radius_get_authenticator_retval(packet), "sharedsecret") == 0);
75*0eaf192dSyasuoka 	CHECK(plen == 16);
76*0eaf192dSyasuoka 	CHECK(memcmp(plain, plainkey2, plen) == 0);
77*0eaf192dSyasuoka 	memset(plain, 0, sizeof(plain));
78*0eaf192dSyasuoka 	plen = sizeof(plain);
79*0eaf192dSyasuoka 	CHECK(radius_get_mppe_recv_key_attr(response, plain, &plen, "sharedsecret") == 0);
80*0eaf192dSyasuoka 	CHECK(plen == 16);
81*0eaf192dSyasuoka 	CHECK(memcmp(plain, plainkey2, plen) == 0);
82*0eaf192dSyasuoka }
83*0eaf192dSyasuoka 
84*0eaf192dSyasuoka ADD_TEST(test25)
85