+---
+* [Bug 3693] Improvement of error handling key lengths <perlinger@ntp.org>
+ - original patch by Richard Schmidt, with mods & unit test fixes
+
---
(4.2.8p15) 2020/06/23 Released by Harlan Stenn <stenn@ntp.org>
extern int ymd2yd (int, int, int);
/* a_md5encrypt.c */
-extern int MD5authdecrypt (int, const u_char *, size_t, u_int32 *, size_t, size_t);
+extern int MD5authdecrypt (int, const u_char *, size_t, u_int32 *, size_t, size_t, keyid_t);
extern size_t MD5authencrypt (int, const u_char *, size_t, u_int32 *, size_t);
extern void MD5auth_setkey (keyid_t, int, const u_char *, size_t, KeyAccT *c);
extern u_int32 addr2refid (sockaddr_u *);
size_t klen, /* key length */
u_int32 * pkt, /* packet pointer */
size_t length, /* packet length */
- size_t size /* MAC size */
+ size_t size, /* MAC size */
+ keyid_t keyno /* key id (for err log) */
)
{
u_char digest[EVP_MAX_MD_SIZE];
dlen = MAX_MDG_LEN;
if (size != (size_t)dlen + KEY_MAC_LEN) {
msyslog(LOG_ERR,
- "MAC decrypt: MAC length error");
+ "MAC decrypt: MAC length error: len=%zu key=%d",
+ size, keyno);
return (0);
}
return !isc_tsmemcmp(digest,
return MD5authdecrypt(cache_type,
cache_secret, cache_secretsize,
- pkt, length, size);
+ pkt, length, size, keyno);
}
"ijklmnopqrstuvwx\0\0\0\0\x0c\x0e\x84\xcf\x0b\xb7\xa8\x68\x8e\x52\x38\xdb\xbc\x1c\x39\x54"
};
+static const keyid_t keyId = 42;
void test_Encrypt(void);
void test_DecryptValid(void);
length = MD5authencrypt(keytype, key, keyLength, packetPtr, packetLength);
- TEST_ASSERT_TRUE(MD5authdecrypt(keytype, key, keyLength, packetPtr, packetLength, length));
+ TEST_ASSERT_TRUE(MD5authdecrypt(keytype, key, keyLength, packetPtr, packetLength, length, keyId));
TEST_ASSERT_EQUAL(20, length);
TEST_ASSERT_EQUAL_MEMORY(expectedPacket.u8, packetPtr, totalLength);
void
test_DecryptValid(void) {
- TEST_ASSERT_TRUE(MD5authdecrypt(keytype, key, keyLength, expectedPacket.u32, packetLength, 20));
+ TEST_ASSERT_TRUE(MD5authdecrypt(keytype, key, keyLength, expectedPacket.u32, packetLength, 20, keyId));
}
void
test_DecryptInvalid(void) {
- TEST_ASSERT_FALSE(MD5authdecrypt(keytype, key, keyLength, invalidPacket.u32, packetLength, 20));
+ TEST_ASSERT_FALSE(MD5authdecrypt(keytype, key, keyLength, invalidPacket.u32, packetLength, 20, keyId));
}
void
progname = argv[0];
suite_setup();
UnityBegin("a_md5encrypt.c");
- RUN_TEST(test_Encrypt, 40);
- RUN_TEST(test_DecryptValid, 41);
- RUN_TEST(test_DecryptInvalid, 42);
- RUN_TEST(test_IPv4AddressToRefId, 43);
- RUN_TEST(test_IPv6AddressToRefId, 44);
+ RUN_TEST(test_Encrypt, 41);
+ RUN_TEST(test_DecryptValid, 42);
+ RUN_TEST(test_DecryptInvalid, 43);
+ RUN_TEST(test_IPv4AddressToRefId, 44);
+ RUN_TEST(test_IPv6AddressToRefId, 45);
return (UnityEnd());
}