xref: /freebsd/contrib/ntp/sntp/tests/keyFile.c (revision f4b37ed0f8b307b1f3f0f630ca725d68f1dff30d)
1 #include "config.h"
2 #include "fileHandlingTest.h"
3 
4 #include "ntp_stdlib.h"
5 #include "ntp_types.h"
6 #include "crypto.h"
7 
8 #include "unity.h"
9 
10 //typedef int bool;
11 
12 
13 bool CompareKeys(struct key expected, struct key actual) {
14 	if (expected.key_id != actual.key_id){
15 		printf("Expected key_id: %d", expected.key_id);
16 		printf(" but was: %d\n", actual.key_id);
17 		return FALSE;
18 	}
19 	if (expected.key_len != actual.key_len){
20 		printf("Expected key_len: %d", expected.key_len);
21 		printf(" but was: %d\n", actual.key_len);
22 		return FALSE;
23 	}
24 	if (strcmp(expected.type, actual.type) != 0){
25 		printf("Expected key_type: %s", expected.type);
26 		printf(" but was: %s\n", actual.type);
27 		return FALSE;
28 
29 	}
30 	if (memcmp(expected.key_seq, actual.key_seq, expected.key_len) != 0){
31 		printf("Key mismatch!\n");
32 		return FALSE;
33 	}
34 	return TRUE;
35 }
36 
37 bool CompareKeysAlternative(int key_id,
38 	       int key_len,
39 	       const char* type,
40 	       const char* key_seq,
41 	       struct key actual) {
42 	struct key temp;
43 
44 	temp.key_id = key_id;
45 	temp.key_len = key_len;
46 	strlcpy(temp.type, type, sizeof(temp.type));
47 	memcpy(temp.key_seq, key_seq, key_len);
48 
49 	return CompareKeys(temp, actual);
50 }
51 
52 
53 void test_ReadEmptyKeyFile() {
54 	struct key* keys = NULL;
55 
56 	TEST_ASSERT_EQUAL(0, auth_init(CreatePath("key-test-empty", INPUT_DIR), &keys));
57 
58 	TEST_ASSERT_TRUE(keys == NULL);
59 }
60 
61 void test_ReadASCIIKeys() {
62 	struct key* keys = NULL;
63 
64 	TEST_ASSERT_EQUAL(2, auth_init(CreatePath("key-test-ascii", INPUT_DIR), &keys));
65 
66 	TEST_ASSERT_TRUE(keys != NULL);
67 
68 	struct key* result = NULL;
69 	get_key(40, &result);
70 	TEST_ASSERT_TRUE(result != NULL);
71 	TEST_ASSERT_TRUE(CompareKeysAlternative(40, 11, "MD5", "asciikeyTwo", *result));
72 
73 	result = NULL;
74 	get_key(50, &result);
75 	TEST_ASSERT_TRUE(result != NULL);
76 	TEST_ASSERT_TRUE(CompareKeysAlternative(50, 11, "MD5", "asciikeyOne", *result));
77 }
78 
79 void test_ReadHexKeys() {
80 	struct key* keys = NULL;
81 
82 	TEST_ASSERT_EQUAL(3, auth_init(CreatePath("key-test-hex", INPUT_DIR), &keys));
83 
84 	TEST_ASSERT_TRUE(keys != NULL);
85 
86 	struct key* result = NULL;
87 	get_key(10, &result);
88 	TEST_ASSERT_TRUE(result != NULL);
89 	TEST_ASSERT_TRUE(CompareKeysAlternative(10, 13, "MD5",
90 		 "\x01\x23\x45\x67\x89\xab\xcd\xef\x01\x23\x45\x67\x89", *result));
91 
92 	result = NULL;
93 	get_key(20, &result);
94 	TEST_ASSERT_TRUE(result != NULL);
95 	char data1[15]; memset(data1, 0x11, 15);
96 	TEST_ASSERT_TRUE(CompareKeysAlternative(20, 15, "MD5", data1, *result));
97 
98 	result = NULL;
99 	get_key(30, &result);
100 	TEST_ASSERT_TRUE(result != NULL);
101 	char data2[13]; memset(data2, 0x01, 13);
102 	TEST_ASSERT_TRUE(CompareKeysAlternative(30, 13, "MD5", data2, *result));
103 }
104 
105 void test_ReadKeyFileWithComments() {
106 	struct key* keys = NULL;
107 
108 	TEST_ASSERT_EQUAL(2, auth_init(CreatePath("key-test-comments", INPUT_DIR), &keys));
109 
110 	TEST_ASSERT_TRUE(keys != NULL);
111 
112 	struct key* result = NULL;
113 	get_key(10, &result);
114 	TEST_ASSERT_TRUE(result != NULL);
115 	char data[15]; memset(data, 0x01, 15);
116 	TEST_ASSERT_TRUE(CompareKeysAlternative(10, 15, "MD5", data, *result));
117 
118 	result = NULL;
119 	get_key(34, &result);
120 	TEST_ASSERT_TRUE(result != NULL);
121 	TEST_ASSERT_TRUE(CompareKeysAlternative(34, 3, "MD5", "xyz", *result));
122 }
123 
124 void test_ReadKeyFileWithInvalidHex() {
125 	struct key* keys = NULL;
126 
127 	TEST_ASSERT_EQUAL(1, auth_init(CreatePath("key-test-invalid-hex", INPUT_DIR), &keys));
128 
129 	TEST_ASSERT_TRUE(keys != NULL);
130 
131 	struct key* result = NULL;
132 	get_key(10, &result);
133 	TEST_ASSERT_TRUE(result != NULL);
134 	char data[15]; memset(data, 0x01, 15);
135 	TEST_ASSERT_TRUE(CompareKeysAlternative(10, 15, "MD5", data, *result));
136 
137 	result = NULL;
138 	get_key(30, &result); // Should not exist, and result should remain NULL.
139 	TEST_ASSERT_TRUE(result == NULL);
140 }
141