[Git][NTPsec/ntpsec][client] 4 commits: include/nts.h: Remove tabs, Single line /* comments to //

Hal Murray (@hal.murray) gitlab at mg.gitlab.com
Thu Aug 6 17:47:10 UTC 2026



Hal Murray pushed to branch client at NTPsec / ntpsec


Commits:
d9279df1 by Gary E. Miller at 2026-08-06T10:22:00-07:00
include/nts.h: Remove tabs, Single line /* comments to //

- - - - -
d0c7791a by Gary E. Miller at 2026-08-06T10:31:20-07:00
ntpd/nts_cookie.c: Remove tabs, Single line /* comments to //

- - - - -
3a5e7a54 by Gary E. Miller at 2026-08-06T10:46:27-07:00
ntpd/nts_client.c: Remove tabs, Single line /* comments to //

No functional changes.

- - - - -
8c7c6743 by Gary E. Miller at 2026-08-06T10:46:27-07:00
ntpd/nts_client.c: restore previous comment indents

No functional changes.

- - - - -


3 changed files:

- include/nts.h
- ntpd/nts_client.c
- ntpd/nts_cookie.c


Changes:

=====================================
include/nts.h
=====================================
@@ -12,20 +12,20 @@
 
 #include "ntp_fp.h"
 
-/* default file names */
+// default file names
 #define NTS_CERT_FILE "/etc/ntp/cert-chain.pem"
 #define NTS_KEY_FILE "/etc/ntp/key.pem"
 #define NTS_COOKIE_KEY_FILE "/var/lib/ntp/nts-keys"
 
-#define NTS_KE_PORT		4460
-#define NTS_KE_PORTA		"4460"
+#define NTS_KE_PORT             4460
+#define NTS_KE_PORTA            "4460"
 
-#define NTS_KE_TIMEOUT		3
+#define NTS_KE_TIMEOUT          3
 
 bool nts_server_init(void);
 bool nts_client_init(void);
 bool nts_cookie_init(void);
-bool nts_server_init2(void);    /* after sandbox */
+bool nts_server_init2(void);    // after sandbox
 bool nts_cookie_init2(void);
 
 void nts_cert_timer(void);
@@ -42,18 +42,18 @@ bool nts_unpack_cookie(uint8_t *cookie, int cookielen,
   uint16_t *aead,
   uint8_t *c2s, uint8_t *s2c, int *keylen);
 
-/* working finger into a buffer - updated by append/unpack routines */
+// working finger into a buffer - updated by append/unpack routines
 struct BufCtl_t {
-    uint8_t *next;  /* pointer to next data/space */
-    int left;       /* data left or space available */
+    uint8_t *next;  // pointer to next data/space
+    int left;       // data left or space available
 };
 typedef struct BufCtl_t BufCtl;
 
-/* Here for test routines */
+// Here for test routines
 bool nts_ke_process_receive(struct BufCtl_t *buf, int *aead,
   char *errbuf, int errlng, const char **errtxt);
 
-/***********************************************************/
+// *********************************************************
 
 /* buffer packing/unpacking routines.
  * NB: The length field in NTP extensions includes the header
@@ -67,12 +67,12 @@ bool nts_ke_process_receive(struct BufCtl_t *buf, int *aead,
  */
 
 
-/* 2 byte type, 2 byte length */
+// 2 byte type, 2 byte length
 #define NTS_KE_HDR_LNG 4
 #define NTS_KE_U16_LNG 2
 
-/* xxx_append_record_foo makes whole record with one foo */
-/* append_foo appends foo to existing partial record */
+// xxx_append_record_foo makes whole record with one foo
+// append_foo appends foo to existing partial record
 void ke_append_record_null(BufCtl* buf, uint16_t type);
 void ke_append_record_uint16(BufCtl* buf, uint16_t type, uint16_t data);
 void ke_append_record_bytes(BufCtl* buf, uint16_t type, uint8_t *data, int length);
@@ -87,19 +87,19 @@ void append_uint16(BufCtl* buf, uint16_t data);
 void append_bytes(BufCtl* buf, uint8_t *data, int length);
 
 uint16_t ke_next_record(BufCtl* buf, int *length);
-uint16_t ex_next_record(BufCtl* buf, int *length);  /* body length */
+uint16_t ex_next_record(BufCtl* buf, int *length);  // body length
 uint16_t next_uint16(BufCtl* buf);
 uint16_t next_bytes(BufCtl* buf, uint8_t *data, int length);
 
-/***********************************************************/
+// *********************************************************
 
-#define NTS_MAX_KEYLEN		64	/* used in cookies */
-#define NTS_MAX_COOKIELEN	192	/* see nts_cookie.c */
-#define NTS_MAX_COOKIES		8	/* RFC 4.1.6 */
-#define NTS_UID_LENGTH		32	/* RFC 5.3 */
-#define NTS_UID_MAX_LENGTH	64
+#define NTS_MAX_KEYLEN          64      // used in cookies
+#define NTS_MAX_COOKIELEN       192     // see nts_cookie.c
+#define NTS_MAX_COOKIES         8       // RFC 4.1.6
+#define NTS_UID_LENGTH          32      // RFC 5.3
+#define NTS_UID_MAX_LENGTH      64
 
-/* Here for tester */
+// Here for tester
 struct NTS_Key {
   uint8_t K[NTS_MAX_KEYLEN];
   uint32_t I;
@@ -108,87 +108,87 @@ struct NTS_Key {
   #define NTS_nKEYS 10
 #endif
 extern struct NTS_Key nts_keys[NTS_nKEYS];
-extern int nts_nKeys;		/* for tester */
+extern int nts_nKeys;           // for tester
 
 
 /* Client side configuration data for an NTS association
  * All are optional.
  * part of peer struct */
 struct ntscfg_t {
-	char *ca;		/* root/trusted certificates */
-	char *aead;		/* AEAD algorithms on wire */
+        char *ca;               // root/trusted certificates
+        char *aead;             // AEAD algorithms on wire
 };
 
-/* Client-side state per connection to server */
+// Client-side state per connection to server
 struct ntsclient_t {
-	/* wire connection */
-	uint16_t aead;	/* AEAD algorithm used on wire */
-	int keylen;
-	uint8_t c2s[NTS_MAX_KEYLEN], s2c[NTS_MAX_KEYLEN];
-	/* UID of last request sent - RFC 5.3 */
-	uint8_t UID[NTS_UID_LENGTH];
-	/* cookies */
-	int readIdx, writeIdx;
-	int count;			/* -1 if not in NTS mode */
-	int cookielen;
-	uint8_t cookies[NTS_MAX_COOKIES][NTS_MAX_COOKIELEN];
+        // wire connection
+        uint16_t aead;  // AEAD algorithm used on wire
+        int keylen;
+        uint8_t c2s[NTS_MAX_KEYLEN], s2c[NTS_MAX_KEYLEN];
+        // UID of last request sent - RFC 5.3
+        uint8_t UID[NTS_UID_LENGTH];
+        // cookies
+        int readIdx, writeIdx;
+        int count;                      // -1 if not in NTS mode
+        int cookielen;
+        uint8_t cookies[NTS_MAX_COOKIES][NTS_MAX_COOKIELEN];
 };
 
-/* Server-side state per packet */
+// Server-side state per packet
 struct ntspacket_t {
-	bool valid;
-	int uidlen;
-	uint8_t UID[NTS_UID_MAX_LENGTH];
-	int needed;
-	uint16_t aead;
-	int keylen;
-	uint8_t c2s[NTS_MAX_KEYLEN], s2c[NTS_MAX_KEYLEN];
+        bool valid;
+        int uidlen;
+        uint8_t UID[NTS_UID_MAX_LENGTH];
+        int needed;
+        uint16_t aead;
+        int keylen;
+        uint8_t c2s[NTS_MAX_KEYLEN], s2c[NTS_MAX_KEYLEN];
 };
 
 
-/* Configuration data for an NTS server or client instance */
+// Configuration data for an NTS server or client instance
 struct ntsconfig_t {
-	bool ntsenable; 	/* enable NTS KE server on this ntpd */
-	const char * mintls;	/* minimum TLS version allowed */
-	const char * maxtls;	/* maximum TLS version allowed */
-	const char *tlsciphersuites;/* allowed TLS 1.3 ciphersuites */
-	const char *tlsecdhcurves; /* allowed ecdhcurves list*/
-	const char *cert;	/* file holding server certificate key */
-	const char *key;	/* file holding server private key */
-	const char *KI;		/* file holding K/I for making cookies */
-	const char *ca;		/* root cert dir/file */
-	const char *aead;	/* AEAD algorithms on wire */
-	bool tlscipherserverpreference;  /* OpenSSL 3.0 default is client */
+        bool ntsenable;         // enable NTS KE server on this ntpd
+        const char * mintls;    // minimum TLS version allowed
+        const char * maxtls;    // maximum TLS version allowed
+        const char *tlsciphersuites;  // allowed TLS 1.3 ciphersuites
+        const char *tlsecdhcurves;  // allowed ecdhcurves list
+        const char *cert;       // file holding server certificate key
+        const char *key;        // file holding server private key
+        const char *KI;         // file holding K/I for making cookies
+        const char *ca;         // root cert dir/file
+        const char *aead;       // AEAD algorithms on wire
+        bool tlscipherserverpreference;  // OpenSSL 3.0 default is client
 };
 
 
-/* CMAC length is wired into AEAD_AES_SIV_CMAC_nnn. */
+// CMAC length is wired into AEAD_AES_SIV_CMAC_nnn.
 #define CMAC_LENGTH 16
-/* The NONCE length comes from RFC 5116 and/or 5297. */
+// The NONCE length comes from RFC 5116 and/or 5297.
 #define NONCE_LENGTH 16
 
-/* NTS protocol constants */
+// NTS protocol constants
 
 #define NTS_CRITICAL 0x8000
 enum nts_record_type {
-	nts_end_of_message = 0,		/* CRITICAL */
-	nts_next_protocol_negotiation = 1,	/* CRITICAL */
-	nts_error = 2,			/* CRITICAL */
-	nts_warning = 3,
-	nts_algorithm_negotiation = 4,
-	nts_new_cookie = 5,
-	nts_server_negotiation = 6,
-	nts_port_negotiation = 7
+        nts_end_of_message = 0,         // CRITICAL
+        nts_next_protocol_negotiation = 1,      // CRITICAL
+        nts_error = 2,                  // CRITICAL
+        nts_warning = 3,
+        nts_algorithm_negotiation = 4,
+        nts_new_cookie = 5,
+        nts_server_negotiation = 6,
+        nts_port_negotiation = 7
 };
 
 enum nts_protocol_type {
-	nts_protocol_NTP = 0,
+        nts_protocol_NTP = 0,
 };
 
 
 enum nts_errors_type {
-	nts_unrecognized_critical_section = 0,
-	nts_bad_request = 1
+        nts_unrecognized_critical_section = 0,
+        nts_bad_request = 1
 };
 
 
@@ -197,50 +197,50 @@ enum nts_errors_type {
  */
 enum aead_ciphers {
 #define NO_AEAD 0xffff
-	AEAD_AES_128_GCM = 1,
-	AEAD_AES_256_GCM = 2,
-	AEAD_AES_128_CCM = 3,
-	AEAD_AES_256_CCM = 4,
-
-	AEAD_AES_128_GCM_8 = 5,
-	AEAD_AES_256_GCM_8 = 6,
-	AEAD_AES_128_GCM_12 = 7,
-	AEAD_AES_256_GCM_12 = 8,
-
-	AEAD_AES_128_CCM_SHORT = 9,
-	AEAD_AES_256_CCM_SHORT = 10,
-	AEAD_AES_128_CCM_SHORT_8 = 11,
-	AEAD_AES_256_CCM_SHORT_8 = 12,
-	AEAD_AES_128_CCM_SHORT_12 = 13,
-	AEAD_AES_256_CCM_SHORT_12 = 14,
-
-	AEAD_AES_SIV_CMAC_256 = 15,     /* RFC 5297 */
-	AEAD_AES_SIV_CMAC_384 = 16,     /* These 3 are the ones we use */
-	AEAD_AES_SIV_CMAC_512 = 17,
+        AEAD_AES_128_GCM = 1,
+        AEAD_AES_256_GCM = 2,
+        AEAD_AES_128_CCM = 3,
+        AEAD_AES_256_CCM = 4,
+
+        AEAD_AES_128_GCM_8 = 5,
+        AEAD_AES_256_GCM_8 = 6,
+        AEAD_AES_128_GCM_12 = 7,
+        AEAD_AES_256_GCM_12 = 8,
+
+        AEAD_AES_128_CCM_SHORT = 9,
+        AEAD_AES_256_CCM_SHORT = 10,
+        AEAD_AES_128_CCM_SHORT_8 = 11,
+        AEAD_AES_256_CCM_SHORT_8 = 12,
+        AEAD_AES_128_CCM_SHORT_12 = 13,
+        AEAD_AES_256_CCM_SHORT_12 = 14,
+
+        AEAD_AES_SIV_CMAC_256 = 15,     // RFC 5297
+        AEAD_AES_SIV_CMAC_384 = 16,     // These 3 are the ones we use
+        AEAD_AES_SIV_CMAC_512 = 17,
 #define AEAD_AES_SIV_CMAC_256_KEYLEN 32
 #define AEAD_AES_SIV_CMAC_384_KEYLEN 48
 #define AEAD_AES_SIV_CMAC_512_KEYLEN 64
 
-	AEAD_AES_128_CCM_8 = 18,
-	AEAD_AES_256_CCM_8 = 19,
+        AEAD_AES_128_CCM_8 = 18,
+        AEAD_AES_256_CCM_8 = 19,
 
-	AEAD_AES_128_OCB_TAGLEN128 = 20,
-	AEAD_AES_128_OCB_TAGLEN96 = 21,
-	AEAD_AES_128_OCB_TAGLEN64 = 22,
-	AEAD_AES_192_OCB_TAGLEN128 = 23,
-	AEAD_AES_192_OCB_TAGLEN96 = 24,
-	AEAD_AES_192_OCB_TAGLEN64 = 25,
-	AEAD_AES_256_OCB_TAGLEN128 = 26,
-	AEAD_AES_256_OCB_TAGLEN96 = 27,
-	AEAD_AES_256_OCB_TAGLEN64 = 28,
+        AEAD_AES_128_OCB_TAGLEN128 = 20,
+        AEAD_AES_128_OCB_TAGLEN96 = 21,
+        AEAD_AES_128_OCB_TAGLEN64 = 22,
+        AEAD_AES_192_OCB_TAGLEN128 = 23,
+        AEAD_AES_192_OCB_TAGLEN96 = 24,
+        AEAD_AES_192_OCB_TAGLEN64 = 25,
+        AEAD_AES_256_OCB_TAGLEN128 = 26,
+        AEAD_AES_256_OCB_TAGLEN96 = 27,
+        AEAD_AES_256_OCB_TAGLEN64 = 28,
 
-	AEAD_CHACHA20_POLY1305 = 29,
+        AEAD_CHACHA20_POLY1305 = 29,
 
-	AEAD_AES_128_GCM_SIV = 30,
-	AEAD_AES_256_GCM_SIV = 31,
+        AEAD_AES_128_GCM_SIV = 30,
+        AEAD_AES_256_GCM_SIV = 31,
 
-	AEAD_AEGIS128L = 32,
-	AEAD_AEGIS256 = 33
+        AEAD_AEGIS128L = 32,
+        AEAD_AEGIS256 = 33
 };
 
 
@@ -249,7 +249,7 @@ extern struct ntsconfig_t ntsconfig;
 
 
 
-/* NTS-related statistics visible via ntpq -c nts */
+// NTS-related statistics visible via ntpq -c nts
 struct nts_counters {
   uint64_t client_send;
   uint64_t client_recv_good;
@@ -258,17 +258,17 @@ struct nts_counters {
   uint64_t server_recv_good;
   uint64_t server_recv_bad;
   uint64_t cookie_make;
-  uint64_t cookie_not_server;   /* we are not a NTS server */
-  uint64_t cookie_decode_total; /* total attempts, includes too old */
+  uint64_t cookie_not_server;   // we are not a NTS server
+  uint64_t cookie_decode_total;  // total attempts, includes too old
   uint64_t cookie_decode_current;
   uint64_t cookie_decode_old;
   uint64_t cookie_decode_old2;
   uint64_t cookie_decode_older;
-  uint64_t cookie_decode_too_old; /* or garbage */
+  uint64_t cookie_decode_too_old;  // or garbage
   uint64_t cookie_decode_error;
 };
 struct ntske_counters {
-  /* Server */
+  // Server
   uint64_t serves_nossl;
   l_fp     serves_nossl_wall;
   l_fp     serves_nossl_cpu;
@@ -278,7 +278,7 @@ struct ntske_counters {
   uint64_t serves_good;
   l_fp     serves_good_wall;
   l_fp     serves_good_cpu;
-  /* Client */
+  // Client
   uint64_t probes_good;
   uint64_t probes_bad;
 };
@@ -286,4 +286,4 @@ extern struct nts_counters nts_cnt, old_nts_cnt;
 extern struct ntske_counters ntske_cnt, old_ntske_cnt;
 
 
-#endif /* GUARD_NTS_H */
+#endif  // GUARD_NTS_H


=====================================
ntpd/nts_client.c
=====================================
@@ -52,218 +52,218 @@ bool nts_server_lookup(char *server, sockaddr_u *addr, int af);
 
 static SSL_CTX *client_ctx = NULL;
 
-/* Ugly global variables passed from worker thread back to main thread. */
+// Ugly global variables passed from worker thread back to main thread.
 static sockaddr_u sockaddr;
 static bool addrOK;
 
 
 bool nts_client_init(void) {
 
-	client_ctx = make_ssl_client_ctx(ntsconfig.ca);
+        client_ctx = make_ssl_client_ctx(ntsconfig.ca);
 
 
-/* Ugly global variables passed from worker thread back to main thread. */
-	return true;
+// Ugly global variables passed from worker thread back to main thread.
+        return true;
 }
 
 bool nts_probe(struct peer * peer) {
-	struct timeval timeout = {.tv_sec = NTS_KE_TIMEOUT, .tv_usec = 0};
-	const char *hostname = peer->hostname;
-	char hostbuf[100];
-	char errbuf[100];
-	SSL     *ssl;
-	int      server;
-	struct timespec start, finish;
-	int      err;
-
-	if (NULL == client_ctx)
-		return false;
-
-	addrOK = false;
-	clock_gettime(CLOCK_MONOTONIC, &start);
-
-	if (NULL == hostname) {
-		/* IP Address case */
-		int af = AF(&peer->srcadr);
-		switch (af) {
-		    case AF_INET:
-			inet_ntop(af, PSOCK_ADDR4(&peer->srcadr), hostbuf, sizeof(hostbuf));
-			break;
-		    case AF_INET6:
-			/* Add [] in case [xxx]:port */
-			hostbuf[0] = '[';
-			inet_ntop(af, PSOCK_ADDR6(&peer->srcadr), hostbuf+1, sizeof(hostbuf)-1);
-			strlcat(hostbuf, "]", sizeof(hostbuf));
-			break;
-		    default:
-			return false;
-		}
-		hostname = hostbuf;
-//		msyslog(LOG_INFO, "NTSc: Address Literal: %s", hostbuf);
-	}
-
-	server = open_TCP_socket(peer, hostname);
-	if (-1 == server) {
-		ntske_cnt.probes_bad++;
-		return false;
-	}
-
-	err = setsockopt(server, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
-	if (0 > err) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_ERR, "NTSc: can't set recv timeout: %s", errbuf);
-		close(server);
-		ntske_cnt.probes_bad++;
-		return false;
-	}
-	err = setsockopt(server, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout));
-	if (0 > err) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_ERR, "NTSc: can't set send timeout: %s", errbuf);
-		close(server);
-		ntske_cnt.probes_bad++;
-		return false;
-	}
-
-	if (NULL == peer->cfg.nts_cfg.ca)
-		ssl = SSL_new(client_ctx);
-	else {
-		SSL_CTX *ctx;
-		ctx = make_ssl_client_ctx(peer->cfg.nts_cfg.ca);
-		if (NULL == ctx) {
-			close(server);
-			return false;
-		}
-		ssl = SSL_new(ctx);
-		SSL_CTX_free(ctx);
-	}
-	if (NULL == ssl) {
-		msyslog(LOG_ERR, "NTSc: SSL_new failed");
-		nts_log_ssl_error();
-		close(server);
-		ntske_cnt.probes_bad++;
-		return false;
-	}
-	set_hostname(ssl, hostname);
-	SSL_set_fd(ssl, server);
-
-	if (1 != SSL_connect(ssl)) {
-		msyslog(LOG_INFO, "NTSc: SSL_connect failed");
-		nts_log_ssl_error();
-		goto bail;
-	}
-	if (1 != SSL_do_handshake(ssl)) {
-		msyslog(LOG_INFO, "NTSc: SSL_do_handshake failed");
-		nts_log_ssl_error();
-		goto bail;
-	}
-
-	/* This may be clutter, but this is how to do it. */
-	msyslog(LOG_INFO, "NTSc: Using %s, %s (%d)",
-		SSL_get_version(ssl),
-		SSL_get_cipher_name(ssl),
-		SSL_get_cipher_bits(ssl, NULL));
-
-	if (!check_certificate(ssl, peer))
-		goto bail;
-	if (!check_alpn(ssl, peer, hostname))
-		goto bail;
-
-	if (!nts_client_send_request(ssl, peer))
-		goto bail;
-	if (!nts_client_process_response(ssl, peer))
-		goto bail;
-
-	/* We are using AEAD_AES_SIV_CMAC_xxx, from RFC 5297
-	 * key length depends upon which key is selected */
-	peer->nts_state.keylen = nts_get_key_length(peer->nts_state.aead);
-	if (0 == peer->nts_state.keylen) {
-		msyslog(LOG_ERR, "NTSc: Unknown AEAD code: %d", peer->nts_state.aead);
-		goto bail;
-	}
-	if (!nts_make_keys(ssl,
-			   peer->nts_state.aead,
-			   peer->nts_state.c2s,
-			   peer->nts_state.s2c,
-			   peer->nts_state.keylen))
-		goto bail;
-
-	addrOK = true;
-	ntske_cnt.probes_good++;
+        struct timeval timeout = {.tv_sec = NTS_KE_TIMEOUT, .tv_usec = 0};
+        const char *hostname = peer->hostname;
+        char hostbuf[100];
+        char errbuf[100];
+        SSL     *ssl;
+        int      server;
+        struct timespec start, finish;
+        int      err;
+
+        if (NULL == client_ctx)
+                return false;
+
+        addrOK = false;
+        clock_gettime(CLOCK_MONOTONIC, &start);
+
+        if (NULL == hostname) {
+                // IP Address case
+                int af = AF(&peer->srcadr);
+                switch (af) {
+                    case AF_INET:
+                        inet_ntop(af, PSOCK_ADDR4(&peer->srcadr), hostbuf, sizeof(hostbuf));
+                        break;
+                    case AF_INET6:
+                        // Add [] in case [xxx]:port
+                        hostbuf[0] = '[';
+                        inet_ntop(af, PSOCK_ADDR6(&peer->srcadr), hostbuf+1, sizeof(hostbuf)-1);
+                        strlcat(hostbuf, "]", sizeof(hostbuf));
+                        break;
+                    default:
+                        return false;
+                }
+                hostname = hostbuf;
+//              msyslog(LOG_INFO, "NTSc: Address Literal: %s", hostbuf);
+        }
+
+        server = open_TCP_socket(peer, hostname);
+        if (-1 == server) {
+                ntske_cnt.probes_bad++;
+                return false;
+        }
+
+        err = setsockopt(server, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
+        if (0 > err) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_ERR, "NTSc: can't set recv timeout: %s", errbuf);
+                close(server);
+                ntske_cnt.probes_bad++;
+                return false;
+        }
+        err = setsockopt(server, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout));
+        if (0 > err) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_ERR, "NTSc: can't set send timeout: %s", errbuf);
+                close(server);
+                ntske_cnt.probes_bad++;
+                return false;
+        }
+
+        if (NULL == peer->cfg.nts_cfg.ca)
+                ssl = SSL_new(client_ctx);
+        else {
+                SSL_CTX *ctx;
+                ctx = make_ssl_client_ctx(peer->cfg.nts_cfg.ca);
+                if (NULL == ctx) {
+                        close(server);
+                        return false;
+                }
+                ssl = SSL_new(ctx);
+                SSL_CTX_free(ctx);
+        }
+        if (NULL == ssl) {
+                msyslog(LOG_ERR, "NTSc: SSL_new failed");
+                nts_log_ssl_error();
+                close(server);
+                ntske_cnt.probes_bad++;
+                return false;
+        }
+        set_hostname(ssl, hostname);
+        SSL_set_fd(ssl, server);
+
+        if (1 != SSL_connect(ssl)) {
+                msyslog(LOG_INFO, "NTSc: SSL_connect failed");
+                nts_log_ssl_error();
+                goto bail;
+        }
+        if (1 != SSL_do_handshake(ssl)) {
+                msyslog(LOG_INFO, "NTSc: SSL_do_handshake failed");
+                nts_log_ssl_error();
+                goto bail;
+        }
+
+        // This may be clutter, but this is how to do it.
+        msyslog(LOG_INFO, "NTSc: Using %s, %s (%d)",
+                SSL_get_version(ssl),
+                SSL_get_cipher_name(ssl),
+                SSL_get_cipher_bits(ssl, NULL));
+
+        if (!check_certificate(ssl, peer))
+                goto bail;
+        if (!check_alpn(ssl, peer, hostname))
+                goto bail;
+
+        if (!nts_client_send_request(ssl, peer))
+                goto bail;
+        if (!nts_client_process_response(ssl, peer))
+                goto bail;
+
+        /* We are using AEAD_AES_SIV_CMAC_xxx, from RFC 5297
+         * key length depends upon which key is selected */
+        peer->nts_state.keylen = nts_get_key_length(peer->nts_state.aead);
+        if (0 == peer->nts_state.keylen) {
+                msyslog(LOG_ERR, "NTSc: Unknown AEAD code: %d", peer->nts_state.aead);
+                goto bail;
+        }
+        if (!nts_make_keys(ssl,
+                           peer->nts_state.aead,
+                           peer->nts_state.c2s,
+                           peer->nts_state.s2c,
+                           peer->nts_state.keylen))
+                goto bail;
+
+        addrOK = true;
+        ntske_cnt.probes_good++;
 
   bail:
-	if (!addrOK) {
-		ntske_cnt.probes_bad++;
-		peer->nts_state.count = -1;
-	}
-	SSL_shutdown(ssl);
-	SSL_free(ssl);
-	close(server);
-
-	clock_gettime(CLOCK_MONOTONIC, &finish);
-	finish = sub_tspec(finish, start);
-	msyslog(LOG_INFO, "NTSc: NTS-KE req to %s took %.3f sec, %s",
-		hostname, tspec_to_d(finish),
-		addrOK? "OK" : "fail");
-
-	return addrOK;
+        if (!addrOK) {
+                ntske_cnt.probes_bad++;
+                peer->nts_state.count = -1;
+        }
+        SSL_shutdown(ssl);
+        SSL_free(ssl);
+        close(server);
+
+        clock_gettime(CLOCK_MONOTONIC, &finish);
+        finish = sub_tspec(finish, start);
+        msyslog(LOG_INFO, "NTSc: NTS-KE req to %s took %.3f sec, %s",
+                hostname, tspec_to_d(finish),
+                addrOK? "OK" : "fail");
+
+        return addrOK;
 }
 
 bool nts_check(struct peer *peer) {
-	if (0) {
-		char errbuf[100];
-		sockporttoa_r(&sockaddr, errbuf, sizeof(errbuf));
-		msyslog(LOG_INFO, "NTSc: nts_check %s, %d", errbuf, addrOK);
-	}
-	if (addrOK) {
-		if (peer->cast_flags & MDF_POOL) {
-			dns_take_pool(peer, &sockaddr);
-			dns_take_status(peer, DNS_NTS_pool);
-		} else {
-			dns_take_server(peer, &sockaddr);
-			dns_take_status(peer, DNS_good);
-		}
-	} else
-		dns_take_status(peer, DNS_error);
-	return addrOK;
+        if (0) {
+                char errbuf[100];
+                sockporttoa_r(&sockaddr, errbuf, sizeof(errbuf));
+                msyslog(LOG_INFO, "NTSc: nts_check %s, %d", errbuf, addrOK);
+        }
+        if (addrOK) {
+                if (peer->cast_flags & MDF_POOL) {
+                        dns_take_pool(peer, &sockaddr);
+                        dns_take_status(peer, DNS_NTS_pool);
+                } else {
+                        dns_take_server(peer, &sockaddr);
+                        dns_take_status(peer, DNS_good);
+                }
+        } else
+                dns_take_status(peer, DNS_error);
+        return addrOK;
 }
 
 SSL_CTX* make_ssl_client_ctx(const char * filename) {
-	bool ok = true;
-	SSL_CTX *ctx;
-
-	ctx = SSL_CTX_new(TLS_client_method());
-	if (NULL == ctx) {
-		/* Happens if no ciphers */
-		msyslog(LOG_ERR, "NTSc: NULL ctx");
-		nts_log_ssl_error();
-		return NULL;
-	}
-
-	{
-		// 4., ALPN, RFC 7301
-		static unsigned char alpn [] = { 7, 'n', 't', 's', 'k', 'e', '/', '1' };
-		SSL_CTX_set_alpn_protos(ctx, alpn, sizeof(alpn));
-	}
-
-	SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF);
-	SSL_CTX_set_timeout(ctx, NTS_KE_TIMEOUT);   /* session lifetime */
-
-	ok &= nts_load_versions(ctx);
-	ok &= nts_load_ciphers(ctx);
-	ok &= nts_load_ecdhcurves(ctx);
-	ok &= nts_set_cert_search(ctx, filename);
-
-	if (!ok) {
-		msyslog(LOG_ERR, "NTSc: Troubles setting up client SSL CTX");
-		SSL_CTX_free(ctx);
-		return NULL;
-	};
-
-	return ctx;
+        bool ok = true;
+        SSL_CTX *ctx;
+
+        ctx = SSL_CTX_new(TLS_client_method());
+        if (NULL == ctx) {
+                // Happens if no ciphers
+                msyslog(LOG_ERR, "NTSc: NULL ctx");
+                nts_log_ssl_error();
+                return NULL;
+        }
+
+        {
+                // 4., ALPN, RFC 7301
+                static unsigned char alpn [] = { 7, 'n', 't', 's', 'k', 'e', '/', '1' };
+                SSL_CTX_set_alpn_protos(ctx, alpn, sizeof(alpn));
+        }
+
+        SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF);
+        SSL_CTX_set_timeout(ctx, NTS_KE_TIMEOUT);   // session lifetime
+
+        ok &= nts_load_versions(ctx);
+        ok &= nts_load_ciphers(ctx);
+        ok &= nts_load_ecdhcurves(ctx);
+        ok &= nts_set_cert_search(ctx, filename);
+
+        if (!ok) {
+                msyslog(LOG_ERR, "NTSc: Troubles setting up client SSL CTX");
+                SSL_CTX_free(ctx);
+                return NULL;
+        };
+
+        return ctx;
 }
 
-/* FIXME - split out DNS work. */
+// FIXME - split out DNS work.
 
 /* Note that there are 2 DNS lookups.
  *   One for the NTS-KE server and another for the NTP server.
@@ -279,129 +279,129 @@ SSL_CTX* make_ssl_client_ctx(const char * filename) {
  * for most servers.
  */
 
-/* return -1 on error */
+// return -1 on error
 int open_TCP_socket(struct peer *peer, const char *hostname) {
-	char host[256], port[32];
-	char errbuf[100];
-	char *tmp;
-	struct addrinfo hints;
-	struct addrinfo *answer, *worker;
-	int gai_rc;
-	int sockfd;
-	struct timespec start, finish;
-
-	/* FIXME -- const bug in OpenSSL */
-	strlcpy(host, hostname, sizeof(host));
-
-	/* handle xxx:port case */
-	if ('[' == host[0]) {
-		/* IPv6 case, drop [], start search after ] */
-		SET_AF(&peer->srcadr, AF_INET6);
-		strlcpy(host, hostname+1, sizeof(host));
-		tmp = strchr(host, ']');
-		if (NULL == tmp) {
-		  msyslog(LOG_ERR, "NTSc: open_TCP_socket: missing ']': %s",
-		    hostname);
-		  return -1;
-		}
-		*tmp++ = 0;
-		/* We have chopped off the [] around the host literal.
-		 * There should be nothing left or :<port> */
-		if ((0 != *tmp) && (':' != *tmp)) {
-		  msyslog(LOG_ERR, "NTSc: open_TCP_socket: missing ':': %s",
-		    hostname);
-		  return -1;
-		}
-		if (0 == *tmp) tmp = NULL; /* no : */
-	} else {
-		tmp = strchr(host, ':');
-	}
-	if (NULL == tmp) {
-		/* simple case, no : */
-		strlcpy(port, NTS_KE_PORTA, sizeof(port));
-	} else {
-		/* Complicated case, found a : */
-		*tmp++ = 0;
-		strlcpy(port, tmp, sizeof(port));
-		msyslog(LOG_INFO, "NTSc: open_TCP_socket: found port %s", port);
-	}
-
-	ZERO(hints);
-	hints.ai_protocol = IPPROTO_TCP;
-	hints.ai_socktype = SOCK_STREAM;
-	hints.ai_family = AF(&peer->srcadr);  /* -4, -6 switch */
-	clock_gettime(CLOCK_MONOTONIC, &start);
-	gai_rc = getaddrinfo(host, port, &hints, &answer);
-	if (0 != gai_rc) {
-		msyslog(LOG_INFO, "NTSc: open_TCP_socket: DNS error trying to contact %s, %d, %s",
-			hostname, gai_rc, gai_strerror(gai_rc));
-		return -1;
-	}
-	clock_gettime(CLOCK_MONOTONIC, &finish);
-	finish = sub_tspec(finish, start);
-	msyslog(LOG_INFO, "NTSc: DNS lookup of %s (%d) took %.3f sec",
-		hostname, hints.ai_family, tspec_to_d(finish));
-
-	/* sockaddr is global for NTP address
-	 * also use as temp for printing here */
-	if (NULL == peer->hostname) {
-		/* Address literal case, use first/only answer */
-		worker = answer;
-	} else {
-		worker = find_best_addr(answer);
-		if (NULL == worker) {
-			msyslog(LOG_INFO, "NTSc: All addresses in use.");
-			freeaddrinfo(answer);
-			return -1;
-		}
-	}
-	memcpy(&sockaddr, worker->ai_addr, worker->ai_addrlen);
-	sockporttoa_r(&sockaddr, errbuf, sizeof(errbuf));
-	msyslog(LOG_INFO, "NTSc: connecting to %s+%s => %s",
-		host, port, errbuf);
-
-	/* setup default NTP port now
-	 *   in case of server-name:port later on
-	 */
-	SET_PORT(&sockaddr, NTP_PORT);
-	sockfd = socket(worker->ai_family, SOCK_STREAM, 0);
-	if (-1 == sockfd) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_INFO, "NTSc: open_TCP_socket: no socket: %s", errbuf);
-	} else {
-		if (!connect_TCP_socket(sockfd, worker)) {
-			close(sockfd);
-			sockfd = -1;
-		}
-	}
-
-	freeaddrinfo(answer);
-	return sockfd;
+        char host[256], port[32];
+        char errbuf[100];
+        char *tmp;
+        struct addrinfo hints;
+        struct addrinfo *answer, *worker;
+        int gai_rc;
+        int sockfd;
+        struct timespec start, finish;
+
+        // FIXME -- const bug in OpenSSL
+        strlcpy(host, hostname, sizeof(host));
+
+        // handle xxx:port case
+        if ('[' == host[0]) {
+                // IPv6 case, drop [], start search after ]
+                SET_AF(&peer->srcadr, AF_INET6);
+                strlcpy(host, hostname+1, sizeof(host));
+                tmp = strchr(host, ']');
+                if (NULL == tmp) {
+                  msyslog(LOG_ERR, "NTSc: open_TCP_socket: missing ']': %s",
+                    hostname);
+                  return -1;
+                }
+                *tmp++ = 0;
+                /* We have chopped off the [] around the host literal.
+                 * There should be nothing left or :<port> */
+                if ((0 != *tmp) && (':' != *tmp)) {
+                  msyslog(LOG_ERR, "NTSc: open_TCP_socket: missing ':': %s",
+                    hostname);
+                  return -1;
+                }
+                if (0 == *tmp) tmp = NULL;  // no :
+        } else {
+                tmp = strchr(host, ':');
+        }
+        if (NULL == tmp) {
+                // simple case, no :
+                strlcpy(port, NTS_KE_PORTA, sizeof(port));
+        } else {
+                // Complicated case, found a :
+                *tmp++ = 0;
+                strlcpy(port, tmp, sizeof(port));
+                msyslog(LOG_INFO, "NTSc: open_TCP_socket: found port %s", port);
+        }
+
+        ZERO(hints);
+        hints.ai_protocol = IPPROTO_TCP;
+        hints.ai_socktype = SOCK_STREAM;
+        hints.ai_family = AF(&peer->srcadr);  // -4, -6 switch
+        clock_gettime(CLOCK_MONOTONIC, &start);
+        gai_rc = getaddrinfo(host, port, &hints, &answer);
+        if (0 != gai_rc) {
+                msyslog(LOG_INFO, "NTSc: open_TCP_socket: DNS error trying to contact %s, %d, %s",
+                        hostname, gai_rc, gai_strerror(gai_rc));
+                return -1;
+        }
+        clock_gettime(CLOCK_MONOTONIC, &finish);
+        finish = sub_tspec(finish, start);
+        msyslog(LOG_INFO, "NTSc: DNS lookup of %s (%d) took %.3f sec",
+                hostname, hints.ai_family, tspec_to_d(finish));
+
+        /* sockaddr is global for NTP address
+         * also use as temp for printing here */
+        if (NULL == peer->hostname) {
+                // Address literal case, use first/only answer
+                worker = answer;
+        } else {
+                worker = find_best_addr(answer);
+                if (NULL == worker) {
+                        msyslog(LOG_INFO, "NTSc: All addresses in use.");
+                        freeaddrinfo(answer);
+                        return -1;
+                }
+        }
+        memcpy(&sockaddr, worker->ai_addr, worker->ai_addrlen);
+        sockporttoa_r(&sockaddr, errbuf, sizeof(errbuf));
+        msyslog(LOG_INFO, "NTSc: connecting to %s+%s => %s",
+                host, port, errbuf);
+
+        /* setup default NTP port now
+         *   in case of server-name:port later on
+         */
+        SET_PORT(&sockaddr, NTP_PORT);
+        sockfd = socket(worker->ai_family, SOCK_STREAM, 0);
+        if (-1 == sockfd) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_INFO, "NTSc: open_TCP_socket: no socket: %s", errbuf);
+        } else {
+                if (!connect_TCP_socket(sockfd, worker)) {
+                        close(sockfd);
+                        sockfd = -1;
+                }
+        }
+
+        freeaddrinfo(answer);
+        return sockfd;
 
 }
 
 struct addrinfo *find_best_addr(struct addrinfo *answer) {
-	for ( ; NULL != answer; answer = answer->ai_next) {
-		sockaddr_u addr;
-		struct peer *pp;
-		if (sizeof(sockaddr_u) < answer->ai_addrlen)
-			continue;  /* Weird */
-		memcpy(&addr, answer->ai_addr, answer->ai_addrlen);
-		/* findexistingpeer checks port too */
-		for (pp = peer_list; NULL != pp; pp = pp->p_link) {
- 			if (MDF_POOL & pp->cast_flags) continue;
- 			if (FLAG_LOOKUP & pp->cfg.flags) continue;
-			if (SOCK_EQ(&addr, &pp->srcadr)) break;
-		}
-		if (NULL != pp) {
-			char errbuf[200];
-			socktoa_r(&addr, errbuf, sizeof(errbuf));
-			msyslog(LOG_INFO, "NTSc: Skipping %s", errbuf);
-			continue;  /* already in use */
-		}
-		break; 
-	}
-	return(answer);
+        for ( ; NULL != answer; answer = answer->ai_next) {
+                sockaddr_u addr;
+                struct peer *pp;
+                if (sizeof(sockaddr_u) < answer->ai_addrlen)
+                        continue;  // Weird
+                memcpy(&addr, answer->ai_addr, answer->ai_addrlen);
+                // findexistingpeer checks port too
+                for (pp = peer_list; NULL != pp; pp = pp->p_link) {
+                        if (MDF_POOL & pp->cast_flags) continue;
+                        if (FLAG_LOOKUP & pp->cfg.flags) continue;
+                        if (SOCK_EQ(&addr, &pp->srcadr)) break;
+                }
+                if (NULL != pp) {
+                        char errbuf[200];
+                        socktoa_r(&addr, errbuf, sizeof(errbuf));
+                        msyslog(LOG_INFO, "NTSc: Skipping %s", errbuf);
+                        continue;  // already in use
+                }
+                break; 
+        }
+        return(answer);
 }
 
 
@@ -411,108 +411,108 @@ struct addrinfo *find_best_addr(struct addrinfo *answer) {
  * Use man 3 connect.
  */
 bool connect_TCP_socket(int sockfd, struct addrinfo *addr) {
-	char errbuf[100];
-	int err;
-	fd_set fdset;
-	struct timeval timeout;
-	int so_error;
-	socklen_t so_len = sizeof(so_error);
-
-	err = fcntl(sockfd, F_SETFL, O_NONBLOCK);
-	if (-1 == err) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_INFO, "NTSc: can't set O_NONBLOCK %s", errbuf);
-		return false;
-	}
-	err = connect(sockfd, addr->ai_addr, addr->ai_addrlen);
-	/* The usual nonblocking case is -1 and errno == EINPROGRESS.
-	 * A fast local connection can also succeed immediately.
-	 * Getting connected should be possible if the scheduler
-	 * avoids us for long enough.
-	 * Other errors may be possible.  No route?
-	 * I haven't seen that yet.  HGM, 2020 Jan 19
-	 */
-	if (-1 == err && EINPROGRESS != errno) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_INFO, "NTSc: connect_TCP_socket: connect failed: %s", errbuf);
-		return false;
-	}
-
-	if (-1 == err) {
-		FD_ZERO(&fdset);
-		FD_SET(sockfd, &fdset);
-		timeout.tv_sec = NTS_KE_TIMEOUT;
-		timeout.tv_usec = 0;
-
-		if (0 == select(sockfd + 1, NULL, &fdset, NULL, &timeout)) {
-			msyslog(LOG_INFO, "NTSc: connect_TCP_socket: timeout");
-			return false;
-		}
-
-		/* It's ready, either connected or error. */
-		if (-1 == getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &so_error, &so_len)) {
-			ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-			msyslog(LOG_INFO, "NTSc: connect_TCP_socket: getsockopt failed: %s", errbuf);
-			return false;
-		}
-
-		if (0 != so_error) {
-			ntp_strerror_r(so_error, errbuf, sizeof(errbuf));
-			msyslog(LOG_INFO, "NTSc: connect_TCP_socket: connect failed: %s", errbuf);
-			return false;
-		}
-	}
-
-	err = fcntl(sockfd, F_SETFL, 0); /* turn off O_NONBLOCK */
-	if (-1 == err) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_INFO, "NTSc: can't unset O_NONBLOCK %s", errbuf);
-		return false;
-	}
-
-	return true;
+        char errbuf[100];
+        int err;
+        fd_set fdset;
+        struct timeval timeout;
+        int so_error;
+        socklen_t so_len = sizeof(so_error);
+
+        err = fcntl(sockfd, F_SETFL, O_NONBLOCK);
+        if (-1 == err) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_INFO, "NTSc: can't set O_NONBLOCK %s", errbuf);
+                return false;
+        }
+        err = connect(sockfd, addr->ai_addr, addr->ai_addrlen);
+        /* The usual nonblocking case is -1 and errno == EINPROGRESS.
+         * A fast local connection can also succeed immediately.
+         * Getting connected should be possible if the scheduler
+         * avoids us for long enough.
+         * Other errors may be possible.  No route?
+         * I haven't seen that yet.  HGM, 2020 Jan 19
+         */
+        if (-1 == err && EINPROGRESS != errno) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_INFO, "NTSc: connect_TCP_socket: connect failed: %s", errbuf);
+                return false;
+        }
+
+        if (-1 == err) {
+                FD_ZERO(&fdset);
+                FD_SET(sockfd, &fdset);
+                timeout.tv_sec = NTS_KE_TIMEOUT;
+                timeout.tv_usec = 0;
+
+                if (0 == select(sockfd + 1, NULL, &fdset, NULL, &timeout)) {
+                        msyslog(LOG_INFO, "NTSc: connect_TCP_socket: timeout");
+                        return false;
+                }
+
+                // It's ready, either connected or error.
+                if (-1 == getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &so_error, &so_len)) {
+                        ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                        msyslog(LOG_INFO, "NTSc: connect_TCP_socket: getsockopt failed: %s", errbuf);
+                        return false;
+                }
+
+                if (0 != so_error) {
+                        ntp_strerror_r(so_error, errbuf, sizeof(errbuf));
+                        msyslog(LOG_INFO, "NTSc: connect_TCP_socket: connect failed: %s", errbuf);
+                        return false;
+                }
+        }
+
+        err = fcntl(sockfd, F_SETFL, 0);  // turn off O_NONBLOCK
+        if (-1 == err) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_INFO, "NTSc: can't unset O_NONBLOCK %s", errbuf);
+                return false;
+        }
+
+        return true;
 }
 
 
 void set_hostname(SSL *ssl, const char *hostname) {
-	char host[256], *tmp;
-
-	/* chop off [] and trailing :port */
-	strlcpy(host, hostname, sizeof(host));
-	if ('[' == host[0]) {
-	  /* IPv6 literal, [...] format */
-	  strlcpy(host, hostname+1, sizeof(host));
-	  tmp = strchr(host, ']');
-	  if (NULL != tmp) *tmp = 0;
-	} else {
-	  /* not IPv6 [...] format */
-	  tmp = strchr(host, ':');
-	  if (NULL != tmp) {
-	    *tmp = 0;
-	  }
-	}
+        char host[256], *tmp;
+
+        // chop off [] and trailing :port
+        strlcpy(host, hostname, sizeof(host));
+        if ('[' == host[0]) {
+          // IPv6 literal, [...] format
+          strlcpy(host, hostname+1, sizeof(host));
+          tmp = strchr(host, ']');
+          if (NULL != tmp) *tmp = 0;
+        } else {
+          // not IPv6 [...] format
+          tmp = strchr(host, ':');
+          if (NULL != tmp) {
+            *tmp = 0;
+          }
+        }
 
 /* https://wiki.openssl.org/index.php/Hostname_validation
  * draft-ietf-uta-rfc6125bis section 3 relaxes the restrictions around the use
  * of wildcards to make it clear that they're permitted unless specifically
  * prohibited in an RFC
  */
-	SSL_set_hostflags(ssl, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
+        SSL_set_hostflags(ssl, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
 #if OPENSSL_VERSION_NUMBER >= 0x40000000L
 {
-	sockaddr_u addr;
-	if (is_ip_address(host, AF_UNSPEC, &addr))
-	  SSL_set1_ipaddr(ssl, host);
-	else {
-	  SSL_set1_dnsname(ssl, host);
-	  SSL_set_tlsext_host_name(ssl, host);
-	}
+        sockaddr_u addr;
+        if (is_ip_address(host, AF_UNSPEC, &addr))
+          SSL_set1_ipaddr(ssl, host);
+        else {
+          SSL_set1_dnsname(ssl, host);
+          SSL_set_tlsext_host_name(ssl, host);
+        }
 }
 #else
-	SSL_set1_host(ssl, host);  /* DEPRECATED in OpenSSL 4.0 */
-	SSL_set_tlsext_host_name(ssl, host);
+        SSL_set1_host(ssl, host);  // DEPRECATED in OpenSSL 4.0
+        SSL_set_tlsext_host_name(ssl, host);
 #endif
-	msyslog(LOG_DEBUG, "NTSc: set cert host: %s", host);
+        msyslog(LOG_DEBUG, "NTSc: set cert host: %s", host);
 
 }
 
@@ -521,394 +521,394 @@ void set_hostname(SSL *ssl, const char *hostname) {
 //    DNS:*.time.nl, DNS:time.nl
 
 bool check_certificate(SSL *ssl, struct peer* peer) {
-	X509 *cert = SSL_get_peer_certificate(ssl);
-	const X509_NAME *certname;
-	GENERAL_NAMES *gens;
-	char name[200];
-	int certok;
-	int numgens = 0;
-
-	if (NULL == cert) {
-		msyslog(LOG_INFO, "NTSc: No certificate");
-		if (!(FLAG_NTS_NOVAL & peer->cfg.flags))
-			return false;
-		return true;
-	}
-
-	certname = X509_get_subject_name(cert);
-	X509_NAME_oneline(certname, name, sizeof(name));
-	msyslog(LOG_INFO, "NTSc: certificate subject name: %s", name);
-	certname = X509_get_issuer_name(cert);
-	X509_NAME_oneline(certname, name, sizeof(name));
-	msyslog(LOG_INFO, "NTSc: certificate issuer name: %s", name);
-	/* print SAN:DNS strings */
-	gens = X509_get_ext_d2i(cert, NID_subject_alt_name, 0, 0);
-	if (gens) {
-	  char buff[150];
-	  numgens = sk_GENERAL_NAME_num(gens);
-	  buff[0] = 0;
-	  for (int i = 0; i<numgens; i++) {
-	    const GENERAL_NAME *gen;
-	    const char *dnsname;
-	    unsigned int len;
-	    gen = sk_GENERAL_NAME_value(gens, i);
-	    if (gen->type != GEN_DNS)
-	      continue;
-	    // string is NUL terminated but may have internal NULs
-	    len = (unsigned int)ASN1_STRING_length(gen->d.ia5);
-	    dnsname = (const char *)ASN1_STRING_get0_data(gen->d.ia5);
-	    if (0 != buff[0])
-	      strlcat(buff, ", ", sizeof(buff));
-	    strlcat(buff, dnsname, sizeof(buff));
-	    if (len != strlen(dnsname))
-	      strlcat(buff, "??", sizeof(buff));
-	  }
-	  msyslog(LOG_INFO, "NTSc: SAN:DNS %s", buff);
-	  GENERAL_NAMES_free(gens);
-	}
-	if (0 == numgens) {
-	  const char *peername = SSL_get0_peername(ssl);
-	  msyslog(LOG_INFO, "NTSc: matching with subject:CN %s", peername);
-	} else if (1 > numgens) {
-	  const char *peername = SSL_get0_peername(ssl);
-	  msyslog(LOG_INFO, "NTSc: matching with SAN:DNS: %s", peername);
-	}
-	X509_free(cert);
-	certok = SSL_get_verify_result(ssl);
-	if (X509_V_OK == certok) {
-		msyslog(LOG_INFO, "NTSc: certificate is valid.");
-	} else {
-		msyslog(LOG_ERR, "NTSc: certificate invalid: %d=>%s",
-			certok, X509_verify_cert_error_string(certok));
-		if (FLAG_NTS_NOVAL & peer->cfg.flags) {
-			msyslog(LOG_INFO, "NTSc: noval - accepting invalid cert.");
-			return true;
-		}
-		return false;
-	}
-	return true;
+        X509 *cert = SSL_get_peer_certificate(ssl);
+        const X509_NAME *certname;
+        GENERAL_NAMES *gens;
+        char name[200];
+        int certok;
+        int numgens = 0;
+
+        if (NULL == cert) {
+                msyslog(LOG_INFO, "NTSc: No certificate");
+                if (!(FLAG_NTS_NOVAL & peer->cfg.flags))
+                        return false;
+                return true;
+        }
+
+        certname = X509_get_subject_name(cert);
+        X509_NAME_oneline(certname, name, sizeof(name));
+        msyslog(LOG_INFO, "NTSc: certificate subject name: %s", name);
+        certname = X509_get_issuer_name(cert);
+        X509_NAME_oneline(certname, name, sizeof(name));
+        msyslog(LOG_INFO, "NTSc: certificate issuer name: %s", name);
+        // print SAN:DNS strings
+        gens = X509_get_ext_d2i(cert, NID_subject_alt_name, 0, 0);
+        if (gens) {
+          char buff[150];
+          numgens = sk_GENERAL_NAME_num(gens);
+          buff[0] = 0;
+          for (int i = 0; i<numgens; i++) {
+            const GENERAL_NAME *gen;
+            const char *dnsname;
+            unsigned int len;
+            gen = sk_GENERAL_NAME_value(gens, i);
+            if (gen->type != GEN_DNS)
+              continue;
+            // string is NUL terminated but may have internal NULs
+            len = (unsigned int)ASN1_STRING_length(gen->d.ia5);
+            dnsname = (const char *)ASN1_STRING_get0_data(gen->d.ia5);
+            if (0 != buff[0])
+              strlcat(buff, ", ", sizeof(buff));
+            strlcat(buff, dnsname, sizeof(buff));
+            if (len != strlen(dnsname))
+              strlcat(buff, "??", sizeof(buff));
+          }
+          msyslog(LOG_INFO, "NTSc: SAN:DNS %s", buff);
+          GENERAL_NAMES_free(gens);
+        }
+        if (0 == numgens) {
+          const char *peername = SSL_get0_peername(ssl);
+          msyslog(LOG_INFO, "NTSc: matching with subject:CN %s", peername);
+        } else if (1 > numgens) {
+          const char *peername = SSL_get0_peername(ssl);
+          msyslog(LOG_INFO, "NTSc: matching with SAN:DNS: %s", peername);
+        }
+        X509_free(cert);
+        certok = SSL_get_verify_result(ssl);
+        if (X509_V_OK == certok) {
+                msyslog(LOG_INFO, "NTSc: certificate is valid.");
+        } else {
+                msyslog(LOG_ERR, "NTSc: certificate invalid: %d=>%s",
+                        certok, X509_verify_cert_error_string(certok));
+                if (FLAG_NTS_NOVAL & peer->cfg.flags) {
+                        msyslog(LOG_INFO, "NTSc: noval - accepting invalid cert.");
+                        return true;
+                }
+                return false;
+        }
+        return true;
 }
 
 bool check_alpn(SSL *ssl, struct peer* peer, const char *hostname) {
-	UNUSED_ARG(peer);
-	const unsigned char *data;
-	unsigned int len;
-	SSL_get0_alpn_selected(ssl, &data, &len);
-	if (0 == len) {
-		msyslog(LOG_DEBUG, "NTSc: No ALPN from %s (%s)",
-			hostname, SSL_get_version(ssl));
-		return false;
-	}
-	/* For now, we only support one version.
-	 * This will get more complicated when version 2 arrives. */
-	if (len != 7 ||
-	    0 != memcmp(data, "ntske/1", len)) {
-		/* copy data over so we can print it. */
-		/* don't read past end of data */
-		unsigned int i, l;
-		char buff [16];
-		l = min(len, sizeof(buff)-1);
-		memcpy(buff, data, l);
-		buff[l] = '\0';
-		for (i=0; i<l; i++) {
-			if (!isgraph((int)buff[i])) {
-			  buff[i] = '*'; /* fix non-printing crap */
-			}
-		}
-		msyslog(LOG_DEBUG, "NTSc: Strange ALPN %s (%u) from %s",
-			buff, len, hostname);
-		return false;
-	}
-	msyslog(LOG_DEBUG, "NTSc: Good ALPN from %s", hostname);
-
-	return true;
+        UNUSED_ARG(peer);
+        const unsigned char *data;
+        unsigned int len;
+        SSL_get0_alpn_selected(ssl, &data, &len);
+        if (0 == len) {
+                msyslog(LOG_DEBUG, "NTSc: No ALPN from %s (%s)",
+                        hostname, SSL_get_version(ssl));
+                return false;
+        }
+        /* For now, we only support one version.
+         * This will get more complicated when version 2 arrives. */
+        if (len != 7 ||
+            0 != memcmp(data, "ntske/1", len)) {
+                // copy data over so we can print it.
+                // don't read past end of data
+                unsigned int i, l;
+                char buff [16];
+                l = min(len, sizeof(buff)-1);
+                memcpy(buff, data, l);
+                buff[l] = '\0';
+                for (i=0; i<l; i++) {
+                        if (!isgraph((int)buff[i])) {
+                          buff[i] = '*';  // fix non-printing crap
+                        }
+                }
+                msyslog(LOG_DEBUG, "NTSc: Strange ALPN %s (%u) from %s",
+                        buff, len, hostname);
+                return false;
+        }
+        msyslog(LOG_DEBUG, "NTSc: Good ALPN from %s", hostname);
+
+        return true;
 }
 
 
 bool nts_make_keys(SSL *ssl, uint16_t aead, uint8_t *c2s, uint8_t *s2c, int keylen) {
-	const char *label = "EXPORTER-network-time-security";
-	unsigned char context[5];
-	context[0] = (nts_protocol_NTP >> 8) & 0xFF;
-	context[1] = nts_protocol_NTP & 0xFF;
-	context[2] = (aead >> 8) & 0xFF;
-	context[3] = aead & 0xFF;
-	context[4] = 0x00;
-	if (1 != SSL_export_keying_material(ssl, c2s, keylen,
-					    label, strlen(label),
-					    context, 5, 1)) {
-		msyslog(LOG_ERR, "NTS: Error making c2s\n");
-		nts_log_ssl_error();
-		return false;
-	}
-	context[4] = 0x01;
-	if (1 != SSL_export_keying_material(ssl, s2c, keylen,
-					    label, strlen(label),
-					    context, 5, 1)) {
-		msyslog(LOG_ERR, "NTS: Error making s2c\n");
-		nts_log_ssl_error();
-		return false;
-	}
-	return true;
+        const char *label = "EXPORTER-network-time-security";
+        unsigned char context[5];
+        context[0] = (nts_protocol_NTP >> 8) & 0xFF;
+        context[1] = nts_protocol_NTP & 0xFF;
+        context[2] = (aead >> 8) & 0xFF;
+        context[3] = aead & 0xFF;
+        context[4] = 0x00;
+        if (1 != SSL_export_keying_material(ssl, c2s, keylen,
+                                            label, strlen(label),
+                                            context, 5, 1)) {
+                msyslog(LOG_ERR, "NTS: Error making c2s\n");
+                nts_log_ssl_error();
+                return false;
+        }
+        context[4] = 0x01;
+        if (1 != SSL_export_keying_material(ssl, s2c, keylen,
+                                            label, strlen(label),
+                                            context, 5, 1)) {
+                msyslog(LOG_ERR, "NTS: Error making s2c\n");
+                nts_log_ssl_error();
+                return false;
+        }
+        return true;
 }
 
 bool nts_client_send_request(SSL *ssl, struct peer* peer) {
-	uint8_t buff[1000];
-	int     used, transferred;
-	bool    success;
-	const char *errtxt = NULL;
+        uint8_t buff[1000];
+        int     used, transferred;
+        bool    success;
+        const char *errtxt = NULL;
 
-	success = nts_client_send_request_core(buff, sizeof(buff), &used, peer);
-	if (!success) {
-		return false;
-	}
+        success = nts_client_send_request_core(buff, sizeof(buff), &used, peer);
+        if (!success) {
+                return false;
+        }
 
-	transferred = nts_ssl_write(ssl, buff, used, &errtxt);
-	if (used != transferred)
-		return false;
+        transferred = nts_ssl_write(ssl, buff, used, &errtxt);
+        if (used != transferred)
+                return false;
 
-	return true;
+        return true;
 }
 
 bool nts_client_send_request_core(uint8_t *buff, int buf_size, int *used, struct peer* peer) {
-	struct  BufCtl_t buf;
-	uint16_t aead = NO_AEAD;
-
-	buf.next = buff;
-	buf.left = buf_size;
-
-	/* 4.1.2 Next Protocol, 0 for NTP */
-	ke_append_record_uint16(&buf,
-				NTS_CRITICAL+nts_next_protocol_negotiation, nts_protocol_NTP);
-
-	/* 4.1.5 AEAD Algorithm List */
-	// FIXME should be : separated list
-
-	if ((NO_AEAD == aead) && (NULL != peer->cfg.nts_cfg.aead))
-		aead = nts_string_to_aead(peer->cfg.nts_cfg.aead);
-	if ((NO_AEAD == aead) && (NULL != ntsconfig.aead))
-		aead = nts_string_to_aead(ntsconfig.aead);
-	if (NO_AEAD == aead)
-		aead = AEAD_AES_SIV_CMAC_256;
-	ke_append_record_uint16(&buf, nts_algorithm_negotiation, aead);
-
-	/* 4.1.1: End, Critical */
-	ke_append_record_null(&buf, NTS_CRITICAL+nts_end_of_message);
-
-	*used = buf_size-buf.left;
-	if (*used >= (int)(buf_size - 10)) {
-		msyslog(LOG_ERR, "ERR-NTSc: buffer overflow: %d, %ld",
-			*used, (long)buf_size);
-		exit(2);
-	}
-	return true;
+        struct  BufCtl_t buf;
+        uint16_t aead = NO_AEAD;
+
+        buf.next = buff;
+        buf.left = buf_size;
+
+        // 4.1.2 Next Protocol, 0 for NTP
+        ke_append_record_uint16(&buf,
+                                NTS_CRITICAL+nts_next_protocol_negotiation, nts_protocol_NTP);
+
+        // 4.1.5 AEAD Algorithm List
+        // FIXME should be : separated list
+
+        if ((NO_AEAD == aead) && (NULL != peer->cfg.nts_cfg.aead))
+                aead = nts_string_to_aead(peer->cfg.nts_cfg.aead);
+        if ((NO_AEAD == aead) && (NULL != ntsconfig.aead))
+                aead = nts_string_to_aead(ntsconfig.aead);
+        if (NO_AEAD == aead)
+                aead = AEAD_AES_SIV_CMAC_256;
+        ke_append_record_uint16(&buf, nts_algorithm_negotiation, aead);
+
+        // 4.1.1: End, Critical
+        ke_append_record_null(&buf, NTS_CRITICAL+nts_end_of_message);
+
+        *used = buf_size-buf.left;
+        if (*used >= (int)(buf_size - 10)) {
+                msyslog(LOG_ERR, "ERR-NTSc: buffer overflow: %d, %ld",
+                        *used, (long)buf_size);
+                exit(2);
+        }
+        return true;
 }
 
 bool nts_client_process_response(SSL *ssl, struct peer* peer) {
-	uint8_t  buff[2048];  /* RFC 4. says SHOULD be 65K */
-	int transferred;
-	const char *errtxt = NULL;
+        uint8_t  buff[2048];  // RFC 4. says SHOULD be 65K
+        int transferred;
+        const char *errtxt = NULL;
 
-	transferred = nts_ssl_read(ssl, buff, sizeof(buff), &errtxt);
-	if (0 >= transferred)
-		return false;
-	msyslog(LOG_ERR, "NTSc: read %d bytes", transferred);
+        transferred = nts_ssl_read(ssl, buff, sizeof(buff), &errtxt);
+        if (0 >= transferred)
+                return false;
+        msyslog(LOG_ERR, "NTSc: read %d bytes", transferred);
 
-	return nts_client_process_response_core(buff, transferred, peer);
+        return nts_client_process_response_core(buff, transferred, peer);
 }
 
 bool nts_client_process_response_core(uint8_t *buff, int transferred, struct peer* peer) {
-	int idx;
-	struct BufCtl_t buf;
-
-	peer->nts_state.cookielen = 0;
-	peer->nts_state.aead = NO_AEAD;
-	peer->nts_state.keylen = 0;
-	peer->nts_state.writeIdx = 0;
-	peer->nts_state.readIdx = 0;
-	peer->nts_state.count = 0;
-
-	buf.next = buff;
-	buf.left = transferred;
-	while (buf.left >= NTS_KE_HDR_LNG) {
-		uint16_t type, data, port;
-		bool critical = false;
-		int length, keylength;
-		char errbuf[100];
+        int idx;
+        struct BufCtl_t buf;
+
+        peer->nts_state.cookielen = 0;
+        peer->nts_state.aead = NO_AEAD;
+        peer->nts_state.keylen = 0;
+        peer->nts_state.writeIdx = 0;
+        peer->nts_state.readIdx = 0;
+        peer->nts_state.count = 0;
+
+        buf.next = buff;
+        buf.left = transferred;
+        while (buf.left >= NTS_KE_HDR_LNG) {
+                uint16_t type, data, port;
+                bool critical = false;
+                int length, keylength;
+                char errbuf[100];
 #define MAX_SERVER 100
-		char server[MAX_SERVER];
-
-		type = ke_next_record(&buf, &length);
-		if (length > buf.left){
-			msyslog(LOG_ERR, "NTSc: Chunk too big: 0x%x, %d, %d", 
-				type, buf.left, length);
-			return false;
-		}
-		if (NTS_CRITICAL & type) {
-			critical = true;
-			type &= ~NTS_CRITICAL;
-		}
-		if (0) // Handy for debugging but very verbose
-			msyslog(LOG_ERR, "NTSc: Record: T=%d, L=%d, C=%d", type, length, critical);
-		switch (type) {
-		    case nts_error:
-			if (sizeof(data) != length) {
-				msyslog(LOG_ERR, "NTSc: wrong length on error: %d", length);
-				return false;
-			}
-			data = next_uint16(&buf);
-			msyslog(LOG_ERR, "NTSc: error: %d", data);
-			return false;
-		    case nts_next_protocol_negotiation:
-			if (sizeof(data) != length) {
-				msyslog(LOG_ERR, "NTSc: NPN-Wrong length: %d", length);
-				return false;
-			}
-			data = next_uint16(&buf);
-			if (data != nts_protocol_NTP) {
-				msyslog(LOG_ERR, "NTSc: NPN-Bad data: %d", data);
-				return false;
-			}
-			break;
-		    case nts_algorithm_negotiation:
-			if (sizeof(data) != length) {
-				msyslog(LOG_ERR, "NTSc: AN-Wrong length: %d", length);
-				return false;
-			}
-			data = next_uint16(&buf);
-			keylength = nts_get_key_length(data);
-			if (0 == keylength) {
-				msyslog(LOG_ERR, "NTSc: AN-Unsupported AEAN type: %d", data);
-				return false;
-			}
-			peer->nts_state.aead = data;
-			break;
-		    case nts_new_cookie:
-			if (NTS_MAX_COOKIELEN < length) {
-				msyslog(LOG_ERR, "NTSc: NC cookie too big: %d", length);
-				return false;
-			}
-			if (0 == peer->nts_state.cookielen)
-				peer->nts_state.cookielen = length;
-			if (length != peer->nts_state.cookielen) {
-				msyslog(LOG_ERR, "NTSc: Cookie length mismatch %d, %d.",
-					length, peer->nts_state.cookielen);
-				return false;
-			}
-			idx = peer->nts_state.writeIdx;
-			if (NTS_MAX_COOKIES <= peer->nts_state.count) {
-				msyslog(LOG_ERR, "NTSc: Extra cookie ignored.");
-				buf.next += length;
-				buf.left -= length;
-				break;
-			}
-			next_bytes(&buf, (uint8_t*)&peer->nts_state.cookies[idx], length);
-			peer->nts_state.writeIdx++;
-			peer->nts_state.writeIdx = peer->nts_state.writeIdx % NTS_MAX_COOKIES;
-			peer->nts_state.count++;
-			break;
-		    case nts_server_negotiation:
-			if (MAX_SERVER < (length+1)) {
-				msyslog(LOG_ERR, "NTSc: server string too long %d.", length);
-				return false;
-			}
-			next_bytes(&buf, (uint8_t *)server, length);
-			server[length] = '\0';
-			/* save port in case port specified before server */
-			port = SRCPORT(&sockaddr);
-			if (!nts_server_lookup(server, &sockaddr, AF(&peer->srcadr)))
-				return false;
-			SET_PORT(&sockaddr, port);
-			socktoa_r(&sockaddr, errbuf, sizeof(errbuf));
-			msyslog(LOG_ERR, "NTSc: Using server %s=>%s", server, errbuf);
-			break;
-		    case nts_port_negotiation:
-			if (sizeof(port) != length) {
-				msyslog(LOG_ERR, "NTSc: PN-Wrong length: %d, %d",
-					length, critical);
-				return false;
-			}
-			port = next_uint16(&buf);
-			SET_PORT(&sockaddr, port);
-			msyslog(LOG_ERR, "NTSc: Using port %d", port);
-			break;
-		    case nts_end_of_message:
-			if ((0 != length) || !critical) {
-				msyslog(LOG_ERR, "NTSc: EOM-Wrong length or not Critical: %d, %d",
-					length, critical);
-				return false;
-			}
-			if (0 != buf.left) {
-				msyslog(LOG_ERR, "NTSc: EOM not at end: %d", buf.left);
-				return false;
-			}
-			break;
-		    default:
-			msyslog(LOG_ERR, "NTSc: received strange type: T=%d, C=%d, L=%d",
-				type, critical, length);
-			if (critical) {
-				return false;
-			}
-			buf.next += length;
-			buf.left -= length;
-			break;
-		} /* case */
-	}   /* while */
-
-//	FIXME: Need to check for EOM -- read more??
-	if (buf.left > 0)
-		return false;
-
-	if (NO_AEAD == peer->nts_state.aead) {
-		msyslog(LOG_ERR, "NTSc: No AEAD algorithm.");
-		return false;
-	}
-	if (0 == peer->nts_state.count) {
-		msyslog(LOG_ERR, "NTSc: No cookies.");
-		return false;
-	}
-
-	msyslog(LOG_ERR, "NTSc: Got %d cookies, length %d, aead=%d.",
-		peer->nts_state.count, peer->nts_state.cookielen, peer->nts_state.aead);
-	return true;
+                char server[MAX_SERVER];
+
+                type = ke_next_record(&buf, &length);
+                if (length > buf.left){
+                        msyslog(LOG_ERR, "NTSc: Chunk too big: 0x%x, %d, %d", 
+                                type, buf.left, length);
+                        return false;
+                }
+                if (NTS_CRITICAL & type) {
+                        critical = true;
+                        type &= ~NTS_CRITICAL;
+                }
+                if (0) // Handy for debugging but very verbose
+                        msyslog(LOG_ERR, "NTSc: Record: T=%d, L=%d, C=%d", type, length, critical);
+                switch (type) {
+                    case nts_error:
+                        if (sizeof(data) != length) {
+                                msyslog(LOG_ERR, "NTSc: wrong length on error: %d", length);
+                                return false;
+                        }
+                        data = next_uint16(&buf);
+                        msyslog(LOG_ERR, "NTSc: error: %d", data);
+                        return false;
+                    case nts_next_protocol_negotiation:
+                        if (sizeof(data) != length) {
+                                msyslog(LOG_ERR, "NTSc: NPN-Wrong length: %d", length);
+                                return false;
+                        }
+                        data = next_uint16(&buf);
+                        if (data != nts_protocol_NTP) {
+                                msyslog(LOG_ERR, "NTSc: NPN-Bad data: %d", data);
+                                return false;
+                        }
+                        break;
+                    case nts_algorithm_negotiation:
+                        if (sizeof(data) != length) {
+                                msyslog(LOG_ERR, "NTSc: AN-Wrong length: %d", length);
+                                return false;
+                        }
+                        data = next_uint16(&buf);
+                        keylength = nts_get_key_length(data);
+                        if (0 == keylength) {
+                                msyslog(LOG_ERR, "NTSc: AN-Unsupported AEAN type: %d", data);
+                                return false;
+                        }
+                        peer->nts_state.aead = data;
+                        break;
+                    case nts_new_cookie:
+                        if (NTS_MAX_COOKIELEN < length) {
+                                msyslog(LOG_ERR, "NTSc: NC cookie too big: %d", length);
+                                return false;
+                        }
+                        if (0 == peer->nts_state.cookielen)
+                                peer->nts_state.cookielen = length;
+                        if (length != peer->nts_state.cookielen) {
+                                msyslog(LOG_ERR, "NTSc: Cookie length mismatch %d, %d.",
+                                        length, peer->nts_state.cookielen);
+                                return false;
+                        }
+                        idx = peer->nts_state.writeIdx;
+                        if (NTS_MAX_COOKIES <= peer->nts_state.count) {
+                                msyslog(LOG_ERR, "NTSc: Extra cookie ignored.");
+                                buf.next += length;
+                                buf.left -= length;
+                                break;
+                        }
+                        next_bytes(&buf, (uint8_t*)&peer->nts_state.cookies[idx], length);
+                        peer->nts_state.writeIdx++;
+                        peer->nts_state.writeIdx = peer->nts_state.writeIdx % NTS_MAX_COOKIES;
+                        peer->nts_state.count++;
+                        break;
+                    case nts_server_negotiation:
+                        if (MAX_SERVER < (length+1)) {
+                                msyslog(LOG_ERR, "NTSc: server string too long %d.", length);
+                                return false;
+                        }
+                        next_bytes(&buf, (uint8_t *)server, length);
+                        server[length] = '\0';
+                        // save port in case port specified before server
+                        port = SRCPORT(&sockaddr);
+                        if (!nts_server_lookup(server, &sockaddr, AF(&peer->srcadr)))
+                                return false;
+                        SET_PORT(&sockaddr, port);
+                        socktoa_r(&sockaddr, errbuf, sizeof(errbuf));
+                        msyslog(LOG_ERR, "NTSc: Using server %s=>%s", server, errbuf);
+                        break;
+                    case nts_port_negotiation:
+                        if (sizeof(port) != length) {
+                                msyslog(LOG_ERR, "NTSc: PN-Wrong length: %d, %d",
+                                        length, critical);
+                                return false;
+                        }
+                        port = next_uint16(&buf);
+                        SET_PORT(&sockaddr, port);
+                        msyslog(LOG_ERR, "NTSc: Using port %d", port);
+                        break;
+                    case nts_end_of_message:
+                        if ((0 != length) || !critical) {
+                                msyslog(LOG_ERR, "NTSc: EOM-Wrong length or not Critical: %d, %d",
+                                        length, critical);
+                                return false;
+                        }
+                        if (0 != buf.left) {
+                                msyslog(LOG_ERR, "NTSc: EOM not at end: %d", buf.left);
+                                return false;
+                        }
+                        break;
+                    default:
+                        msyslog(LOG_ERR, "NTSc: received strange type: T=%d, C=%d, L=%d",
+                                type, critical, length);
+                        if (critical) {
+                                return false;
+                        }
+                        buf.next += length;
+                        buf.left -= length;
+                        break;
+                }  // case
+        }   // while
+
+//      FIXME: Need to check for EOM -- read more??
+        if (buf.left > 0)
+                return false;
+
+        if (NO_AEAD == peer->nts_state.aead) {
+                msyslog(LOG_ERR, "NTSc: No AEAD algorithm.");
+                return false;
+        }
+        if (0 == peer->nts_state.count) {
+                msyslog(LOG_ERR, "NTSc: No cookies.");
+                return false;
+        }
+
+        msyslog(LOG_ERR, "NTSc: Got %d cookies, length %d, aead=%d.",
+                peer->nts_state.count, peer->nts_state.cookielen, peer->nts_state.aead);
+        return true;
 }
 
 bool nts_set_cert_search(SSL_CTX *ctx, const char *filename) {
-	struct stat statbuf;
-	char errbuf[100];
-	if (NULL == filename) {
-		msyslog(LOG_INFO, "NTSc: Using system default root certificates.");
-		SSL_CTX_set_default_verify_paths(ctx);   // Use system root certs
-		return true;
-	}
-	if (0 == stat(filename, &statbuf)) {
-		if (S_ISDIR(statbuf.st_mode)) {
-			if (1 != SSL_CTX_load_verify_locations(
-				ctx, NULL, filename)) {
-			msyslog(LOG_INFO, "NTSc: Can't use %s as dir for root certificates.", filename);
-			    nts_log_ssl_error();
-			    return false;
-			}
-			msyslog(LOG_INFO, "NTSc: Using dir %s for root certificates.", filename);
-			return true;
-		}
-		if (S_ISREG(statbuf.st_mode)) {
-			if (1 != SSL_CTX_load_verify_locations(
-				ctx, filename, NULL)) {
-			    msyslog(LOG_INFO, "NTSc: Can't use %s as file for root certificates.", filename);
-			    nts_log_ssl_error();
-			    return false;
-			}
-			msyslog(LOG_INFO, "NTSc: Using file %s for root certificates.", filename);
-			return true;
-		}
-		msyslog(LOG_ERR, "NTSc: cert dir/file isn't dir or file: %s. mode 0x%x",
-			filename, statbuf.st_mode);
-		return false;
-	}
-	ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-	msyslog(LOG_ERR, "NTSc: can't stat cert dir/file: %s, %s",
-		filename, errbuf);
-	return false;
+        struct stat statbuf;
+        char errbuf[100];
+        if (NULL == filename) {
+                msyslog(LOG_INFO, "NTSc: Using system default root certificates.");
+                SSL_CTX_set_default_verify_paths(ctx);   // Use system root certs
+                return true;
+        }
+        if (0 == stat(filename, &statbuf)) {
+                if (S_ISDIR(statbuf.st_mode)) {
+                        if (1 != SSL_CTX_load_verify_locations(
+                                ctx, NULL, filename)) {
+                        msyslog(LOG_INFO, "NTSc: Can't use %s as dir for root certificates.", filename);
+                            nts_log_ssl_error();
+                            return false;
+                        }
+                        msyslog(LOG_INFO, "NTSc: Using dir %s for root certificates.", filename);
+                        return true;
+                }
+                if (S_ISREG(statbuf.st_mode)) {
+                        if (1 != SSL_CTX_load_verify_locations(
+                                ctx, filename, NULL)) {
+                            msyslog(LOG_INFO, "NTSc: Can't use %s as file for root certificates.", filename);
+                            nts_log_ssl_error();
+                            return false;
+                        }
+                        msyslog(LOG_INFO, "NTSc: Using file %s for root certificates.", filename);
+                        return true;
+                }
+                msyslog(LOG_ERR, "NTSc: cert dir/file isn't dir or file: %s. mode 0x%x",
+                        filename, statbuf.st_mode);
+                return false;
+        }
+        ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+        msyslog(LOG_ERR, "NTSc: can't stat cert dir/file: %s, %s",
+                filename, errbuf);
+        return false;
 }
 /* The -4/-6 option is used for both the NTS-KE server and the NTP server.
  * That will break if the KE server returns a name that returns only an
@@ -916,31 +916,31 @@ bool nts_set_cert_search(SSL_CTX *ctx, const char *filename) {
  * We could fix that by trying again with AF_UNSPEC.
  */
 bool nts_server_lookup(char *server, sockaddr_u *addr, int af) {
-	struct addrinfo hints;
-	struct addrinfo *answer = NULL;  /* init to keep oss-fuzz happy */
-	int gai_rc;
+        struct addrinfo hints;
+        struct addrinfo *answer = NULL;  // init to keep oss-fuzz happy
+        int gai_rc;
 
-	ZERO(hints);
-	hints.ai_protocol = IPPROTO_UDP;
-	hints.ai_socktype = SOCK_DGRAM;
-	hints.ai_family = af;
+        ZERO(hints);
+        hints.ai_protocol = IPPROTO_UDP;
+        hints.ai_socktype = SOCK_DGRAM;
+        hints.ai_family = af;
 
-	gai_rc = getaddrinfo(server, NTS_KE_PORTA, &hints, &answer);
-	if (0 != gai_rc) {
-		msyslog(LOG_INFO, "NTSc: DNS error trying to lookup %s: %d, %s",
-			server, gai_rc, gai_strerror(gai_rc));
-		return false;
-	}
+        gai_rc = getaddrinfo(server, NTS_KE_PORTA, &hints, &answer);
+        if (0 != gai_rc) {
+                msyslog(LOG_INFO, "NTSc: DNS error trying to lookup %s: %d, %s",
+                        server, gai_rc, gai_strerror(gai_rc));
+                return false;
+        }
 
-	if (NULL == answer)
-		return false;
+        if (NULL == answer)
+                return false;
 
-	if (sizeof(sockaddr_u) >= answer->ai_addrlen)
-		memcpy(addr, answer->ai_addr, answer->ai_addrlen);
+        if (sizeof(sockaddr_u) >= answer->ai_addrlen)
+                memcpy(addr, answer->ai_addr, answer->ai_addrlen);
 
-	freeaddrinfo(answer);
+        freeaddrinfo(answer);
 
-	return true;
+        return true;
 }
 
-/* end */
+// end


=====================================
ntpd/nts_cookie.c
=====================================
@@ -81,7 +81,7 @@
  * #define is in include/nts.h
  */
 
-/* cookies use same AEAD algorithms as wire */
+// cookies use same AEAD algorithms as wire
 /* This determines which algorithm we use.
  * Valid choices are 32, 48, and 64
  * making this a variable rather than #define
@@ -90,7 +90,7 @@
  * You can change that by editing the keys file.
  */
 int K_length = AEAD_AES_SIV_CMAC_256_KEYLEN;
-time_t K_time = 0;	/* time K was created, 0 for none */
+time_t K_time = 0;      // time K was created, 0 for none
 struct NTS_Key nts_keys[NTS_nKEYS];
 int nts_nKeys = 0;
 
@@ -105,11 +105,11 @@ void nts_lock_cookielock(void);
 void nts_unlock_cookielock(void);
 
 // FIXME  AEAD_LENGTH
-/* Associated data: aead (rounded up to 4) plus NONCE */
+// Associated data: aead (rounded up to 4) plus NONCE
 #define AD_LENGTH 20
 #define AEAD_LENGTH 4
 
-/* cookie_ctx needed for client side */
+// cookie_ctx needed for client side
 bool nts_cookie_init(void) {
   cookie_ctx = AES_SIV_CTX_new();
   if (NULL == cookie_ctx) {
@@ -119,16 +119,16 @@ bool nts_cookie_init(void) {
   return true;
 }
 
-/* cookie key needed for server side */
+// cookie key needed for server side
 bool nts_cookie_init2(void) {
-	bool OK = true;
-	if (!nts_read_cookie_keys()) {
-		/* Can't read cookie file.  Make one */
-		nts_make_cookie_key();
-		K_time = time(NULL);
-		nts_write_cookie_keys();
-	}
-	return OK;
+        bool OK = true;
+        if (!nts_read_cookie_keys()) {
+                // Can't read cookie file.  Make one
+                nts_make_cookie_key();
+                K_time = time(NULL);
+                nts_write_cookie_keys();
+        }
+        return OK;
 }
 
 /* Rotate key -- 24 hours after last rotation
@@ -142,83 +142,83 @@ bool nts_cookie_init2(void) {
 // Just uncommenting the next line will generate a warning reminder.
 // #define SecondsPerDay 3600
 void nts_cookie_timer(void) {
-	time_t now;
-	if (0 == K_time) {
-		return;
-	}
-	now = time(NULL);
-	if (SecondsPerDay > (now-K_time)) {
-		return;
-	}
-	nts_make_cookie_key();
-	/* In case we were off for many days. */
-	while (SecondsPerDay < (now-K_time)) {
-		K_time += SecondsPerDay;
-	}
-	if (nts_write_cookie_keys() )
-		msyslog(LOG_INFO, "NTS: Wrote new cookie file, %d keys.", nts_nKeys);
-	else
-		msyslog(LOG_INFO, "NTS: Trouble writing new cookie file.");
-	return;
+        time_t now;
+        if (0 == K_time) {
+                return;
+        }
+        now = time(NULL);
+        if (SecondsPerDay > (now-K_time)) {
+                return;
+        }
+        nts_make_cookie_key();
+        // In case we were off for many days.
+        while (SecondsPerDay < (now-K_time)) {
+                K_time += SecondsPerDay;
+        }
+        if (nts_write_cookie_keys() )
+                msyslog(LOG_INFO, "NTS: Wrote new cookie file, %d keys.", nts_nKeys);
+        else
+                msyslog(LOG_INFO, "NTS: Trouble writing new cookie file.");
+        return;
 }
 
 
 bool nts_read_cookie_keys(void) {
-	const char *cookie_filename = NTS_COOKIE_KEY_FILE;
-	FILE *in;
-	unsigned long templ;
-	if (NULL != ntsconfig.KI)
-		cookie_filename = ntsconfig.KI;
-	in = fopen(cookie_filename, "r");
-	if (NULL == in) {
-		char errbuf[100];
-		if (ENOENT == errno)
-			return false;		/* File doesn't exist */
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_ERR, "NTSs: can't read old cookie file: %s=>%s",
-			cookie_filename, errbuf);
-		exit(1);
-	}
-	if (1 != fscanf(in, "T: %lu\n", &templ)) {
-		goto bail;
-	}
-	K_time = templ;
-	if (1 != fscanf(in, "L: %d\n", &K_length)) {
-		goto bail;
-	}
-	if ( !((32 == K_length) || (48 == K_length) || (64 == K_length))) {
-		goto bail;
-	}
-	nts_nKeys = 0;
-	for (int i=0; i<NTS_nKEYS; i++) {
-	  struct NTS_Key *key = &nts_keys[i];
-	  if (1 != fscanf(in, "I: %u\n", &key->I)) {
-		if (0 < nts_nKeys) break;
-		goto bail;
-	  }
-	  if (0 != fscanf(in, "K: ")) {
-		goto bail;
-	  }
-	  for (int j=0; j< K_length; j++) {
-		unsigned int temp;
-		if (1 != fscanf(in, "%02x", &temp)) {
-			goto bail;
-		}
-		key->K[j] = temp;
-	  }
-	  if (0 != fscanf(in, "\n")) {
-		goto bail;
-	  }
-	  nts_nKeys = i+1;
-	}
-	fclose(in);
-	msyslog(LOG_INFO, "NTS: Read cookie file, %d keys.", nts_nKeys);
-	return true;
+        const char *cookie_filename = NTS_COOKIE_KEY_FILE;
+        FILE *in;
+        unsigned long templ;
+        if (NULL != ntsconfig.KI)
+                cookie_filename = ntsconfig.KI;
+        in = fopen(cookie_filename, "r");
+        if (NULL == in) {
+                char errbuf[100];
+                if (ENOENT == errno)
+                        return false;           // File doesn't exist
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_ERR, "NTSs: can't read old cookie file: %s=>%s",
+                        cookie_filename, errbuf);
+                exit(1);
+        }
+        if (1 != fscanf(in, "T: %lu\n", &templ)) {
+                goto bail;
+        }
+        K_time = templ;
+        if (1 != fscanf(in, "L: %d\n", &K_length)) {
+                goto bail;
+        }
+        if ( !((32 == K_length) || (48 == K_length) || (64 == K_length))) {
+                goto bail;
+        }
+        nts_nKeys = 0;
+        for (int i=0; i<NTS_nKEYS; i++) {
+          struct NTS_Key *key = &nts_keys[i];
+          if (1 != fscanf(in, "I: %u\n", &key->I)) {
+                if (0 < nts_nKeys) break;
+                goto bail;
+          }
+          if (0 != fscanf(in, "K: ")) {
+                goto bail;
+          }
+          for (int j=0; j< K_length; j++) {
+                unsigned int temp;
+                if (1 != fscanf(in, "%02x", &temp)) {
+                        goto bail;
+                }
+                key->K[j] = temp;
+          }
+          if (0 != fscanf(in, "\n")) {
+                goto bail;
+          }
+          nts_nKeys = i+1;
+        }
+        fclose(in);
+        msyslog(LOG_INFO, "NTS: Read cookie file, %d keys.", nts_nKeys);
+        return true;
 
   bail:
-	msyslog(LOG_ERR, "ERR: Error parsing cookie keys file");
-	fclose(in);
-	return false;
+        msyslog(LOG_ERR, "ERR: Error parsing cookie keys file");
+        fclose(in);
+        return false;
 }
 
 /* RFC 8915 describes a ratchet mode to make new keys
@@ -229,241 +229,241 @@ bool nts_read_cookie_keys(void) {
  * they copy the key file to other systems and have them load it.
  */
 void nts_make_cookie_key(void) {
-	if (nts_nKeys < NTS_nKEYS) nts_nKeys++;
-	for (int i=nts_nKeys-1; i>0; i--) {
-	  nts_keys[i] = nts_keys[i-1];
-	}
-	ntp_RAND_priv_bytes(nts_keys[0].K, K_length);
-	ntp_RAND_bytes((uint8_t *)&nts_keys[0].I, sizeof(nts_keys[0].I));
-	return;
+        if (nts_nKeys < NTS_nKEYS) nts_nKeys++;
+        for (int i=nts_nKeys-1; i>0; i--) {
+          nts_keys[i] = nts_keys[i-1];
+        }
+        ntp_RAND_priv_bytes(nts_keys[0].K, K_length);
+        ntp_RAND_bytes((uint8_t *)&nts_keys[0].I, sizeof(nts_keys[0].I));
+        return;
 }
 
 bool nts_write_cookie_keys(void) {
-	const char *cookiefile = NTS_COOKIE_KEY_FILE;
-	char tempfile[PATH_MAX];
-	int fd;
-	FILE *out;
-	char errbuf[100];
-	if (NULL != ntsconfig.KI)
-		cookiefile = ntsconfig.KI;
-	strlcpy(tempfile, cookiefile, sizeof(tempfile));
-	strlcat(tempfile, "-tmp", sizeof(tempfile));
-	fd = open(tempfile, O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR);
-	if (-1 == fd) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_ERR, "ERR: can't open %s: %s", tempfile, errbuf);
-		return false;
-	}
-	out = fdopen(fd, "w");
-	if (NULL == out) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_ERR, "ERR: can't fdopen %s: %s", tempfile, errbuf);
-		close(fd);
-		return false;
-	}
-
-	fprintf(out, "T: %lu\n", (unsigned long)K_time);
-	fprintf(out, "L: %d\n", K_length);
-	for (int i=0; i<nts_nKeys; i++) {
-	  struct NTS_Key *key = &nts_keys[i];
-	  fprintf(out, "I: %u\n", key->I);
-	  fprintf(out, "K: ");
-	    for (int j=0; j< K_length; j++) fprintf(out, "%02x", key->K[j]);
-	  fprintf(out, "\n");
-	  key++;
-	}
-	fclose(out);
+        const char *cookiefile = NTS_COOKIE_KEY_FILE;
+        char tempfile[PATH_MAX];
+        int fd;
+        FILE *out;
+        char errbuf[100];
+        if (NULL != ntsconfig.KI)
+                cookiefile = ntsconfig.KI;
+        strlcpy(tempfile, cookiefile, sizeof(tempfile));
+        strlcat(tempfile, "-tmp", sizeof(tempfile));
+        fd = open(tempfile, O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR);
+        if (-1 == fd) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_ERR, "ERR: can't open %s: %s", tempfile, errbuf);
+                return false;
+        }
+        out = fdopen(fd, "w");
+        if (NULL == out) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_ERR, "ERR: can't fdopen %s: %s", tempfile, errbuf);
+                close(fd);
+                return false;
+        }
+
+        fprintf(out, "T: %lu\n", (unsigned long)K_time);
+        fprintf(out, "L: %d\n", K_length);
+        for (int i=0; i<nts_nKeys; i++) {
+          struct NTS_Key *key = &nts_keys[i];
+          fprintf(out, "I: %u\n", key->I);
+          fprintf(out, "K: ");
+            for (int j=0; j< K_length; j++) fprintf(out, "%02x", key->K[j]);
+          fprintf(out, "\n");
+          key++;
+        }
+        fclose(out);
         if (rename(tempfile, cookiefile)) {
-	    ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+            ntp_strerror_r(errno, errbuf, sizeof(errbuf));
             msyslog(LOG_WARNING,
                     "LOG: Unable to rename temp cookie file %s to %s, %s",
                     tempfile, cookiefile, errbuf);
-	    return false;
-	}
-	return true;
+            return false;
+        }
+        return true;
 }
 
-/* returns actual length */
+// returns actual length
 int nts_make_cookie(uint8_t *cookie,
   uint16_t aead,
   uint8_t *c2s, uint8_t *s2c, int keylen) {
-	uint8_t plaintext[NTS_MAX_COOKIELEN];
-	uint8_t *nonce;
-	int used, plainlength;
-	bool ok;
-	uint8_t * finger;
-	uint32_t temp;	/* keep 4 byte alignment */
-	size_t left;
-
-	if (NULL == cookie_ctx)
-		return 0;		/* We aren't initialized yet. */
-
-	nts_cnt.cookie_make++;
-
-	INSIST(keylen <= NTS_MAX_KEYLEN);
-
-	/* collect plaintext
-	 * separate buffer avoids encrypt in place
-	 * but costs cache space
-	 */
-	finger = plaintext;
-	temp = aead;
-	memcpy(finger, &temp, AEAD_LENGTH);
-	finger += AEAD_LENGTH;
-	memcpy(finger, c2s, keylen);
-	finger += keylen;
-	memcpy(finger, s2c, keylen);
-	finger += keylen;
-	plainlength = finger-plaintext;
-
-	/* collect associated data */
-	finger = cookie;
-
-	memcpy(finger, &nts_keys[0].I, sizeof(nts_keys[0].I));
-	finger += sizeof(nts_keys[0].I);
-
-	nonce = finger;
-	ntp_RAND_bytes(finger, NONCE_LENGTH);
-	finger += NONCE_LENGTH;
-
-	used = finger-cookie;
-	left = NTS_MAX_COOKIELEN-used;
-
-	nts_lock_cookielock();
-
-	ok = AES_SIV_Encrypt(cookie_ctx,
-			     finger, &left,   /* left: in: max out length, out: length used */
-			     nts_keys[0].K, K_length,
-			     nonce, NONCE_LENGTH,
-			     plaintext, plainlength,
-			     cookie, AD_LENGTH);
-
-	nts_unlock_cookielock();
-
-	if (!ok) {
-		msyslog(LOG_ERR, "NTS: nts_make_cookie - Error from AES_SIV_Encrypt");
-		/* I don't think this should happen,
-		 * so crash rather than work incorrectly.
-		 * Hal, 2019-Feb-17
-		 * Similar code in ntp_extens
-		 */
-		exit(1);
-	}
-
-	used += left;
-	INSIST(used <= NTS_MAX_COOKIELEN);
-
-	return used;
+        uint8_t plaintext[NTS_MAX_COOKIELEN];
+        uint8_t *nonce;
+        int used, plainlength;
+        bool ok;
+        uint8_t * finger;
+        uint32_t temp;  // keep 4 byte alignment
+        size_t left;
+
+        if (NULL == cookie_ctx)
+                return 0;               // We aren't initialized yet.
+
+        nts_cnt.cookie_make++;
+
+        INSIST(keylen <= NTS_MAX_KEYLEN);
+
+        /* collect plaintext
+         * separate buffer avoids encrypt in place
+         * but costs cache space
+         */
+        finger = plaintext;
+        temp = aead;
+        memcpy(finger, &temp, AEAD_LENGTH);
+        finger += AEAD_LENGTH;
+        memcpy(finger, c2s, keylen);
+        finger += keylen;
+        memcpy(finger, s2c, keylen);
+        finger += keylen;
+        plainlength = finger-plaintext;
+
+        // collect associated data
+        finger = cookie;
+
+        memcpy(finger, &nts_keys[0].I, sizeof(nts_keys[0].I));
+        finger += sizeof(nts_keys[0].I);
+
+        nonce = finger;
+        ntp_RAND_bytes(finger, NONCE_LENGTH);
+        finger += NONCE_LENGTH;
+
+        used = finger-cookie;
+        left = NTS_MAX_COOKIELEN-used;
+
+        nts_lock_cookielock();
+
+        ok = AES_SIV_Encrypt(cookie_ctx,
+                             finger, &left,   // left: in: max out length, out: length used
+                             nts_keys[0].K, K_length,
+                             nonce, NONCE_LENGTH,
+                             plaintext, plainlength,
+                             cookie, AD_LENGTH);
+
+        nts_unlock_cookielock();
+
+        if (!ok) {
+                msyslog(LOG_ERR, "NTS: nts_make_cookie - Error from AES_SIV_Encrypt");
+                /* I don't think this should happen,
+                 * so crash rather than work incorrectly.
+                 * Hal, 2019-Feb-17
+                 * Similar code in ntp_extens
+                 */
+                exit(1);
+        }
+
+        used += left;
+        INSIST(used <= NTS_MAX_COOKIELEN);
+
+        return used;
 }
 
-/* can't decrypt in place - that would trash the unauthenticated packet */
+// can't decrypt in place - that would trash the unauthenticated packet
 bool nts_unpack_cookie(uint8_t *cookie, int cookielen,
   uint16_t *aead,
   uint8_t *c2s, uint8_t *s2c, int *keylen) {
-	uint8_t *finger;
-	uint8_t plaintext[NTS_MAX_COOKIELEN];
-	uint8_t *nonce;
-	uint32_t temp;
-	size_t plainlength;
-	int cipherlength;
-	bool ok;
-	struct NTS_Key *key;
-	int i;
-
-	if (NULL == cookie_ctx)
-		return false;	/* We aren't initialized yet. */
-
-	if (0 == nts_nKeys) {
-		nts_cnt.cookie_not_server++;
-		return false;  /* We are not a NTS enabled server. */
-	}
-
-	/* We may get garbage from the net */
-	if (cookielen > NTS_MAX_COOKIELEN)
-		return false;
-
-	finger = cookie;
-	key = NULL;		/* squash uninitialized warning */
-	for (i=0; i<nts_nKeys; i++) {
-	  key = &nts_keys[i];
-	  if (0 == memcmp(finger, &key->I, sizeof(key->I))) {
-		break;
-	  }
-	}
-	nts_cnt.cookie_decode_total++;  /* total attempts, includes too old */
-	if (nts_nKeys == i) {
-		nts_cnt.cookie_decode_too_old++;
-		return false;
+        uint8_t *finger;
+        uint8_t plaintext[NTS_MAX_COOKIELEN];
+        uint8_t *nonce;
+        uint32_t temp;
+        size_t plainlength;
+        int cipherlength;
+        bool ok;
+        struct NTS_Key *key;
+        int i;
+
+        if (NULL == cookie_ctx)
+                return false;   // We aren't initialized yet.
+
+        if (0 == nts_nKeys) {
+                nts_cnt.cookie_not_server++;
+                return false;  // We are not a NTS enabled server.
+        }
+
+        // We may get garbage from the net
+        if (cookielen > NTS_MAX_COOKIELEN)
+                return false;
+
+        finger = cookie;
+        key = NULL;             // squash uninitialized warning
+        for (i=0; i<nts_nKeys; i++) {
+          key = &nts_keys[i];
+          if (0 == memcmp(finger, &key->I, sizeof(key->I))) {
+                break;
+          }
+        }
+        nts_cnt.cookie_decode_total++;  // total attempts, includes too old
+        if (nts_nKeys == i) {
+                nts_cnt.cookie_decode_too_old++;
+                return false;
+        }
+        if (0 == i) {
+                nts_cnt.cookie_decode_current++;
+        } else if (1 == i) {
+                nts_cnt.cookie_decode_old++;
+        } else if (2 == i) {
+                nts_cnt.cookie_decode_old2++;
+        } else {
+                nts_cnt.cookie_decode_older++;
         }
-	if (0 == i) {
-		nts_cnt.cookie_decode_current++;
-	} else if (1 == i) {
-		nts_cnt.cookie_decode_old++;
-	} else if (2 == i) {
-		nts_cnt.cookie_decode_old2++;
-	} else {
-		nts_cnt.cookie_decode_older++;
-	}
 #if 0
-	if (1<i) {
-	  /* Hack for debugging */
-	  /* Beware: DoS possibility on a public server */
-	  msyslog(LOG_INFO, "NTS: Old cookie: %d days.", i);
-	}
+        if (1<i) {
+          // Hack for debugging
+          // Beware: DoS possibility on a public server
+          msyslog(LOG_INFO, "NTS: Old cookie: %d days.", i);
+        }
 #endif
 
-	finger += sizeof(key->I);
-	nonce = finger;
-	finger += NONCE_LENGTH;
-
-	// require(AD_LENGTH==finger-cookie);
+        finger += sizeof(key->I);
+        nonce = finger;
+        finger += NONCE_LENGTH;
 
-	cipherlength = cookielen - AD_LENGTH;
-	plainlength = NTS_MAX_COOKIELEN;
+        // require(AD_LENGTH==finger-cookie);
 
-	nts_lock_cookielock();
+        cipherlength = cookielen - AD_LENGTH;
+        plainlength = NTS_MAX_COOKIELEN;
 
-	ok = AES_SIV_Decrypt(cookie_ctx,
-			     plaintext, &plainlength,
-			     key->K, K_length,
-			     nonce, NONCE_LENGTH,
-			     finger, cipherlength,
-			     cookie, AD_LENGTH);
+        nts_lock_cookielock();
 
-	nts_unlock_cookielock();
+        ok = AES_SIV_Decrypt(cookie_ctx,
+                             plaintext, &plainlength,
+                             key->K, K_length,
+                             nonce, NONCE_LENGTH,
+                             finger, cipherlength,
+                             cookie, AD_LENGTH);
 
-	if (!ok) {
-		nts_cnt.cookie_decode_error++;
-		return false;
-	}
+        nts_unlock_cookielock();
 
-	*keylen = (plainlength-AEAD_LENGTH)/2;
-	finger = plaintext;
-	memcpy(&temp, finger, AEAD_LENGTH);
-	*aead = temp;
-	finger += AEAD_LENGTH;
-	memcpy(c2s, finger, *keylen);
-	finger += *keylen;
-	memcpy(s2c, finger, *keylen);
-	finger += *keylen;
+        if (!ok) {
+                nts_cnt.cookie_decode_error++;
+                return false;
+        }
 
-	return true;
+        *keylen = (plainlength-AEAD_LENGTH)/2;
+        finger = plaintext;
+        memcpy(&temp, finger, AEAD_LENGTH);
+        *aead = temp;
+        finger += AEAD_LENGTH;
+        memcpy(c2s, finger, *keylen);
+        finger += *keylen;
+        memcpy(s2c, finger, *keylen);
+        finger += *keylen;
+
+        return true;
 }
 
 void nts_lock_cookielock(void) {
-	int err = pthread_mutex_lock(&cookie_lock);
-	if (0 != err) {
-		msyslog(LOG_ERR, "ERR: Can't lock cookie_lock: %d", err);
-		exit(2);
-	}
+        int err = pthread_mutex_lock(&cookie_lock);
+        if (0 != err) {
+                msyslog(LOG_ERR, "ERR: Can't lock cookie_lock: %d", err);
+                exit(2);
+        }
 }
 
 void nts_unlock_cookielock(void) {
-	int err = pthread_mutex_unlock(&cookie_lock);
-	if (0 != err) {
-		msyslog(LOG_ERR, "ERR: Can't unlock cookie_lock: %d", err);
-		exit(2);
-	}
+        int err = pthread_mutex_unlock(&cookie_lock);
+        if (0 != err) {
+                msyslog(LOG_ERR, "ERR: Can't unlock cookie_lock: %d", err);
+                exit(2);
+        }
 }
 
-/* end */
+// end



View it on GitLab: https://gitlab.com/NTPsec/ntpsec/-/compare/a59a1d2be44fbdccf4fcdbd91fdae2da38e8f64e...8c7c6743d3cff7244d8a0a6841bd5ca92bbbf43d

-- 
View it on GitLab: https://gitlab.com/NTPsec/ntpsec/-/compare/a59a1d2be44fbdccf4fcdbd91fdae2da38e8f64e...8c7c6743d3cff7244d8a0a6841bd5ca92bbbf43d
You're receiving this email because of your account on gitlab.com. Manage all notifications: https://gitlab.com/-/profile/notifications | Help: https://gitlab.com/help


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ntpsec.org/pipermail/vc/attachments/20260806/b698b12e/attachment-0001.htm>


More information about the vc mailing list