Lines Matching refs:inst

85 static void save_cookies(NNC_Instance inst);
86 static void load_cookies(NNC_Instance inst);
91 reset_instance(NNC_Instance inst) in reset_instance() argument
93 if (inst->nke) in reset_instance()
94 NKC_DestroyInstance(inst->nke); in reset_instance()
95 inst->nke = NULL; in reset_instance()
96 if (inst->siv) in reset_instance()
97 SIV_DestroyInstance(inst->siv); in reset_instance()
98 inst->siv = NULL; in reset_instance()
100 inst->nke_attempts = 0; in reset_instance()
101 inst->next_nke_attempt = 0.0; in reset_instance()
102 inst->last_nke_success = 0.0; in reset_instance()
104 memset(&inst->context, 0, sizeof (inst->context)); in reset_instance()
105 inst->context_id = 0; in reset_instance()
106 memset(inst->cookies, 0, sizeof (inst->cookies)); in reset_instance()
107 inst->num_cookies = 0; in reset_instance()
108 inst->cookie_index = 0; in reset_instance()
109 inst->auth_ready = 0; in reset_instance()
110 inst->nak_response = 0; in reset_instance()
111 inst->ok_response = 1; in reset_instance()
112 memset(inst->nonce, 0, sizeof (inst->nonce)); in reset_instance()
113 memset(inst->uniq_id, 0, sizeof (inst->uniq_id)); in reset_instance()
121 NNC_Instance inst; in NNC_CreateInstance() local
123 inst = MallocNew(struct NNC_Instance_Record); in NNC_CreateInstance()
125 inst->nts_address = *nts_address; in NNC_CreateInstance()
126 inst->name = Strdup(name); in NNC_CreateInstance()
127 inst->cert_set = cert_set; in NNC_CreateInstance()
128 inst->default_ntp_port = ntp_port; in NNC_CreateInstance()
129 inst->ntp_address.ip_addr = nts_address->ip_addr; in NNC_CreateInstance()
130 inst->ntp_address.port = ntp_port; in NNC_CreateInstance()
131 inst->siv = NULL; in NNC_CreateInstance()
132 inst->nke = NULL; in NNC_CreateInstance()
134 reset_instance(inst); in NNC_CreateInstance()
137 load_cookies(inst); in NNC_CreateInstance()
139 return inst; in NNC_CreateInstance()
145 NNC_DestroyInstance(NNC_Instance inst) in NNC_DestroyInstance() argument
147 save_cookies(inst); in NNC_DestroyInstance()
149 reset_instance(inst); in NNC_DestroyInstance()
151 Free(inst->name); in NNC_DestroyInstance()
152 Free(inst); in NNC_DestroyInstance()
158 check_cookies(NNC_Instance inst) in check_cookies() argument
162 if (inst->num_cookies > 0 && in check_cookies()
163 ((inst->nak_response && !inst->ok_response) || in check_cookies()
164 SCH_GetLastEventMonoTime() - inst->last_nke_success > CNF_GetNtsRefresh())) { in check_cookies()
165 inst->num_cookies = 0; in check_cookies()
169 return inst->num_cookies > 0; in check_cookies()
175 set_ntp_address(NNC_Instance inst, NTP_Remote_Address *negotiated_address) in set_ntp_address() argument
179 old_address = inst->ntp_address; in set_ntp_address()
183 new_address.ip_addr = inst->nts_address.ip_addr; in set_ntp_address()
185 new_address.port = inst->default_ntp_port; in set_ntp_address()
198 inst->ntp_address = new_address; in set_ntp_address()
206 update_next_nke_attempt(NNC_Instance inst, double now) in update_next_nke_attempt() argument
210 if (!inst->nke) in update_next_nke_attempt()
213 factor = NKC_GetRetryFactor(inst->nke); in update_next_nke_attempt()
214 interval = MIN(factor + inst->nke_attempts - 1, NKE_MAX_RETRY_INTERVAL2); in update_next_nke_attempt()
215 inst->next_nke_attempt = now + UTI_Log2ToDouble(interval); in update_next_nke_attempt()
221 get_cookies(NNC_Instance inst) in get_cookies() argument
227 assert(inst->num_cookies == 0); in get_cookies()
232 if (!inst->nke) { in get_cookies()
233 if (now < inst->next_nke_attempt) { in get_cookies()
235 inst->next_nke_attempt - now); in get_cookies()
239 inst->nke = NKC_CreateInstance(&inst->nts_address, inst->name, inst->cert_set); in get_cookies()
241 inst->nke_attempts++; in get_cookies()
242 update_next_nke_attempt(inst, now); in get_cookies()
244 if (!NKC_Start(inst->nke)) in get_cookies()
248 update_next_nke_attempt(inst, now); in get_cookies()
251 if (NKC_IsActive(inst->nke)) in get_cookies()
254 assert(sizeof (inst->cookies) / sizeof (inst->cookies[0]) == NTS_MAX_COOKIES); in get_cookies()
257 got_data = NKC_GetNtsData(inst->nke, &inst->context, in get_cookies()
258 inst->cookies, &inst->num_cookies, NTS_MAX_COOKIES, in get_cookies()
261 NKC_DestroyInstance(inst->nke); in get_cookies()
262 inst->nke = NULL; in get_cookies()
267 if (inst->siv) in get_cookies()
268 SIV_DestroyInstance(inst->siv); in get_cookies()
269 inst->siv = NULL; in get_cookies()
271 inst->context_id++; in get_cookies()
275 if (!set_ntp_address(inst, &ntp_address)) { in get_cookies()
276 inst->num_cookies = 0; in get_cookies()
280 inst->last_nke_success = now; in get_cookies()
281 inst->cookie_index = 0; in get_cookies()
289 NNC_PrepareForAuth(NNC_Instance inst) in NNC_PrepareForAuth() argument
291 inst->auth_ready = 0; in NNC_PrepareForAuth()
295 UTI_GetRandomBytes(inst->uniq_id, sizeof (inst->uniq_id)); in NNC_PrepareForAuth()
296 UTI_GetRandomBytes(inst->nonce, sizeof (inst->nonce)); in NNC_PrepareForAuth()
299 if (!check_cookies(inst)) { in NNC_PrepareForAuth()
300 if (!get_cookies(inst)) in NNC_PrepareForAuth()
304 inst->nak_response = 0; in NNC_PrepareForAuth()
306 if (!inst->siv) in NNC_PrepareForAuth()
307 inst->siv = SIV_CreateInstance(inst->context.algorithm); in NNC_PrepareForAuth()
309 if (!inst->siv || in NNC_PrepareForAuth()
310 !SIV_SetKey(inst->siv, inst->context.c2s.key, inst->context.c2s.length)) { in NNC_PrepareForAuth()
315 inst->auth_ready = 1; in NNC_PrepareForAuth()
323 NNC_GenerateRequestAuth(NNC_Instance inst, NTP_Packet *packet, in NNC_GenerateRequestAuth() argument
330 if (!inst->auth_ready) in NNC_GenerateRequestAuth()
333 inst->auth_ready = 0; in NNC_GenerateRequestAuth()
335 if (inst->num_cookies <= 0 || !inst->siv) in NNC_GenerateRequestAuth()
341 cookie = &inst->cookies[inst->cookie_index]; in NNC_GenerateRequestAuth()
342 inst->num_cookies--; in NNC_GenerateRequestAuth()
343 inst->cookie_index = (inst->cookie_index + 1) % NTS_MAX_COOKIES; in NNC_GenerateRequestAuth()
345 req_cookies = MIN(NTS_MAX_COOKIES - inst->num_cookies, in NNC_GenerateRequestAuth()
349 inst->uniq_id, sizeof (inst->uniq_id))) in NNC_GenerateRequestAuth()
363 if (!NNA_GenerateAuthEF(packet, info, inst->siv, inst->nonce, sizeof (inst->nonce), in NNC_GenerateRequestAuth()
367 inst->ok_response = 0; in NNC_GenerateRequestAuth()
375 parse_encrypted_efs(NNC_Instance inst, unsigned char *plaintext, int length) in parse_encrypted_efs() argument
392 extract_cookies(NNC_Instance inst, unsigned char *plaintext, int length) in extract_cookies() argument
407 if (ef_length < NTP_MIN_EF_LENGTH || ef_body_length > sizeof (inst->cookies[0].cookie)) { in extract_cookies()
414 if (inst->num_cookies >= NTS_MAX_COOKIES) in extract_cookies()
417 index = (inst->cookie_index + inst->num_cookies) % NTS_MAX_COOKIES; in extract_cookies()
419 assert(sizeof (inst->cookies) / sizeof (inst->cookies[0]) == NTS_MAX_COOKIES); in extract_cookies()
421 memcpy(inst->cookies[index].cookie, ef_body, ef_body_length); in extract_cookies()
422 inst->cookies[index].length = ef_body_length; in extract_cookies()
423 inst->num_cookies++; in extract_cookies()
436 NNC_CheckResponseAuth(NNC_Instance inst, NTP_Packet *packet, in NNC_CheckResponseAuth() argument
448 if (inst->ok_response || inst->auth_ready) in NNC_CheckResponseAuth()
451 if (!inst->siv || in NNC_CheckResponseAuth()
452 !SIV_SetKey(inst->siv, inst->context.s2c.key, inst->context.s2c.length)) { in NNC_CheckResponseAuth()
465 if (ef_body_length != sizeof (inst->uniq_id) || in NNC_CheckResponseAuth()
466 memcmp(ef_body, inst->uniq_id, sizeof (inst->uniq_id)) != 0) { in NNC_CheckResponseAuth()
481 if (!NNA_DecryptAuthEF(packet, info, inst->siv, parsed, in NNC_CheckResponseAuth()
485 if (!parse_encrypted_efs(inst, plaintext, plaintext_length)) in NNC_CheckResponseAuth()
499 inst->nak_response = 1; in NNC_CheckResponseAuth()
507 if (!extract_cookies(inst, plaintext, plaintext_length)) in NNC_CheckResponseAuth()
510 inst->ok_response = 1; in NNC_CheckResponseAuth()
514 inst->nke_attempts = 0; in NNC_CheckResponseAuth()
515 inst->next_nke_attempt = 0.0; in NNC_CheckResponseAuth()
523 NNC_ChangeAddress(NNC_Instance inst, IPAddr *address) in NNC_ChangeAddress() argument
525 save_cookies(inst); in NNC_ChangeAddress()
527 inst->nts_address.ip_addr = *address; in NNC_ChangeAddress()
528 inst->ntp_address.ip_addr = *address; in NNC_ChangeAddress()
530 reset_instance(inst); in NNC_ChangeAddress()
534 load_cookies(inst); in NNC_ChangeAddress()
540 save_cookies(NNC_Instance inst) in save_cookies() argument
548 if (inst->num_cookies < 1 || !UTI_IsIPReal(&inst->nts_address.ip_addr)) in save_cookies()
555 filename = UTI_IPToString(&inst->nts_address.ip_addr); in save_cookies()
562 context_time = inst->last_nke_success - SCH_GetLastEventMonoTime(); in save_cookies()
566 DUMP_IDENTIFIER, inst->name, context_time, in save_cookies()
567 UTI_IPToString(&inst->ntp_address.ip_addr), inst->ntp_address.port, in save_cookies()
568 inst->context_id, (int)inst->context.algorithm) < 0 || in save_cookies()
569 !UTI_BytesToHex(inst->context.s2c.key, inst->context.s2c.length, buf, sizeof (buf)) || in save_cookies()
571 !UTI_BytesToHex(inst->context.c2s.key, inst->context.c2s.length, buf, sizeof (buf)) || in save_cookies()
575 for (i = 0; i < inst->num_cookies; i++) { in save_cookies()
576 if (!UTI_BytesToHex(inst->cookies[i].cookie, inst->cookies[i].length, buf, sizeof (buf)) || in save_cookies()
600 load_cookies(NNC_Instance inst) in load_cookies() argument
614 filename = UTI_IPToString(&inst->nts_address.ip_addr); in load_cookies()
624 if (inst->siv) in load_cookies()
625 SIV_DestroyInstance(inst->siv); in load_cookies()
626 inst->siv = NULL; in load_cookies()
630 strcmp(words[0], inst->name) != 0 || in load_cookies()
639 inst->context.algorithm = algorithm; in load_cookies()
640 inst->context.s2c.length = UTI_HexToBytes(words[2], inst->context.s2c.key, in load_cookies()
641 sizeof (inst->context.s2c.key)); in load_cookies()
642 inst->context.c2s.length = UTI_HexToBytes(words[3], inst->context.c2s.key, in load_cookies()
643 sizeof (inst->context.c2s.key)); in load_cookies()
645 if (inst->context.s2c.length != SIV_GetKeyLength(algorithm) || in load_cookies()
646 inst->context.c2s.length != inst->context.s2c.length) in load_cookies()
653 inst->cookies[i].length = UTI_HexToBytes(words[0], inst->cookies[i].cookie, in load_cookies()
654 sizeof (inst->cookies[i].cookie)); in load_cookies()
655 if (inst->cookies[i].length == 0) in load_cookies()
659 inst->num_cookies = i; in load_cookies()
662 if (!set_ntp_address(inst, &ntp_addr)) in load_cookies()
669 inst->last_nke_success = context_time + SCH_GetLastEventMonoTime(); in load_cookies()
670 inst->context_id = context_id; in load_cookies()
681 memset(&inst->context, 0, sizeof (inst->context)); in load_cookies()
682 inst->num_cookies = 0; in load_cookies()
688 NNC_DumpData(NNC_Instance inst) in NNC_DumpData() argument
690 save_cookies(inst); in NNC_DumpData()
696 NNC_GetReport(NNC_Instance inst, RPT_AuthReport *report) in NNC_GetReport() argument
698 report->key_id = inst->context_id; in NNC_GetReport()
699 report->key_type = inst->context.algorithm; in NNC_GetReport()
700 report->key_length = 8 * inst->context.s2c.length; in NNC_GetReport()
701 report->ke_attempts = inst->nke_attempts; in NNC_GetReport()
703 report->last_ke_ago = SCH_GetLastEventMonoTime() - inst->last_nke_success; in NNC_GetReport()
706 report->cookies = inst->num_cookies; in NNC_GetReport()
707 report->cookie_length = inst->num_cookies > 0 ? inst->cookies[inst->cookie_index].length : 0; in NNC_GetReport()
708 report->nak = inst->nak_response; in NNC_GetReport()