mirror of
https://gitlab.com/chrony/chrony.git
synced 2025-12-03 18:35:06 -05:00
nts: switch client to compliant key exporter on NTS NAK
Implement a fallback for the NTS-NTP client to switch to the compliant AES-128-GCM-SIV exporter context when the server is using the compliant context, but does not support the new NTS-KE record negotiating its use, assuming it can respond with an NTS NAK to the request authenticated with the incorrect key. Export both sets of keys when processing the NTS-KE response. If an NTS NAK is the only valid response from the server after the last NTS-KE session, switch to the keys exported with the compliant context for the following requests instead of dropping all cookies and restarting NTS-KE. Don't switch back to the original keys if an NTS NAK is received again.
This commit is contained in:
@@ -33,7 +33,7 @@
|
||||
#define NKC_IsActive(inst) (random() % 2)
|
||||
#define NKC_GetRetryFactor(inst) (1)
|
||||
|
||||
static int get_nts_data(NKC_Instance inst, NKE_Context *context,
|
||||
static int get_nts_data(NKC_Instance inst, NKE_Context *context, NKE_Context *alt_context,
|
||||
NKE_Cookie *cookies, int *num_cookies, int max_cookies,
|
||||
IPSockAddr *ntp_address);
|
||||
#define NKC_GetNtsData get_nts_data
|
||||
@@ -41,7 +41,7 @@ static int get_nts_data(NKC_Instance inst, NKE_Context *context,
|
||||
#include <nts_ntp_client.c>
|
||||
|
||||
static int
|
||||
get_nts_data(NKC_Instance inst, NKE_Context *context,
|
||||
get_nts_data(NKC_Instance inst, NKE_Context *context, NKE_Context *alt_context,
|
||||
NKE_Cookie *cookies, int *num_cookies, int max_cookies,
|
||||
IPSockAddr *ntp_address)
|
||||
{
|
||||
@@ -60,6 +60,14 @@ get_nts_data(NKC_Instance inst, NKE_Context *context,
|
||||
context->s2c.length = SIV_GetKeyLength(context->algorithm);
|
||||
UTI_GetRandomBytes(context->s2c.key, context->s2c.length);
|
||||
|
||||
if (random() % 2) {
|
||||
*alt_context = *context;
|
||||
UTI_GetRandomBytes(alt_context->c2s.key, alt_context->c2s.length);
|
||||
UTI_GetRandomBytes(alt_context->s2c.key, alt_context->s2c.length);
|
||||
} else {
|
||||
alt_context->algorithm = AEAD_SIV_INVALID;
|
||||
}
|
||||
|
||||
*num_cookies = random() % max_cookies + 1;
|
||||
for (i = 0; i < *num_cookies; i++) {
|
||||
cookies[i].length = random() % (sizeof (cookies[i].cookie) + 1);
|
||||
|
||||
Reference in New Issue
Block a user