1284990Scy#include "config.h" 2284990Scy#include "unity.h" 3284990Scy 4284990Scy#ifdef OPENSSL 5284990Scy# include "openssl/err.h" 6284990Scy# include "openssl/rand.h" 7284990Scy# include "openssl/evp.h" 8284990Scy#endif 9284990Scy#include "ntp.h" 10284990Scy#include "ntp_stdlib.h" 11284990Scy 12284990Scyu_long current_time = 4; 13284990Scy 14284990Scy 15284990Scy/* 16284990Scy * Example packet with MD5 hash calculated manually. 17284990Scy */ 18284990Scyconst int keytype = KEY_TYPE_MD5; 19293894Sglebiusconst u_char *key = (const u_char*)"abcdefgh"; 20284990Scyconst u_short keyLength = 8; 21293894Sglebiusconst u_char *packet = (const u_char*)"ijklmnopqrstuvwx"; 22290000Sglebius#define packetLength 16 23290000Sglebius#define keyIdLength 4 24290000Sglebius#define digestLength 16 25293894Sglebius#define totalLength (packetLength + keyIdLength + digestLength) 26293894Sglebiusunion { 27293894Sglebius u_char u8 [totalLength]; 28293894Sglebius uint32_t u32[1]; 29293894Sglebius} expectedPacket = { 30293894Sglebius "ijklmnopqrstuvwx\0\0\0\0\x0c\x0e\x84\xcf\x0b\xb7\xa8\x68\x8e\x52\x38\xdb\xbc\x1c\x39\x53" 31293894Sglebius}; 32293894Sglebiusunion { 33293894Sglebius u_char u8 [totalLength]; 34293894Sglebius uint32_t u32[1]; 35293894Sglebius} invalidPacket = { 36293894Sglebius "ijklmnopqrstuvwx\0\0\0\0\x0c\x0e\x84\xcf\x0b\xb7\xa8\x68\x8e\x52\x38\xdb\xbc\x1c\x39\x54" 37293894Sglebius}; 38284990Scy 39284990Scy 40290000Sglebiusvoid test_Encrypt(void); 41290000Sglebiusvoid test_DecryptValid(void); 42290000Sglebiusvoid test_DecryptInvalid(void); 43290000Sglebiusvoid test_IPv4AddressToRefId(void); 44290000Sglebiusvoid test_IPv6AddressToRefId(void); 45290000Sglebius 46290000Sglebius 47290000Sglebiusvoid 48290000Sglebiustest_Encrypt(void) { 49293894Sglebius u_int32 *packetPtr; 50290000Sglebius int length; 51290000Sglebius 52310419Sdelphij packetPtr = emalloc_zero(totalLength * sizeof(*packetPtr)); 53284990Scy memcpy(packetPtr, packet, packetLength); 54284990Scy 55284990Scy cache_secretsize = keyLength; 56284990Scy 57293894Sglebius length = MD5authencrypt(keytype, key, packetPtr, packetLength); 58284990Scy 59293894Sglebius TEST_ASSERT_TRUE(MD5authdecrypt(keytype, key, packetPtr, packetLength, length)); 60284990Scy 61284990Scy TEST_ASSERT_EQUAL(20, length); 62293894Sglebius TEST_ASSERT_EQUAL_MEMORY(expectedPacket.u8, packetPtr, totalLength); 63284990Scy 64290000Sglebius free(packetPtr); 65284990Scy} 66284990Scy 67290000Sglebiusvoid 68290000Sglebiustest_DecryptValid(void) { 69284990Scy cache_secretsize = keyLength; 70293894Sglebius TEST_ASSERT_TRUE(MD5authdecrypt(keytype, key, expectedPacket.u32, packetLength, 20)); 71284990Scy} 72284990Scy 73290000Sglebiusvoid 74290000Sglebiustest_DecryptInvalid(void) { 75284990Scy cache_secretsize = keyLength; 76293894Sglebius TEST_ASSERT_FALSE(MD5authdecrypt(keytype, key, invalidPacket.u32, packetLength, 20)); 77284990Scy} 78284990Scy 79290000Sglebiusvoid 80290000Sglebiustest_IPv4AddressToRefId(void) { 81284990Scy sockaddr_u addr; 82284990Scy addr.sa4.sin_family = AF_INET; 83290000Sglebius u_int32 address; 84290000Sglebius 85284990Scy addr.sa4.sin_port = htons(80); 86284990Scy 87290000Sglebius address = inet_addr("192.0.2.1"); 88284990Scy addr.sa4.sin_addr.s_addr = address; 89284990Scy 90284990Scy TEST_ASSERT_EQUAL(address, addr2refid(&addr)); 91284990Scy} 92284990Scy 93290000Sglebiusvoid 94290000Sglebiustest_IPv6AddressToRefId(void) { 95293894Sglebius const int expected = 0x75cffd52; 96293894Sglebius const struct in6_addr address = { { { 97284990Scy 0x20, 0x01, 0x0d, 0xb8, 98284990Scy 0x85, 0xa3, 0x08, 0xd3, 99284990Scy 0x13, 0x19, 0x8a, 0x2e, 100284990Scy 0x03, 0x70, 0x73, 0x34 101293894Sglebius } } }; 102284990Scy sockaddr_u addr; 103284990Scy 104284990Scy addr.sa6.sin6_family = AF_INET6; 105284990Scy 106284990Scy addr.sa6.sin6_addr = address; 107284990Scy 108284990Scy 109284990Scy#if 0 110284990Scy TEST_ASSERT_EQUAL(expected, addr2refid(&addr)); 111284990Scy#else 112293894Sglebius (void)expected; 113284990Scy TEST_IGNORE_MESSAGE("Skipping because of big endian problem?"); 114284990Scy#endif 115284990Scy} 116