1276da39aSCy Schubert #include "config.h" 268ba7e87SXin LI 3276da39aSCy Schubert #include "sntptest.h" 4276da39aSCy Schubert #include "networking.h" 5276da39aSCy Schubert #include "ntp_stdlib.h" 6276da39aSCy Schubert #include "unity.h" 7276da39aSCy Schubert 8*09100258SXin LI #define CMAC "AES128CMAC" 9*09100258SXin LI #define CMAC_LENGTH 16 10*09100258SXin LI 119034852cSGleb Smirnoff 12276da39aSCy Schubert const char * Version = "stub unit test Version string"; 13276da39aSCy Schubert 14f391d6bcSXin LI /* Hacks into the key database. */ 15276da39aSCy Schubert extern struct key* key_ptr; 16276da39aSCy Schubert extern int key_cnt; 17276da39aSCy Schubert 18276da39aSCy Schubert 199034852cSGleb Smirnoff void PrepareAuthenticationTest(int key_id,int key_len,const char* type,const void* key_seq); 209034852cSGleb Smirnoff void PrepareAuthenticationTestMD5(int key_id,int key_len,const void* key_seq); 219034852cSGleb Smirnoff void setUp(void); 229034852cSGleb Smirnoff void tearDown(void); 239034852cSGleb Smirnoff void test_TooShortLength(void); 249034852cSGleb Smirnoff void test_LengthNotMultipleOfFour(void); 259034852cSGleb Smirnoff void test_TooShortExtensionFieldLength(void); 269034852cSGleb Smirnoff void test_UnauthenticatedPacketReject(void); 279034852cSGleb Smirnoff void test_CryptoNAKPacketReject(void); 289034852cSGleb Smirnoff void test_AuthenticatedPacketInvalid(void); 299034852cSGleb Smirnoff void test_AuthenticatedPacketUnknownKey(void); 309034852cSGleb Smirnoff void test_ServerVersionTooOld(void); 319034852cSGleb Smirnoff void test_ServerVersionTooNew(void); 329034852cSGleb Smirnoff void test_NonWantedMode(void); 339034852cSGleb Smirnoff void test_KoDRate(void); 349034852cSGleb Smirnoff void test_KoDDeny(void); 359034852cSGleb Smirnoff void test_RejectUnsyncedServer(void); 369034852cSGleb Smirnoff void test_RejectWrongResponseServerMode(void); 379034852cSGleb Smirnoff void test_AcceptNoSentPacketBroadcastMode(void); 389034852cSGleb Smirnoff void test_CorrectUnauthenticatedPacket(void); 399034852cSGleb Smirnoff void test_CorrectAuthenticatedPacketMD5(void); 409034852cSGleb Smirnoff void test_CorrectAuthenticatedPacketSHA1(void); 41*09100258SXin LI void test_CorrectAuthenticatedPacketCMAC(void); 429034852cSGleb Smirnoff 43f391d6bcSXin LI /* [Bug 2998] There are some issues whith the definition of 'struct pkt' 44f391d6bcSXin LI * when AUTOKEY is undefined -- the formal struct is too small to hold 45f391d6bcSXin LI * all the extension fields that are going to be tested. We have to make 46f391d6bcSXin LI * sure we have the extra bytes, or the test yield undefined results due 47f391d6bcSXin LI * to buffer overrun. 48f391d6bcSXin LI */ 49f391d6bcSXin LI #ifndef AUTOKEY 50f391d6bcSXin LI # define EXTRA_BUFSIZE 256 51f391d6bcSXin LI #else 52f391d6bcSXin LI # define EXTRA_BUFSIZE 0 53f391d6bcSXin LI #endif 549034852cSGleb Smirnoff 55f391d6bcSXin LI union tpkt { 56f391d6bcSXin LI struct pkt p; 57f391d6bcSXin LI u_char b[sizeof(struct pkt) + EXTRA_BUFSIZE]; 58f391d6bcSXin LI }; 59f391d6bcSXin LI 60f391d6bcSXin LI static union tpkt testpkt; 61f391d6bcSXin LI static union tpkt testspkt; 62276da39aSCy Schubert static sockaddr_u testsock; 63276da39aSCy Schubert bool restoreKeyDb; 64276da39aSCy Schubert 659034852cSGleb Smirnoff 669034852cSGleb Smirnoff void 6768ba7e87SXin LI PrepareAuthenticationTest( 6868ba7e87SXin LI int key_id, 69276da39aSCy Schubert int key_len, 70276da39aSCy Schubert const char * type, 7168ba7e87SXin LI const void * key_seq 7268ba7e87SXin LI ) 7368ba7e87SXin LI { 74276da39aSCy Schubert char str[25]; 759034852cSGleb Smirnoff snprintf(str, 25, "%d", key_id); 76276da39aSCy Schubert ActivateOption("-a", str); 77276da39aSCy Schubert 78276da39aSCy Schubert key_cnt = 1; 799034852cSGleb Smirnoff key_ptr = emalloc(sizeof(struct key)); 80276da39aSCy Schubert key_ptr->next = NULL; 81276da39aSCy Schubert key_ptr->key_id = key_id; 82276da39aSCy Schubert key_ptr->key_len = key_len; 83*09100258SXin LI memcpy(key_ptr->typen, type, strlen(type) + 1); 84276da39aSCy Schubert 85276da39aSCy Schubert TEST_ASSERT_TRUE(key_len < sizeof(key_ptr->key_seq)); 86276da39aSCy Schubert 87276da39aSCy Schubert memcpy(key_ptr->key_seq, key_seq, key_ptr->key_len); 88276da39aSCy Schubert restoreKeyDb = true; 89276da39aSCy Schubert } 90276da39aSCy Schubert 919034852cSGleb Smirnoff 929034852cSGleb Smirnoff void 9368ba7e87SXin LI PrepareAuthenticationTestMD5( 9468ba7e87SXin LI int key_id, 95276da39aSCy Schubert int key_len, 9668ba7e87SXin LI const void * key_seq 9768ba7e87SXin LI ) 9868ba7e87SXin LI { 99276da39aSCy Schubert PrepareAuthenticationTest(key_id, key_len, "MD5", key_seq); 100276da39aSCy Schubert } 101276da39aSCy Schubert 1029034852cSGleb Smirnoff 1039034852cSGleb Smirnoff void 10468ba7e87SXin LI setUp(void) 10568ba7e87SXin LI { 106276da39aSCy Schubert 107276da39aSCy Schubert sntptest(); 108276da39aSCy Schubert restoreKeyDb = false; 109276da39aSCy Schubert 110276da39aSCy Schubert /* Initialize the test packet and socket, 11168ba7e87SXin LI * so they contain at least some valid data. 11268ba7e87SXin LI */ 113f391d6bcSXin LI testpkt.p.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING, NTP_VERSION, 114276da39aSCy Schubert MODE_SERVER); 115f391d6bcSXin LI testpkt.p.stratum = STRATUM_REFCLOCK; 116f391d6bcSXin LI memcpy(&testpkt.p.refid, "GPS\0", 4); 117276da39aSCy Schubert 118276da39aSCy Schubert /* Set the origin timestamp of the received packet to the 11968ba7e87SXin LI * same value as the transmit timestamp of the sent packet. 12068ba7e87SXin LI */ 121276da39aSCy Schubert l_fp tmp; 122276da39aSCy Schubert tmp.l_ui = 1000UL; 123276da39aSCy Schubert tmp.l_uf = 0UL; 124276da39aSCy Schubert 125f391d6bcSXin LI HTONL_FP(&tmp, &testpkt.p.org); 126f391d6bcSXin LI HTONL_FP(&tmp, &testspkt.p.xmt); 127276da39aSCy Schubert } 128276da39aSCy Schubert 1299034852cSGleb Smirnoff 1309034852cSGleb Smirnoff void 13168ba7e87SXin LI tearDown(void) 13268ba7e87SXin LI { 133276da39aSCy Schubert if (restoreKeyDb) { 134276da39aSCy Schubert key_cnt = 0; 135276da39aSCy Schubert free(key_ptr); 136276da39aSCy Schubert key_ptr = NULL; 137276da39aSCy Schubert } 138276da39aSCy Schubert 13968ba7e87SXin LI sntptest_destroy(); /* only on the final test!! if counter == 0 etc... */ 140276da39aSCy Schubert } 141276da39aSCy Schubert 142276da39aSCy Schubert 1439034852cSGleb Smirnoff void 14468ba7e87SXin LI test_TooShortLength(void) 14568ba7e87SXin LI { 146276da39aSCy Schubert TEST_ASSERT_EQUAL(PACKET_UNUSEABLE, 147f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC - 1, 148f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 149276da39aSCy Schubert TEST_ASSERT_EQUAL(PACKET_UNUSEABLE, 150f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC - 1, 151f391d6bcSXin LI MODE_BROADCAST, &testspkt.p, "UnitTest")); 152276da39aSCy Schubert } 153276da39aSCy Schubert 1549034852cSGleb Smirnoff 1559034852cSGleb Smirnoff void 15668ba7e87SXin LI test_LengthNotMultipleOfFour(void) 15768ba7e87SXin LI { 158276da39aSCy Schubert TEST_ASSERT_EQUAL(PACKET_UNUSEABLE, 159f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC + 6, 160f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 161276da39aSCy Schubert TEST_ASSERT_EQUAL(PACKET_UNUSEABLE, 162f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC + 3, 163f391d6bcSXin LI MODE_BROADCAST, &testspkt.p, "UnitTest")); 164276da39aSCy Schubert } 165276da39aSCy Schubert 1669034852cSGleb Smirnoff 1679034852cSGleb Smirnoff void 16868ba7e87SXin LI test_TooShortExtensionFieldLength(void) 16968ba7e87SXin LI { 170f391d6bcSXin LI /* [Bug 2998] We have to get around the formal specification of 171f391d6bcSXin LI * the extension field if AUTOKEY is undefined. (At least CLANG 172f391d6bcSXin LI * issues a warning in this case. It's just a warning, but 173f391d6bcSXin LI * still... 174f391d6bcSXin LI */ 175f391d6bcSXin LI uint32_t * pe = testpkt.p.exten + 7; 176f391d6bcSXin LI 177276da39aSCy Schubert /* The lower 16-bits are the length of the extension field. 178276da39aSCy Schubert * This lengths must be multiples of 4 bytes, which gives 17968ba7e87SXin LI * a minimum of 4 byte extension field length. 18068ba7e87SXin LI */ 181f391d6bcSXin LI *pe = htonl(3); /* 3 bytes is too short. */ 182276da39aSCy Schubert 183276da39aSCy Schubert /* We send in a pkt_len of header size + 4 byte extension 184276da39aSCy Schubert * header + 24 byte MAC, this prevents the length error to 18568ba7e87SXin LI * be caught at an earlier stage 18668ba7e87SXin LI */ 187276da39aSCy Schubert int pkt_len = LEN_PKT_NOMAC + 4 + 24; 188276da39aSCy Schubert 189276da39aSCy Schubert TEST_ASSERT_EQUAL(PACKET_UNUSEABLE, 190f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, pkt_len, 191f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 192276da39aSCy Schubert } 193276da39aSCy Schubert 1949034852cSGleb Smirnoff 1959034852cSGleb Smirnoff void 19668ba7e87SXin LI test_UnauthenticatedPacketReject(void) 19768ba7e87SXin LI { 19868ba7e87SXin LI /* Activate authentication option */ 199276da39aSCy Schubert ActivateOption("-a", "123"); 200276da39aSCy Schubert TEST_ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION)); 201276da39aSCy Schubert 202276da39aSCy Schubert int pkt_len = LEN_PKT_NOMAC; 203276da39aSCy Schubert 20468ba7e87SXin LI /* We demand authentication, but no MAC header is present. */ 205276da39aSCy Schubert TEST_ASSERT_EQUAL(SERVER_AUTH_FAIL, 206f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, pkt_len, 207f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 208276da39aSCy Schubert } 209276da39aSCy Schubert 2109034852cSGleb Smirnoff 2119034852cSGleb Smirnoff void 21268ba7e87SXin LI test_CryptoNAKPacketReject(void) 21368ba7e87SXin LI { 21468ba7e87SXin LI /* Activate authentication option */ 215276da39aSCy Schubert ActivateOption("-a", "123"); 216276da39aSCy Schubert TEST_ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION)); 217276da39aSCy Schubert 21868ba7e87SXin LI int pkt_len = LEN_PKT_NOMAC + 4; /* + 4 byte MAC = Crypto-NAK */ 219276da39aSCy Schubert 220276da39aSCy Schubert TEST_ASSERT_EQUAL(SERVER_AUTH_FAIL, 221f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, pkt_len, 222f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 223276da39aSCy Schubert } 224276da39aSCy Schubert 2259034852cSGleb Smirnoff 2269034852cSGleb Smirnoff void 22768ba7e87SXin LI test_AuthenticatedPacketInvalid(void) 22868ba7e87SXin LI { 22968ba7e87SXin LI /* Activate authentication option */ 230276da39aSCy Schubert PrepareAuthenticationTestMD5(50, 9, "123456789"); 231276da39aSCy Schubert TEST_ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION)); 232276da39aSCy Schubert 23368ba7e87SXin LI /* Prepare the packet. */ 234276da39aSCy Schubert int pkt_len = LEN_PKT_NOMAC; 235276da39aSCy Schubert 236f391d6bcSXin LI testpkt.p.exten[0] = htonl(50); 237f391d6bcSXin LI int mac_len = make_mac(&testpkt.p, pkt_len, 238*09100258SXin LI MAX_MD5_LEN - KEY_MAC_LEN, key_ptr, 239f391d6bcSXin LI &testpkt.p.exten[1]); 240276da39aSCy Schubert 241276da39aSCy Schubert pkt_len += 4 + mac_len; 242276da39aSCy Schubert 24368ba7e87SXin LI /* Now, alter the MAC so it becomes invalid. */ 244f391d6bcSXin LI testpkt.p.exten[1] += 1; 245276da39aSCy Schubert 246276da39aSCy Schubert TEST_ASSERT_EQUAL(SERVER_AUTH_FAIL, 247f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, pkt_len, 248f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 249276da39aSCy Schubert } 250276da39aSCy Schubert 2519034852cSGleb Smirnoff 2529034852cSGleb Smirnoff void 25368ba7e87SXin LI test_AuthenticatedPacketUnknownKey(void) 25468ba7e87SXin LI { 25568ba7e87SXin LI /* Activate authentication option */ 256276da39aSCy Schubert PrepareAuthenticationTestMD5(30, 9, "123456789"); 257276da39aSCy Schubert TEST_ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION)); 258276da39aSCy Schubert 25968ba7e87SXin LI /* Prepare the packet. Note that the Key-ID expected is 30, but 26068ba7e87SXin LI * the packet has a key id of 50. 26168ba7e87SXin LI */ 262276da39aSCy Schubert int pkt_len = LEN_PKT_NOMAC; 263276da39aSCy Schubert 264f391d6bcSXin LI testpkt.p.exten[0] = htonl(50); 265f391d6bcSXin LI int mac_len = make_mac(&testpkt.p, pkt_len, 266*09100258SXin LI MAX_MD5_LEN - KEY_MAC_LEN, key_ptr, 267f391d6bcSXin LI &testpkt.p.exten[1]); 268*09100258SXin LI pkt_len += KEY_MAC_LEN + mac_len; 269276da39aSCy Schubert 270276da39aSCy Schubert TEST_ASSERT_EQUAL(SERVER_AUTH_FAIL, 271f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, pkt_len, 272f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 273276da39aSCy Schubert } 274276da39aSCy Schubert 2759034852cSGleb Smirnoff 2769034852cSGleb Smirnoff void 27768ba7e87SXin LI test_ServerVersionTooOld(void) 27868ba7e87SXin LI { 279276da39aSCy Schubert TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION)); 280276da39aSCy Schubert 281f391d6bcSXin LI testpkt.p.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING, 282276da39aSCy Schubert NTP_OLDVERSION - 1, 283276da39aSCy Schubert MODE_CLIENT); 284f391d6bcSXin LI TEST_ASSERT_TRUE(PKT_VERSION(testpkt.p.li_vn_mode) < NTP_OLDVERSION); 285276da39aSCy Schubert 286276da39aSCy Schubert int pkt_len = LEN_PKT_NOMAC; 287276da39aSCy Schubert 288276da39aSCy Schubert TEST_ASSERT_EQUAL(SERVER_UNUSEABLE, 289f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, pkt_len, 290f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 291276da39aSCy Schubert } 292276da39aSCy Schubert 2939034852cSGleb Smirnoff 2949034852cSGleb Smirnoff void 29568ba7e87SXin LI test_ServerVersionTooNew(void) 29668ba7e87SXin LI { 297276da39aSCy Schubert TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION)); 298276da39aSCy Schubert 299f391d6bcSXin LI testpkt.p.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING, 300276da39aSCy Schubert NTP_VERSION + 1, 301276da39aSCy Schubert MODE_CLIENT); 302f391d6bcSXin LI TEST_ASSERT_TRUE(PKT_VERSION(testpkt.p.li_vn_mode) > NTP_VERSION); 303276da39aSCy Schubert 304276da39aSCy Schubert int pkt_len = LEN_PKT_NOMAC; 305276da39aSCy Schubert 306276da39aSCy Schubert TEST_ASSERT_EQUAL(SERVER_UNUSEABLE, 307f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, pkt_len, 308f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 309276da39aSCy Schubert } 310276da39aSCy Schubert 3119034852cSGleb Smirnoff 3129034852cSGleb Smirnoff void 31368ba7e87SXin LI test_NonWantedMode(void) 31468ba7e87SXin LI { 315276da39aSCy Schubert TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION)); 316276da39aSCy Schubert 317f391d6bcSXin LI testpkt.p.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING, 318276da39aSCy Schubert NTP_VERSION, 319276da39aSCy Schubert MODE_CLIENT); 320276da39aSCy Schubert 32168ba7e87SXin LI /* The packet has a mode of MODE_CLIENT, but process_pkt expects 32268ba7e87SXin LI * MODE_SERVER 32368ba7e87SXin LI */ 324276da39aSCy Schubert TEST_ASSERT_EQUAL(SERVER_UNUSEABLE, 325f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC, 326f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 327276da39aSCy Schubert } 328276da39aSCy Schubert 3299034852cSGleb Smirnoff 330276da39aSCy Schubert /* Tests bug 1597 */ 3319034852cSGleb Smirnoff void 33268ba7e87SXin LI test_KoDRate(void) 33368ba7e87SXin LI { 334276da39aSCy Schubert TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION)); 335276da39aSCy Schubert 336f391d6bcSXin LI testpkt.p.stratum = STRATUM_PKT_UNSPEC; 337f391d6bcSXin LI memcpy(&testpkt.p.refid, "RATE", 4); 338276da39aSCy Schubert 339276da39aSCy Schubert TEST_ASSERT_EQUAL(KOD_RATE, 340f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC, 341f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 342276da39aSCy Schubert } 343276da39aSCy Schubert 3449034852cSGleb Smirnoff 3459034852cSGleb Smirnoff void 34668ba7e87SXin LI test_KoDDeny(void) 34768ba7e87SXin LI { 348276da39aSCy Schubert TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION)); 349276da39aSCy Schubert 350f391d6bcSXin LI testpkt.p.stratum = STRATUM_PKT_UNSPEC; 351f391d6bcSXin LI memcpy(&testpkt.p.refid, "DENY", 4); 352276da39aSCy Schubert 353276da39aSCy Schubert TEST_ASSERT_EQUAL(KOD_DEMOBILIZE, 354f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC, 355f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 356276da39aSCy Schubert } 357276da39aSCy Schubert 3589034852cSGleb Smirnoff 3599034852cSGleb Smirnoff void 36068ba7e87SXin LI test_RejectUnsyncedServer(void) 36168ba7e87SXin LI { 362276da39aSCy Schubert TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION)); 363276da39aSCy Schubert 364f391d6bcSXin LI testpkt.p.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOTINSYNC, 365276da39aSCy Schubert NTP_VERSION, 366276da39aSCy Schubert MODE_SERVER); 367276da39aSCy Schubert 368276da39aSCy Schubert TEST_ASSERT_EQUAL(SERVER_UNUSEABLE, 369f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC, 370f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 371276da39aSCy Schubert } 372276da39aSCy Schubert 3739034852cSGleb Smirnoff 3749034852cSGleb Smirnoff void 37568ba7e87SXin LI test_RejectWrongResponseServerMode(void) 37668ba7e87SXin LI { 377276da39aSCy Schubert TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION)); 378276da39aSCy Schubert 379276da39aSCy Schubert l_fp tmp; 380276da39aSCy Schubert tmp.l_ui = 1000UL; 381276da39aSCy Schubert tmp.l_uf = 0UL; 382f391d6bcSXin LI HTONL_FP(&tmp, &testpkt.p.org); 383276da39aSCy Schubert 384276da39aSCy Schubert tmp.l_ui = 2000UL; 385276da39aSCy Schubert tmp.l_uf = 0UL; 386f391d6bcSXin LI HTONL_FP(&tmp, &testspkt.p.xmt); 387276da39aSCy Schubert 388276da39aSCy Schubert TEST_ASSERT_EQUAL(PACKET_UNUSEABLE, 389f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC, 390f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 391276da39aSCy Schubert } 392276da39aSCy Schubert 3939034852cSGleb Smirnoff 3949034852cSGleb Smirnoff void 39568ba7e87SXin LI test_AcceptNoSentPacketBroadcastMode(void) 39668ba7e87SXin LI { 397276da39aSCy Schubert TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION)); 398276da39aSCy Schubert 399f391d6bcSXin LI testpkt.p.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING, 400276da39aSCy Schubert NTP_VERSION, 401276da39aSCy Schubert MODE_BROADCAST); 402276da39aSCy Schubert 403276da39aSCy Schubert TEST_ASSERT_EQUAL(LEN_PKT_NOMAC, 404f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC, 405276da39aSCy Schubert MODE_BROADCAST, NULL, "UnitTest")); 406276da39aSCy Schubert } 407276da39aSCy Schubert 4089034852cSGleb Smirnoff 4099034852cSGleb Smirnoff void 41068ba7e87SXin LI test_CorrectUnauthenticatedPacket(void) 41168ba7e87SXin LI { 412276da39aSCy Schubert TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION)); 413276da39aSCy Schubert 414276da39aSCy Schubert TEST_ASSERT_EQUAL(LEN_PKT_NOMAC, 415f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC, 416f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 417276da39aSCy Schubert } 418276da39aSCy Schubert 4199034852cSGleb Smirnoff 4209034852cSGleb Smirnoff void 42168ba7e87SXin LI test_CorrectAuthenticatedPacketMD5(void) 42268ba7e87SXin LI { 423276da39aSCy Schubert PrepareAuthenticationTestMD5(10, 15, "123456789abcdef"); 424276da39aSCy Schubert TEST_ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION)); 425276da39aSCy Schubert 426276da39aSCy Schubert int pkt_len = LEN_PKT_NOMAC; 427276da39aSCy Schubert 42868ba7e87SXin LI /* Prepare the packet. */ 429f391d6bcSXin LI testpkt.p.exten[0] = htonl(10); 430f391d6bcSXin LI int mac_len = make_mac(&testpkt.p, pkt_len, 431*09100258SXin LI MAX_MD5_LEN - KEY_MAC_LEN, key_ptr, 432f391d6bcSXin LI &testpkt.p.exten[1]); 433276da39aSCy Schubert 434*09100258SXin LI pkt_len += KEY_MAC_LEN + mac_len; 435276da39aSCy Schubert 436276da39aSCy Schubert TEST_ASSERT_EQUAL(pkt_len, 437f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, pkt_len, 438f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 439276da39aSCy Schubert } 440276da39aSCy Schubert 4419034852cSGleb Smirnoff 4429034852cSGleb Smirnoff void 44368ba7e87SXin LI test_CorrectAuthenticatedPacketSHA1(void) 44468ba7e87SXin LI { 445276da39aSCy Schubert PrepareAuthenticationTest(20, 15, "SHA1", "abcdefghijklmno"); 446276da39aSCy Schubert TEST_ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION)); 447276da39aSCy Schubert 448276da39aSCy Schubert int pkt_len = LEN_PKT_NOMAC; 449276da39aSCy Schubert 45068ba7e87SXin LI /* Prepare the packet. */ 451f391d6bcSXin LI testpkt.p.exten[0] = htonl(20); 452f391d6bcSXin LI int mac_len = make_mac(&testpkt.p, pkt_len, 453*09100258SXin LI MAX_MDG_LEN, key_ptr, 454*09100258SXin LI &testpkt.p.exten[1]); 455*09100258SXin LI 456*09100258SXin LI pkt_len += KEY_MAC_LEN + mac_len; 457*09100258SXin LI 458*09100258SXin LI TEST_ASSERT_EQUAL(pkt_len, 459*09100258SXin LI process_pkt(&testpkt.p, &testsock, pkt_len, 460*09100258SXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 461*09100258SXin LI } 462*09100258SXin LI 463*09100258SXin LI 464*09100258SXin LI void 465*09100258SXin LI test_CorrectAuthenticatedPacketCMAC(void) 466*09100258SXin LI { 467*09100258SXin LI PrepareAuthenticationTest(30, CMAC_LENGTH, CMAC, "abcdefghijklmnop"); 468*09100258SXin LI TEST_ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION)); 469*09100258SXin LI 470*09100258SXin LI int pkt_len = LEN_PKT_NOMAC; 471*09100258SXin LI 472*09100258SXin LI /* Prepare the packet. */ 473*09100258SXin LI testpkt.p.exten[0] = htonl(30); 474*09100258SXin LI int mac_len = make_mac(&testpkt.p, pkt_len, 475276da39aSCy Schubert MAX_MAC_LEN, key_ptr, 476f391d6bcSXin LI &testpkt.p.exten[1]); 477276da39aSCy Schubert 478276da39aSCy Schubert pkt_len += 4 + mac_len; 479276da39aSCy Schubert 480276da39aSCy Schubert TEST_ASSERT_EQUAL(pkt_len, 481f391d6bcSXin LI process_pkt(&testpkt.p, &testsock, pkt_len, 482f391d6bcSXin LI MODE_SERVER, &testspkt.p, "UnitTest")); 483276da39aSCy Schubert } 484*09100258SXin LI 485