1 #include "incs.h" 2 3 #include <openssl/md5.h> 4 5 /* 6 * response authenticator 7 */ 8 9 void test10(void) 10 { 11 RADIUS_PACKET *request; 12 RADIUS_PACKET *response; 13 MD5_CTX ctx; 14 15 uint8_t responsedata[] = { 16 RADIUS_CODE_ACCESS_ACCEPT, 0x7f, 0, 31, 17 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* auth */ 18 10, 11, 'f', 'o', 'o', 'b', 'a', 'r', 'b', 'a', 'z', 19 }; 20 21 request = radius_new_request_packet(RADIUS_CODE_ACCESS_REQUEST); 22 radius_set_id(request, 0x7f); 23 response = radius_new_response_packet(RADIUS_CODE_ACCESS_ACCEPT, request); 24 radius_put_string_attr(response, 10, "foobarbaz"); 25 radius_set_response_authenticator(response, "sharedsecret"); 26 27 MD5_Init(&ctx); 28 MD5_Update(&ctx, responsedata, 4); 29 MD5_Update(&ctx, radius_get_authenticator_retval(request), 16); 30 MD5_Update(&ctx, responsedata + 20, sizeof(responsedata) - 20); 31 MD5_Update(&ctx, "sharedsecret", 12); 32 MD5_Final(responsedata + 4, &ctx); 33 34 CHECK(radius_get_length(response) == sizeof(responsedata)); 35 CHECK(memcmp(radius_get_data(response), responsedata, sizeof(responsedata)) == 0); 36 CHECK(radius_check_response_authenticator(response, "sharedsecret") == 0); 37 38 radius_set_raw_attr(response, 10, "zapzapzap", 9); 39 CHECK(radius_check_response_authenticator(response, "sharedsecret") != 0); 40 } 41 42 ADD_TEST(test10) 43