const IPSockAddr *ntp_address;
IPSockAddr nts_address;
char *name;
+
NKC_Instance nke;
SIV_Instance siv;
NKE_Cookie cookies[NTS_MAX_COOKIES];
int num_cookies;
int cookie_index;
+ int auth_ready;
int nak_response;
int ok_response;
unsigned char nonce[NTS_MIN_UNPADDED_NONCE_LENGTH];
static void
reset_instance(NNC_Instance inst)
{
+ if (inst->nke)
+ NKC_DestroyInstance(inst->nke);
+ inst->nke = NULL;
+ if (inst->siv)
+ SIV_DestroyInstance(inst->siv);
+ inst->siv = NULL;
+
inst->load_attempt = 0;
inst->nke_attempts = 0;
inst->next_nke_attempt = 0.0;
memset(inst->cookies, 0, sizeof (inst->cookies));
inst->num_cookies = 0;
inst->cookie_index = 0;
+ inst->auth_ready = 0;
inst->nak_response = 0;
inst->ok_response = 1;
memset(inst->nonce, 0, sizeof (inst->nonce));
{
save_cookies(inst);
- if (inst->nke)
- NKC_DestroyInstance(inst->nke);
- if (inst->siv)
- SIV_DestroyInstance(inst->siv);
+ reset_instance(inst);
Free(inst->name);
Free(inst);
int
NNC_PrepareForAuth(NNC_Instance inst)
{
+ inst->auth_ready = 0;
+
/* Try to reload saved keys and cookies (once for the NTS-KE address) */
if (!inst->load_attempt) {
load_cookies(inst);
UTI_GetRandomBytes(inst->uniq_id, sizeof (inst->uniq_id));
UTI_GetRandomBytes(inst->nonce, sizeof (inst->nonce));
+ inst->auth_ready = 1;
+
return 1;
}
int i, req_cookies;
void *ef_body;
- if (inst->num_cookies == 0 || !inst->siv)
+ if (!inst->auth_ready || inst->num_cookies == 0 || !inst->siv)
return 0;
if (info->mode != MODE_CLIENT)
inst->num_cookies--;
inst->cookie_index = (inst->cookie_index + 1) % NTS_MAX_COOKIES;
+ inst->auth_ready = 0;
inst->nak_response = 0;
inst->ok_response = 0;
return 0;
/* Accept at most one response per request */
- if (inst->ok_response)
+ if (inst->ok_response || inst->auth_ready)
return 0;
if (!inst->siv ||
{
save_cookies(inst);
- if (inst->nke)
- NKC_DestroyInstance(inst->nke);
-
- inst->nke = NULL;
- inst->num_cookies = 0;
inst->nts_address.ip_addr = *address;
reset_instance(inst);