1*cdfa2a7eSchristos /* $NetBSD: keyFile.c,v 1.3 2020/05/25 20:47:35 christos Exp $ */
248f8ae19Schristos
3f17b710fSchristos #include "config.h"
4f17b710fSchristos #include "fileHandlingTest.h"
5f17b710fSchristos
6f17b710fSchristos #include "ntp_stdlib.h"
7f17b710fSchristos #include "ntp_types.h"
8f17b710fSchristos #include "crypto.h"
9f17b710fSchristos
10f17b710fSchristos #include "unity.h"
11f17b710fSchristos
12a6f3f22fSchristos bool CompareKeys(struct key expected, struct key actual);
13a6f3f22fSchristos bool CompareKeysAlternative(int key_id,int key_len,const char* type,const char* key_seq,struct key actual);
14a6f3f22fSchristos void test_ReadEmptyKeyFile(void);
15a6f3f22fSchristos void test_ReadASCIIKeys(void);
16a6f3f22fSchristos void test_ReadHexKeys(void);
17a6f3f22fSchristos void test_ReadKeyFileWithComments(void);
18a6f3f22fSchristos void test_ReadKeyFileWithInvalidHex(void);
19f17b710fSchristos
20f17b710fSchristos
21a6f3f22fSchristos bool
CompareKeys(struct key expected,struct key actual)22ae49d4a4Schristos CompareKeys(
23ae49d4a4Schristos struct key expected,
24ae49d4a4Schristos struct key actual
25ae49d4a4Schristos )
26ae49d4a4Schristos {
27f17b710fSchristos if (expected.key_id != actual.key_id) {
28ae49d4a4Schristos printf("Expected key_id: %d but was: %d\n",
29ae49d4a4Schristos expected.key_id, actual.key_id);
30f17b710fSchristos return FALSE;
31f17b710fSchristos }
32f17b710fSchristos if (expected.key_len != actual.key_len) {
33ae49d4a4Schristos printf("Expected key_len: %d but was: %d\n",
34ae49d4a4Schristos expected.key_len, actual.key_len);
35f17b710fSchristos return FALSE;
36f17b710fSchristos }
3756f2724eSchristos if (strcmp(expected.typen, actual.typen) != 0) {
38ae49d4a4Schristos printf("Expected key_type: %s but was: %s\n",
3956f2724eSchristos expected.typen, actual.typen);
40f17b710fSchristos return FALSE;
41f17b710fSchristos
42f17b710fSchristos }
43f17b710fSchristos if (memcmp(expected.key_seq, actual.key_seq, expected.key_len) != 0) {
44f17b710fSchristos printf("Key mismatch!\n");
45f17b710fSchristos return FALSE;
46f17b710fSchristos }
47f17b710fSchristos return TRUE;
48f17b710fSchristos }
49f17b710fSchristos
50a6f3f22fSchristos
51a6f3f22fSchristos bool
CompareKeysAlternative(int key_id,int key_len,const char * type,const char * key_seq,struct key actual)52ae49d4a4Schristos CompareKeysAlternative(
53ae49d4a4Schristos int key_id,
54f17b710fSchristos int key_len,
55f17b710fSchristos const char * type,
56f17b710fSchristos const char * key_seq,
57ae49d4a4Schristos struct key actual
58ae49d4a4Schristos )
59ae49d4a4Schristos {
60f17b710fSchristos struct key temp;
61f17b710fSchristos
62f17b710fSchristos temp.key_id = key_id;
63f17b710fSchristos temp.key_len = key_len;
6456f2724eSchristos strlcpy(temp.typen, type, sizeof(temp.typen));
65f17b710fSchristos memcpy(temp.key_seq, key_seq, key_len);
66f17b710fSchristos
67f17b710fSchristos return CompareKeys(temp, actual);
68f17b710fSchristos }
69f17b710fSchristos
70f17b710fSchristos
71a6f3f22fSchristos void
test_ReadEmptyKeyFile(void)72ae49d4a4Schristos test_ReadEmptyKeyFile(void)
73ae49d4a4Schristos {
74f17b710fSchristos struct key * keys = NULL;
754c290c01Schristos const char * path = CreatePath("key-test-empty", INPUT_DIR);
76f17b710fSchristos
774c290c01Schristos TEST_ASSERT_NOT_NULL(path);
784c290c01Schristos TEST_ASSERT_EQUAL(0, auth_init(path, &keys));
79a6f3f22fSchristos TEST_ASSERT_NULL(keys);
804c290c01Schristos
81ae49d4a4Schristos DestroyPath(path);
82f17b710fSchristos }
83f17b710fSchristos
84a6f3f22fSchristos
85a6f3f22fSchristos void
test_ReadASCIIKeys(void)86ae49d4a4Schristos test_ReadASCIIKeys(void)
87ae49d4a4Schristos {
88f17b710fSchristos struct key * keys = NULL;
89ae49d4a4Schristos struct key * result = NULL;
904c290c01Schristos const char * path = CreatePath("key-test-ascii", INPUT_DIR);
91f17b710fSchristos
924c290c01Schristos TEST_ASSERT_NOT_NULL(path);
934c290c01Schristos TEST_ASSERT_EQUAL(2, auth_init(path, &keys));
94a6f3f22fSchristos TEST_ASSERT_NOT_NULL(keys);
95f17b710fSchristos
96ae49d4a4Schristos DestroyPath(path);
974c290c01Schristos
98f17b710fSchristos get_key(40, &result);
99a6f3f22fSchristos TEST_ASSERT_NOT_NULL(result);
100f17b710fSchristos TEST_ASSERT_TRUE(CompareKeysAlternative(40, 11, "MD5", "asciikeyTwo", *result));
101f17b710fSchristos
102f17b710fSchristos result = NULL;
103f17b710fSchristos get_key(50, &result);
104a6f3f22fSchristos TEST_ASSERT_NOT_NULL(result);
105f17b710fSchristos TEST_ASSERT_TRUE(CompareKeysAlternative(50, 11, "MD5", "asciikeyOne", *result));
106f17b710fSchristos }
107f17b710fSchristos
108a6f3f22fSchristos
109a6f3f22fSchristos void
test_ReadHexKeys(void)110ae49d4a4Schristos test_ReadHexKeys(void)
111ae49d4a4Schristos {
112f17b710fSchristos struct key * keys = NULL;
113ae49d4a4Schristos struct key * result = NULL;
1144c290c01Schristos const char * path = CreatePath("key-test-hex", INPUT_DIR);
115ae49d4a4Schristos char data1[15];
116ae49d4a4Schristos char data2[13];
117f17b710fSchristos
1184c290c01Schristos TEST_ASSERT_NOT_NULL(path);
1194c290c01Schristos TEST_ASSERT_EQUAL(3, auth_init(path, &keys));
120a6f3f22fSchristos TEST_ASSERT_NOT_NULL(keys);
121ae49d4a4Schristos DestroyPath(path);
122f17b710fSchristos
123f17b710fSchristos get_key(10, &result);
124a6f3f22fSchristos TEST_ASSERT_NOT_NULL(result);
125f17b710fSchristos TEST_ASSERT_TRUE(CompareKeysAlternative(10, 13, "MD5",
126f17b710fSchristos "\x01\x23\x45\x67\x89\xab\xcd\xef\x01\x23\x45\x67\x89", *result));
127f17b710fSchristos
128f17b710fSchristos result = NULL;
129f17b710fSchristos get_key(20, &result);
130a6f3f22fSchristos TEST_ASSERT_NOT_NULL(result);
131ae49d4a4Schristos
132ae49d4a4Schristos memset(data1, 0x11, 15);
133f17b710fSchristos TEST_ASSERT_TRUE(CompareKeysAlternative(20, 15, "MD5", data1, *result));
134f17b710fSchristos
135f17b710fSchristos result = NULL;
136f17b710fSchristos get_key(30, &result);
137a6f3f22fSchristos TEST_ASSERT_NOT_NULL(result);
138ae49d4a4Schristos
139ae49d4a4Schristos memset(data2, 0x01, 13);
140f17b710fSchristos TEST_ASSERT_TRUE(CompareKeysAlternative(30, 13, "MD5", data2, *result));
141f17b710fSchristos }
142f17b710fSchristos
143a6f3f22fSchristos
144a6f3f22fSchristos void
test_ReadKeyFileWithComments(void)145ae49d4a4Schristos test_ReadKeyFileWithComments(void)
146ae49d4a4Schristos {
147f17b710fSchristos struct key * keys = NULL;
148ae49d4a4Schristos struct key * result = NULL;
1494c290c01Schristos const char * path = CreatePath("key-test-comments", INPUT_DIR);
150ae49d4a4Schristos char data[15];
151f17b710fSchristos
1524c290c01Schristos TEST_ASSERT_NOT_NULL(path);
1534c290c01Schristos TEST_ASSERT_EQUAL(2, auth_init(path, &keys));
154a6f3f22fSchristos TEST_ASSERT_NOT_NULL(keys);
155ae49d4a4Schristos DestroyPath(path);
156f17b710fSchristos
157f17b710fSchristos get_key(10, &result);
158a6f3f22fSchristos TEST_ASSERT_NOT_NULL(result);
159ae49d4a4Schristos
160ae49d4a4Schristos memset(data, 0x01, 15);
161f17b710fSchristos TEST_ASSERT_TRUE(CompareKeysAlternative(10, 15, "MD5", data, *result));
162f17b710fSchristos
163f17b710fSchristos result = NULL;
164f17b710fSchristos get_key(34, &result);
165a6f3f22fSchristos TEST_ASSERT_NOT_NULL(result);
166f17b710fSchristos TEST_ASSERT_TRUE(CompareKeysAlternative(34, 3, "MD5", "xyz", *result));
167f17b710fSchristos }
168f17b710fSchristos
169a6f3f22fSchristos
170a6f3f22fSchristos void
test_ReadKeyFileWithInvalidHex(void)171ae49d4a4Schristos test_ReadKeyFileWithInvalidHex(void)
172ae49d4a4Schristos {
173f17b710fSchristos struct key * keys = NULL;
174ae49d4a4Schristos struct key * result = NULL;
1754c290c01Schristos const char * path = CreatePath("key-test-invalid-hex", INPUT_DIR);
176ae49d4a4Schristos char data[15];
177f17b710fSchristos
1784c290c01Schristos TEST_ASSERT_NOT_NULL(path);
1794c290c01Schristos TEST_ASSERT_EQUAL(1, auth_init(path, &keys));
180a6f3f22fSchristos TEST_ASSERT_NOT_NULL(keys);
181ae49d4a4Schristos DestroyPath(path);
182f17b710fSchristos
183f17b710fSchristos get_key(10, &result);
184a6f3f22fSchristos TEST_ASSERT_NOT_NULL(result);
185ae49d4a4Schristos
186ae49d4a4Schristos memset(data, 0x01, 15);
187f17b710fSchristos TEST_ASSERT_TRUE(CompareKeysAlternative(10, 15, "MD5", data, *result));
188f17b710fSchristos
189f17b710fSchristos result = NULL;
190ae49d4a4Schristos get_key(30, &result); /* Should not exist, and result should remain NULL. */
191a6f3f22fSchristos TEST_ASSERT_NULL(result);
192f17b710fSchristos }
193