[Git][NTPsec/ntpsec][cookie] 5 commits: ntpd/refclock_jjy.c: Just remove tabs. Weird comments...

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



Hal Murray pushed to branch cookie at NTPsec / ntpsec


Commits:
676d82c4 by Gary E. Miller at 2026-08-04T22:13:07-07:00
ntpd/refclock_jjy.c: Just remove tabs.  Weird comments...

- - - - -
b2ca71a7 by Gary E. Miller at 2026-08-06T10:14:33-07:00
ntpd/nts_server.c: Remove tabs, Single line /* comments to //

- - - - -
4d7554c9 by Gary E. Miller at 2026-08-06T10:15:46-07:00
attic/aes-siv-timing.c: Remove tabs, Single line /* comments to //

No functional changes.

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

No functional changes.

- - - - -
2dee877d by Gary E. Miller at 2026-08-06T10:19:53-07:00
ntpd/nts_cookie.c: restore previous comment indents

No functional changes.

- - - - -


4 changed files:

- attic/aes-siv-timing.c
- ntpd/nts_cookie.c
- ntpd/nts_server.c
- ntpd/refclock_jjy.c


Changes:

=====================================
attic/aes-siv-timing.c
=====================================
@@ -4,7 +4,7 @@
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
-/* Last modified on Sat Aug 28 14:30:11 PDT 1999 by murray */
+// Last modified on Sat Aug 28 14:30:11 PDT 1999 by murray
 
 /*
  * Hack to time aead routines from libaes_siv
@@ -44,7 +44,7 @@ int     key_K_length;
 pthread_mutex_t cookie_lock = PTHREAD_MUTEX_INITIALIZER;
 
 
-/* sizeof(key_I) + sizeof(NONCE) */
+// sizeof(key_I) + sizeof(NONCE)
 #define AD_LENGTH 20
 
 static void ssl_init(void)
@@ -85,44 +85,44 @@ static void ntp_RAND_bytes(unsigned char *buf, int num) {
 
 static void DoLock(void)
 {
-	struct timespec start, stop;
-	double fast;
-	int samplesize = SAMPLESIZE;
+        struct timespec start, stop;
+        double fast;
+        int samplesize = SAMPLESIZE;
 
-	clock_gettime(CLOCK_MONOTONIC, &start);
-	for (int i = 0; i < samplesize; i++) {
+        clock_gettime(CLOCK_MONOTONIC, &start);
+        for (int i = 0; i < samplesize; i++) {
           nts_lock_cookielock();
           nts_unlock_cookielock();
-	}
-	clock_gettime(CLOCK_MONOTONIC, &stop);
-	fast = (stop.tv_sec-start.tv_sec)*1E9 + (stop.tv_nsec-start.tv_nsec);
-	printf("LocK          %6.0f %7.3f",
-	       fast/samplesize,  fast/1E9);
-	printf("\n");
+        }
+        clock_gettime(CLOCK_MONOTONIC, &stop);
+        fast = (stop.tv_sec-start.tv_sec)*1E9 + (stop.tv_nsec-start.tv_nsec);
+        printf("LocK          %6.0f %7.3f",
+               fast/samplesize,  fast/1E9);
+        printf("\n");
 }
 
 
 static void DoNonce(void)
 {
         uint8_t nonce[NONCE_LENGTH];
-	struct timespec start, stop;
-	double fast;
-	int samplesize = SAMPLESIZE;
+        struct timespec start, stop;
+        double fast;
+        int samplesize = SAMPLESIZE;
 
-	clock_gettime(CLOCK_MONOTONIC, &start);
-	for (int i = 0; i < samplesize; i++) {
+        clock_gettime(CLOCK_MONOTONIC, &start);
+        for (int i = 0; i < samplesize; i++) {
           ntp_RAND_bytes(nonce, NONCE_LENGTH);
-	}
-	clock_gettime(CLOCK_MONOTONIC, &stop);
-	fast = (stop.tv_sec-start.tv_sec)*1E9 + (stop.tv_nsec-start.tv_nsec);
-	printf("Nonce     %3d %6.0f %7.3f",
-	       NONCE_LENGTH, fast/samplesize,  fast/1E9);
-	printf("\n");
+        }
+        clock_gettime(CLOCK_MONOTONIC, &stop);
+        fast = (stop.tv_sec-start.tv_sec)*1E9 + (stop.tv_nsec-start.tv_nsec);
+        printf("Nonce     %3d %6.0f %7.3f",
+               NONCE_LENGTH, fast/samplesize,  fast/1E9);
+        printf("\n");
 }
 
 
-/* Clone of nts_make_cookie() from ntpd/nts_cookie.c */
-/* returns actual length */
+// Clone of nts_make_cookie() from ntpd/nts_cookie.c
+// returns actual length
 int nts_make_cookie(uint8_t *cookie,
   uint16_t aead,
   uint8_t *c2s, uint8_t *s2c, int keylen) {
@@ -131,11 +131,11 @@ int nts_make_cookie(uint8_t *cookie,
         int used, plainlength;
         bool ok;
         uint8_t * finger;
-        uint32_t temp;  /* keep 4 byte alignment */
+        uint32_t temp;  // keep 4 byte alignment
         size_t left;
 
         if (NULL == cookie_ctx)
-                return 0;               /* We aren't initialized yet. */
+                return 0;               // We aren't initialized yet.
 
 //        nts_cookie_make++;
 
@@ -151,7 +151,7 @@ int nts_make_cookie(uint8_t *cookie,
         finger += keylen;
         plainlength = finger-plaintext;
 
-        /* collect associated data */
+        // collect associated data
         finger = cookie;
 
         memcpy(finger, &key_I, sizeof(key_I));
@@ -166,7 +166,7 @@ int nts_make_cookie(uint8_t *cookie,
 
         nts_lock_cookielock();
         ok = AES_SIV_Encrypt(cookie_ctx,
-                             finger, &left,   /* left: in: max out length, out: length used */
+                             finger, &left,   // left: in: max out length, out: length used
                              key_K, key_K_length,
                              nonce, NONCE_LENGTH,
                              plaintext, plainlength,
@@ -186,84 +186,84 @@ int nts_make_cookie(uint8_t *cookie,
 
 
 static void DoMakeCookie(
-  const char *name,       /* name of aead */
-  int     aead,		  /* algorithm used to make cookie */
-  int     keylength       /* length of c2s and s2c */
+  const char *name,       // name of aead
+  int     aead,           // algorithm used to make cookie
+  int     keylength       // length of c2s and s2c
 )
 {
-	uint8_t cookie[NTS_MAX_COOKIELEN];
-	uint8_t c2s[NTS_MAX_KEYLEN], s2c[NTS_MAX_KEYLEN];
-	struct timespec start, stop;
-	double fast;
-	int cookielength = 0;
-	int samplesize = SAMPLESIZE;
-
-	switch (aead) {
-	  case AEAD_AES_SIV_CMAC_256:
-		key_K_length = AEAD_AES_SIV_CMAC_256_KEYLEN;
-		break;
-	  case AEAD_AES_SIV_CMAC_384:
-		key_K_length = AEAD_AES_SIV_CMAC_384_KEYLEN;
-		break;
-	  case AEAD_AES_SIV_CMAC_512:
-		key_K_length = AEAD_AES_SIV_CMAC_512_KEYLEN;
-		break;
-	  default:
-		printf("Bogus aead\n");
-		exit(1);
-	}
+        uint8_t cookie[NTS_MAX_COOKIELEN];
+        uint8_t c2s[NTS_MAX_KEYLEN], s2c[NTS_MAX_KEYLEN];
+        struct timespec start, stop;
+        double fast;
+        int cookielength = 0;
+        int samplesize = SAMPLESIZE;
+
+        switch (aead) {
+          case AEAD_AES_SIV_CMAC_256:
+                key_K_length = AEAD_AES_SIV_CMAC_256_KEYLEN;
+                break;
+          case AEAD_AES_SIV_CMAC_384:
+                key_K_length = AEAD_AES_SIV_CMAC_384_KEYLEN;
+                break;
+          case AEAD_AES_SIV_CMAC_512:
+                key_K_length = AEAD_AES_SIV_CMAC_512_KEYLEN;
+                break;
+          default:
+                printf("Bogus aead\n");
+                exit(1);
+        }
 
         ntp_RAND_bytes(c2s, NTS_MAX_KEYLEN);
         ntp_RAND_bytes(s2c, NTS_MAX_KEYLEN);
 
-	clock_gettime(CLOCK_MONOTONIC, &start);
-	for (int i = 0; i < samplesize; i++) {
-		cookielength = nts_make_cookie(
-			cookie, aead, c2s, s2c, keylength);
-	}
-	clock_gettime(CLOCK_MONOTONIC, &stop);
-	fast = (stop.tv_sec-start.tv_sec)*1E9 + (stop.tv_nsec-start.tv_nsec);
-	printf("%12s  %2d %4d %6.0f %7.3f",
-	       name, keylength, cookielength, fast/samplesize,  fast/1E9);
-	printf("\n");
+        clock_gettime(CLOCK_MONOTONIC, &start);
+        for (int i = 0; i < samplesize; i++) {
+                cookielength = nts_make_cookie(
+                        cookie, aead, c2s, s2c, keylength);
+        }
+        clock_gettime(CLOCK_MONOTONIC, &stop);
+        fast = (stop.tv_sec-start.tv_sec)*1E9 + (stop.tv_nsec-start.tv_nsec);
+        printf("%12s  %2d %4d %6.0f %7.3f",
+               name, keylength, cookielength, fast/samplesize,  fast/1E9);
+        printf("\n");
 }
 
 
 static void DoMakeCrypto(
-  const char *name,       /* name of aead */
-  int     aead,		  /* algorithm used to make cookie */
-  int     keylen          /* length of c2s and s2c */
+  const char *name,       // name of aead
+  int     aead,           // algorithm used to make cookie
+  int     keylen          // length of c2s and s2c
 )
 {
-	uint8_t cookie[NTS_MAX_COOKIELEN];
-	uint8_t c2s[NTS_MAX_KEYLEN], s2c[NTS_MAX_KEYLEN];
-	struct timespec start, stop;
-	double fast;
-	int cookielength = 0;
-	int samplesize = SAMPLESIZE;
+        uint8_t cookie[NTS_MAX_COOKIELEN];
+        uint8_t c2s[NTS_MAX_KEYLEN], s2c[NTS_MAX_KEYLEN];
+        struct timespec start, stop;
+        double fast;
+        int cookielength = 0;
+        int samplesize = SAMPLESIZE;
 
         uint8_t plaintext[NTS_MAX_COOKIELEN];
         uint8_t *nonce;
         int used, plainlength;
         int ok = 0;
         uint8_t * finger;
-        uint32_t temp;  /* keep 4 byte alignment */
+        uint32_t temp;  // keep 4 byte alignment
         size_t left;
 
-	switch (aead) {
-	  case AEAD_AES_SIV_CMAC_256:
-		key_K_length = AEAD_AES_SIV_CMAC_256_KEYLEN;
-		break;
-	  case AEAD_AES_SIV_CMAC_384:
-		key_K_length = AEAD_AES_SIV_CMAC_384_KEYLEN;
-		break;
-	  case AEAD_AES_SIV_CMAC_512:
-		key_K_length = AEAD_AES_SIV_CMAC_512_KEYLEN;
-		break;
-	  default:
-		printf("Bogus aead\n");
-		exit(1);
-	}
+        switch (aead) {
+          case AEAD_AES_SIV_CMAC_256:
+                key_K_length = AEAD_AES_SIV_CMAC_256_KEYLEN;
+                break;
+          case AEAD_AES_SIV_CMAC_384:
+                key_K_length = AEAD_AES_SIV_CMAC_384_KEYLEN;
+                break;
+          case AEAD_AES_SIV_CMAC_512:
+                key_K_length = AEAD_AES_SIV_CMAC_512_KEYLEN;
+                break;
+          default:
+                printf("Bogus aead\n");
+                exit(1);
+        }
 
         ntp_RAND_bytes(c2s, NTS_MAX_KEYLEN);
         ntp_RAND_bytes(s2c, NTS_MAX_KEYLEN);
@@ -278,7 +278,7 @@ static void DoMakeCrypto(
         finger += keylen;
         plainlength = finger-plaintext;
 
-        /* collect associated data */
+        // collect associated data
         finger = cookie;
 
         memcpy(finger, &key_I, sizeof(key_I));
@@ -291,16 +291,16 @@ static void DoMakeCrypto(
         used = finger-cookie;
         left = NTS_MAX_COOKIELEN-used;
 
-	clock_gettime(CLOCK_MONOTONIC, &start);
-	for (int i = 0; i < samplesize; i++) {
+        clock_gettime(CLOCK_MONOTONIC, &start);
+        for (int i = 0; i < samplesize; i++) {
           ok += AES_SIV_Encrypt(cookie_ctx,
-             finger, &left,   /* left: in: max out length, out: length used */
+             finger, &left,   // left: in: max out length, out: length used
              key_K, key_K_length,
              nonce, NONCE_LENGTH,
              plaintext, plainlength,
              cookie, AD_LENGTH);
-	}
-	clock_gettime(CLOCK_MONOTONIC, &stop);
+        }
+        clock_gettime(CLOCK_MONOTONIC, &stop);
 
         if (samplesize != ok) {
                 printf("NTS: nts_make_cookie - Error from AES_SIV_Encrypt\n");
@@ -310,69 +310,69 @@ static void DoMakeCrypto(
         used += left;
         INSIST(used <= NTS_MAX_COOKIELEN);
 
-	cookielength = used;
+        cookielength = used;
 
-	fast = (stop.tv_sec-start.tv_sec)*1E9 + (stop.tv_nsec-start.tv_nsec);
-	printf("%12s  %2d %4d %6.0f %7.3f",
-	       name, keylen, cookielength, fast/samplesize,  fast/1E9);
-	printf("\n");
+        fast = (stop.tv_sec-start.tv_sec)*1E9 + (stop.tv_nsec-start.tv_nsec);
+        printf("%12s  %2d %4d %6.0f %7.3f",
+               name, keylen, cookielength, fast/samplesize,  fast/1E9);
+        printf("\n");
 }
 
 int main(int argc, char *argv[])
 {
-	char *ctimetxt;
-	time_t now;
-	char buff[256];
+        char *ctimetxt;
+        time_t now;
+        char buff[256];
 
-	UNUSED_ARG(argc);
-	UNUSED_ARG(argv);
+        UNUSED_ARG(argc);
+        UNUSED_ARG(argv);
 
-	setlinebuf(stdout);
+        setlinebuf(stdout);
 
-	ssl_init();
+        ssl_init();
 
         ntp_RAND_bytes(key_K, NTS_MAX_KEYLEN);
 
-	now = time(NULL);
-	ctimetxt = ctime(&now);
-	ctimetxt[24] = 0;	/* Hack: smash return */
-	gethostname(buff, sizeof(buff));
-	printf("# %s on %s\n", ctimetxt, buff);
-	printf("# %s\n", OPENSSL_VERSION_TEXT);
+        now = time(NULL);
+        ctimetxt = ctime(&now);
+        ctimetxt[24] = 0;       // Hack: smash return
+        gethostname(buff, sizeof(buff));
+        printf("# %s on %s\n", ctimetxt, buff);
+        printf("# %s\n", OPENSSL_VERSION_TEXT);
 
-	printf("\n");
-	printf("#       bytes  ns/op sec/run\n");
-	DoLock();
-	DoNonce();
+        printf("\n");
+        printf("#       bytes  ns/op sec/run\n");
+        DoLock();
+        DoNonce();
 
-	printf("\n");
-	printf("# wKL=sizeof(c2s), CL=sizeof(cookie)\n");
-	printf("# Make cookie    wKL   CL  ns/op sec/run\n");
+        printf("\n");
+        printf("# wKL=sizeof(c2s), CL=sizeof(cookie)\n");
+        printf("# Make cookie    wKL   CL  ns/op sec/run\n");
 
 // Sample numbers using old cmac.h
 // run on a Dell 9020/MT with Intel i7-4790 @ 3.60GHz
-	/* 3rd arg is length of c2s and s2c */
-	DoMakeCookie("AES_SIV_CMAC_256", AEAD_AES_SIV_CMAC_256, 32);
-	DoMakeCookie("AES_SIV_CMAC_256", AEAD_AES_SIV_CMAC_256, 48);
-	DoMakeCookie("AES_SIV_CMAC_256", AEAD_AES_SIV_CMAC_256, 64);
+        // 3rd arg is length of c2s and s2c
+        DoMakeCookie("AES_SIV_CMAC_256", AEAD_AES_SIV_CMAC_256, 32);
+        DoMakeCookie("AES_SIV_CMAC_256", AEAD_AES_SIV_CMAC_256, 48);
+        DoMakeCookie("AES_SIV_CMAC_256", AEAD_AES_SIV_CMAC_256, 64);
 // AES_SIV_CMAC_256  32  104   3127   3.127
 // AES_SIV_CMAC_256  48  136   3186   3.186
 // AES_SIV_CMAC_256  64  168   3220   3.220
-	DoMakeCookie("AES_SIV_CMAC_512", AEAD_AES_SIV_CMAC_512, 32);
-	DoMakeCookie("AES_SIV_CMAC_512", AEAD_AES_SIV_CMAC_512, 48);
-	DoMakeCookie("AES_SIV_CMAC_512", AEAD_AES_SIV_CMAC_512, 64);
+        DoMakeCookie("AES_SIV_CMAC_512", AEAD_AES_SIV_CMAC_512, 32);
+        DoMakeCookie("AES_SIV_CMAC_512", AEAD_AES_SIV_CMAC_512, 48);
+        DoMakeCookie("AES_SIV_CMAC_512", AEAD_AES_SIV_CMAC_512, 64);
 // AES_SIV_CMAC_512  32  104   3183   3.183
 // AES_SIV_CMAC_512  48  136   3247   3.247
 // AES_SIV_CMAC_512  64  168   3303   3.303
-	printf("\n");
+        printf("\n");
 
-	printf("# Cookie Crypto  wKL   CL  ns/op sec/run\n");
-	DoMakeCrypto("AES_SIV_CMAC_256", AEAD_AES_SIV_CMAC_256, 32);
-	DoMakeCrypto("AES_SIV_CMAC_256", AEAD_AES_SIV_CMAC_256, 48);
-	DoMakeCrypto("AES_SIV_CMAC_256", AEAD_AES_SIV_CMAC_256, 64);
+        printf("# Cookie Crypto  wKL   CL  ns/op sec/run\n");
+        DoMakeCrypto("AES_SIV_CMAC_256", AEAD_AES_SIV_CMAC_256, 32);
+        DoMakeCrypto("AES_SIV_CMAC_256", AEAD_AES_SIV_CMAC_256, 48);
+        DoMakeCrypto("AES_SIV_CMAC_256", AEAD_AES_SIV_CMAC_256, 64);
 // AES_SIV_CMAC_256  32  104   2066   2.066
 // AES_SIV_CMAC_256  48  136   2119   2.119
 // AES_SIV_CMAC_256  64  168   2157   2.157
 
-	return 0;
+        return 0;
 }


=====================================
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


=====================================
ntpd/nts_server.c
=====================================
@@ -56,200 +56,200 @@ static void nts_ke_setup_send(struct BufCtl_t *buf, int aead,
 pthread_mutex_t certificate_lock = PTHREAD_MUTEX_INITIALIZER;
 
 static int alpn_select_cb(SSL *ssl,
-			  const unsigned char **out,
-			  unsigned char *outlen,
-			  const unsigned char *in,
-			  unsigned int inlen,
-			  void *arg)
+                          const unsigned char **out,
+                          unsigned char *outlen,
+                          const unsigned char *in,
+                          unsigned int inlen,
+                          void *arg)
 {
-	static const unsigned char alpn[] = {
+        static const unsigned char alpn[] = {
             'n', 't', 's', 'k', 'e', '/', '1' };
-	unsigned i, len;
+        unsigned i, len;
 
-	UNUSED_ARG(ssl);
-	UNUSED_ARG(arg);
+        UNUSED_ARG(ssl);
+        UNUSED_ARG(arg);
 
-	for (i = 0; i < inlen; i += len+1) {
-		len = in[i]; // first byte is the length
+        for (i = 0; i < inlen; i += len+1) {
+                len = in[i]; // first byte is the length
 #if 0
-		char foo[256];
-		strlcpy(foo, (const char*)in+i+1, len);
-		msyslog(LOG_DEBUG, "DEBUG: alpn_select_cb:  %u, %u, %s", inlen-i, len, foo);
+                char foo[256];
+                strlcpy(foo, (const char*)in+i+1, len);
+                msyslog(LOG_DEBUG, "DEBUG: alpn_select_cb:  %u, %u, %s", inlen-i, len, foo);
 #endif
-		if (len+1 > inlen-i)
-			/* bogus arg: length overlaps end of in buffer */
-			return SSL_TLSEXT_ERR_ALERT_FATAL;
-		if (len == sizeof(alpn) && !memcmp(in+i+1, alpn, len)) {
-			*out = in+i+1;
-			*outlen = len;
-			return SSL_TLSEXT_ERR_OK;
-		}
-	}
-
-	return SSL_TLSEXT_ERR_NOACK;
+                if (len+1 > inlen-i)
+                        // bogus arg: length overlaps end of in buffer
+                        return SSL_TLSEXT_ERR_ALERT_FATAL;
+                if (len == sizeof(alpn) && !memcmp(in+i+1, alpn, len)) {
+                        *out = in+i+1;
+                        *outlen = len;
+                        return SSL_TLSEXT_ERR_OK;
+                }
+        }
+
+        return SSL_TLSEXT_ERR_NOACK;
 }
 
 bool nts_server_init(void) {
-	bool ok = true;
-
-	msyslog(LOG_INFO, "NTSs: starting NTS-KE server listening on port %d",
-		NTS_KE_PORT);
-
-	server_ctx = SSL_CTX_new(TLS_server_method());
-	if (NULL == server_ctx) {
-		/* Happens if no ciphers */
-		msyslog(LOG_INFO, "NTSs: NULL server_ctx");
-		nts_log_ssl_error();
-		return false;
-	}
-
-	SSL_CTX_set_alpn_select_cb(server_ctx, alpn_select_cb, NULL);
-	SSL_CTX_set_session_cache_mode(server_ctx, SSL_SESS_CACHE_OFF);
-	SSL_CTX_set_timeout(server_ctx, NTS_KE_TIMEOUT);  /* session lifetime */
-
-	ok &= nts_load_versions(server_ctx);
-	ok &= nts_load_ciphers(server_ctx);
-	ok &= nts_load_ecdhcurves(server_ctx);
-	ok &= nts_set_cipher_order(server_ctx);
-
-	if (!ok) {
-		msyslog(LOG_ERR, "NTSs: Disabling NTS-KE server");
-		SSL_CTX_free(server_ctx);
-		server_ctx = NULL;
-		return false;
-	};
-
-	msyslog(LOG_INFO, "NTSs: OpenSSL security level is %d",
-		SSL_CTX_get_security_level(server_ctx));
-
-	msyslog(LOG_INFO, "NTSs: starting NTS-KE server listening on port %d",
-		NTS_KE_PORT);
-	ok &= create_listener4(NTS_KE_PORT);
-	ok &= create_listener6(NTS_KE_PORT);
-
-	return ok;
+        bool ok = true;
+
+        msyslog(LOG_INFO, "NTSs: starting NTS-KE server listening on port %d",
+                NTS_KE_PORT);
+
+        server_ctx = SSL_CTX_new(TLS_server_method());
+        if (NULL == server_ctx) {
+                // Happens if no ciphers
+                msyslog(LOG_INFO, "NTSs: NULL server_ctx");
+                nts_log_ssl_error();
+                return false;
+        }
+
+        SSL_CTX_set_alpn_select_cb(server_ctx, alpn_select_cb, NULL);
+        SSL_CTX_set_session_cache_mode(server_ctx, SSL_SESS_CACHE_OFF);
+        SSL_CTX_set_timeout(server_ctx, NTS_KE_TIMEOUT);  // session lifetime
+
+        ok &= nts_load_versions(server_ctx);
+        ok &= nts_load_ciphers(server_ctx);
+        ok &= nts_load_ecdhcurves(server_ctx);
+        ok &= nts_set_cipher_order(server_ctx);
+
+        if (!ok) {
+                msyslog(LOG_ERR, "NTSs: Disabling NTS-KE server");
+                SSL_CTX_free(server_ctx);
+                server_ctx = NULL;
+                return false;
+        };
+
+        msyslog(LOG_INFO, "NTSs: OpenSSL security level is %d",
+                SSL_CTX_get_security_level(server_ctx));
+
+        msyslog(LOG_INFO, "NTSs: starting NTS-KE server listening on port %d",
+                NTS_KE_PORT);
+        ok &= create_listener4(NTS_KE_PORT);
+        ok &= create_listener6(NTS_KE_PORT);
+
+        return ok;
 }
 
 bool nts_server_init2(void) {
-	pthread_t worker;
-	sigset_t block_mask, saved_sig_mask;
-	int rc;
-	char errbuf[100];
-
-	if (!nts_load_certificate(server_ctx)) {
-		return false;
-	}
-
-	sigfillset(&block_mask);
-	pthread_sigmask(SIG_BLOCK, &block_mask, &saved_sig_mask);
-	if (listener4_sock != -1) {
-		rc = pthread_create(&worker, NULL, nts_ke_listener, &listener4_sock);
-		if (rc) {
-			ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-			msyslog(LOG_ERR, "NTSs: nts_start_server4: error from pthread_create: %s", errbuf);
-		}
-	}
-	if (listener6_sock != -1) {
-		rc = pthread_create(&worker, NULL, nts_ke_listener, &listener6_sock);
-		if (rc) {
-			ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-			msyslog(LOG_ERR, "NTSs: nts_start_server6: error from pthread_create: %s", errbuf);
-		}
-	}
-	pthread_sigmask(SIG_SETMASK, &saved_sig_mask, NULL);
-
-	return true;
+        pthread_t worker;
+        sigset_t block_mask, saved_sig_mask;
+        int rc;
+        char errbuf[100];
+
+        if (!nts_load_certificate(server_ctx)) {
+                return false;
+        }
+
+        sigfillset(&block_mask);
+        pthread_sigmask(SIG_BLOCK, &block_mask, &saved_sig_mask);
+        if (listener4_sock != -1) {
+                rc = pthread_create(&worker, NULL, nts_ke_listener, &listener4_sock);
+                if (rc) {
+                        ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                        msyslog(LOG_ERR, "NTSs: nts_start_server4: error from pthread_create: %s", errbuf);
+                }
+        }
+        if (listener6_sock != -1) {
+                rc = pthread_create(&worker, NULL, nts_ke_listener, &listener6_sock);
+                if (rc) {
+                        ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                        msyslog(LOG_ERR, "NTSs: nts_start_server6: error from pthread_create: %s", errbuf);
+                }
+        }
+        pthread_sigmask(SIG_SETMASK, &saved_sig_mask, NULL);
+
+        return true;
 }
 
-/* called every hour */
+// called every hour
 void nts_cert_timer(void) {
-	check_cert_file();
+        check_cert_file();
 }
 
-/* call hourly and by SIGHUP */
+// call hourly and by SIGHUP
 void check_cert_file(void) {
-	if (NULL == server_ctx)
-		return;
-	nts_lock_certlock();
-	nts_reload_certificate(server_ctx);
-	nts_unlock_certlock();
+        if (NULL == server_ctx)
+                return;
+        nts_lock_certlock();
+        nts_reload_certificate(server_ctx);
+        nts_unlock_certlock();
 }
 
 void nts_lock_certlock(void) {
-	int err = pthread_mutex_lock(&certificate_lock);
-	if (0 != err) {
-		msyslog(LOG_ERR, "ERR: Can't lock certificate_lock: %d", err);
-		exit(2);
-	}
+        int err = pthread_mutex_lock(&certificate_lock);
+        if (0 != err) {
+                msyslog(LOG_ERR, "ERR: Can't lock certificate_lock: %d", err);
+                exit(2);
+        }
 }
 
 void nts_unlock_certlock(void) {
-	int err = pthread_mutex_unlock(&certificate_lock);
-	if (0 != err) {
-		msyslog(LOG_ERR, "ERR: Can't unlock certificate_lock: %d", err);
-		exit(2);
-	}
+        int err = pthread_mutex_unlock(&certificate_lock);
+        if (0 != err) {
+                msyslog(LOG_ERR, "ERR: Can't unlock certificate_lock: %d", err);
+                exit(2);
+        }
 }
 
-/* lfptod goes to long double */
+// lfptod goes to long double
 static inline double lfptox(l_fp r) {
-/* l_fp to double */
+// l_fp to double
         return ldexp((double)((int64_t)r), -32);
 }
 
 
 void* nts_ke_listener(void* arg) {
-	struct timeval timeout = {.tv_sec = NTS_KE_TIMEOUT, .tv_usec = 0};
-	int sock = *(int*)arg;
-	char errbuf[100];
-	char addrbuf[100];
-	char usingbuf[100];
-	struct timespec start, finish;		/* wall clock */
-	l_fp wall, usr, sys;
-	const char *errtxt;	/* not NULL if error */
+        struct timeval timeout = {.tv_sec = NTS_KE_TIMEOUT, .tv_usec = 0};
+        int sock = *(int*)arg;
+        char errbuf[100];
+        char addrbuf[100];
+        char usingbuf[100];
+        struct timespec start, finish;          // wall clock
+        l_fp wall, usr, sys;
+        const char *errtxt;     // not NULL if error
 #ifdef RUSAGE_THREAD
-	/* Not in NetBSD 10.1, 2026-Apr-05 */
-	struct timespec start_u, finish_u;	/* CPU user */
-	struct timespec start_s, finish_s;	/* CPU system */
-	struct rusage usage;
+        // Not in NetBSD 10.1, 2026-Apr-05
+        struct timespec start_u, finish_u;      // CPU user
+        struct timespec start_s, finish_s;      // CPU system
+        struct rusage usage;
 #endif
 
 #ifdef HAVE_SECCOMP_H
-        setup_SIGSYS_trap();   /* enable trap for this thread */
+        setup_SIGSYS_trap();   // enable trap for this thread
 #endif
 
 #ifdef RUSAGE_THREAD
-	/* NB: start_u and start_s are from near the end of the previous cycle.
-	 * Thus usage timing includes the TCP accept and
-	 * writing the previous msyslog message.
-	 */
-	getrusage(RUSAGE_THREAD, &usage);
-	start_u = tval_to_tspec(usage.ru_utime);
-	start_s = tval_to_tspec(usage.ru_stime);
+        /* NB: start_u and start_s are from near the end of the previous cycle.
+         * Thus usage timing includes the TCP accept and
+         * writing the previous msyslog message.
+         */
+        getrusage(RUSAGE_THREAD, &usage);
+        start_u = tval_to_tspec(usage.ru_utime);
+        start_s = tval_to_tspec(usage.ru_stime);
 #else
-	usr = 0;
-	sys = 0;
+        usr = 0;
+        sys = 0;
 #endif
 
-	while(1) {
-		NTSKE_Status status = NTSKE_SSL_Failed;
-		sockaddr_u addr;
-		socklen_t len = sizeof(addr);
-		SSL *ssl;
-		int client, err;
-
-		sleep(1);			/* FIXME: log clutter/DoS */
-		errtxt = NULL;
-		client = accept(sock, &addr.sa, &len);
-		if (client < 0) {
-			ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-			msyslog(LOG_ERR, "NTSs: TCP accept failed: %s", errbuf);
-			if (EBADF == errno)
-				return NULL;
-			continue;
-		}
-		clock_gettime(CLOCK_MONOTONIC, &start);
-		sockporttoa_r(&addr, addrbuf, sizeof(addrbuf));
+        while(1) {
+                NTSKE_Status status = NTSKE_SSL_Failed;
+                sockaddr_u addr;
+                socklen_t len = sizeof(addr);
+                SSL *ssl;
+                int client, err;
+
+                sleep(1);                       // FIXME: log clutter/DoS
+                errtxt = NULL;
+                client = accept(sock, &addr.sa, &len);
+                if (client < 0) {
+                        ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                        msyslog(LOG_ERR, "NTSs: TCP accept failed: %s", errbuf);
+                        if (EBADF == errno)
+                                return NULL;
+                        continue;
+                }
+                clock_gettime(CLOCK_MONOTONIC, &start);
+                sockporttoa_r(&addr, addrbuf, sizeof(addrbuf));
 
 /* This is disabled in order to reduce clutter in the log file.
  * The client's address is now included in the final message.
@@ -266,85 +266,85 @@ void* nts_ke_listener(void* arg) {
  * fall into the normal (non-error) path which does include the address.
  * Enabling this might make strange cases easier to understand.
  */
-/*		msyslog(LOG_INFO, "NTSs: TCP accept-ed from %s", addrbuf); */
-
-		err = setsockopt(client, SOL_SOCKET, SO_RCVTIMEO,
-			&timeout, sizeof(timeout));
-		if (0 > err) {
-			ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-			msyslog(LOG_ERR, "NTSs: can't set recv timeout: %s", errbuf);
-			close(client);
-			ntske_cnt.serves_bad++;
-			continue;
-		}
-		err = setsockopt(client, SOL_SOCKET, SO_SNDTIMEO,
-			&timeout, sizeof(timeout));
-		if (0 > err) {
-			ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-			msyslog(LOG_ERR, "NTSs: can't set send timeout: %s", errbuf);
-			close(client);
-			ntske_cnt.serves_bad++;
-			continue;
-		}
-
-		/* WARN: For high volume servers, this should go in a new thread. */
-		nts_lock_certlock();
-		ssl = SSL_new(server_ctx);
-		nts_unlock_certlock();
-		SSL_set_fd(ssl, client);
-
-		err = SSL_accept(ssl);
-		if (0 >= err) {
-			int code = SSL_get_error(ssl, err);
-			SSL_free(ssl);
-			close(client);
-			clock_gettime(CLOCK_MONOTONIC, &finish);
-			wall = tspec_intv_to_lfp(sub_tspec(finish, start));
+// msyslog(LOG_INFO, "NTSs: TCP accept-ed from %s", addrbuf);
+
+                err = setsockopt(client, SOL_SOCKET, SO_RCVTIMEO,
+                        &timeout, sizeof(timeout));
+                if (0 > err) {
+                        ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                        msyslog(LOG_ERR, "NTSs: can't set recv timeout: %s", errbuf);
+                        close(client);
+                        ntske_cnt.serves_bad++;
+                        continue;
+                }
+                err = setsockopt(client, SOL_SOCKET, SO_SNDTIMEO,
+                        &timeout, sizeof(timeout));
+                if (0 > err) {
+                        ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                        msyslog(LOG_ERR, "NTSs: can't set send timeout: %s", errbuf);
+                        close(client);
+                        ntske_cnt.serves_bad++;
+                        continue;
+                }
+
+                // WARN: For high volume servers, this should go in a new thread.
+                nts_lock_certlock();
+                ssl = SSL_new(server_ctx);
+                nts_unlock_certlock();
+                SSL_set_fd(ssl, client);
+
+                err = SSL_accept(ssl);
+                if (0 >= err) {
+                        int code = SSL_get_error(ssl, err);
+                        SSL_free(ssl);
+                        close(client);
+                        clock_gettime(CLOCK_MONOTONIC, &finish);
+                        wall = tspec_intv_to_lfp(sub_tspec(finish, start));
 #ifdef RUSAGE_THREAD
-			getrusage(RUSAGE_THREAD, &usage);
-			finish_u = tval_to_tspec(usage.ru_utime);
-			finish_s = tval_to_tspec(usage.ru_stime);
-			usr = tspec_intv_to_lfp(sub_tspec(finish_u, start_u));
-			sys = tspec_intv_to_lfp(sub_tspec(finish_s, start_s));
-			start_u = finish_u;
-			start_s = finish_s;
+                        getrusage(RUSAGE_THREAD, &usage);
+                        finish_u = tval_to_tspec(usage.ru_utime);
+                        finish_s = tval_to_tspec(usage.ru_stime);
+                        usr = tspec_intv_to_lfp(sub_tspec(finish_u, start_u));
+                        sys = tspec_intv_to_lfp(sub_tspec(finish_s, start_s));
+                        start_u = finish_u;
+                        start_s = finish_s;
 #endif
-			nts_ke_accept_fail(addrbuf,
-			  lfptox(wall), lfptox(usr), lfptox(sys), code);
-			continue;
-		}
-
-		/* Save info for final message. */
-		snprintf(usingbuf, sizeof(usingbuf), "%s:%s(%d)",
-			SSL_get_version(ssl),
-			SSL_get_cipher_name(ssl),
-			SSL_get_cipher_bits(ssl, NULL));
-
-		status = NTSKE_Failed;
-		nts_ke_request(ssl, errbuf, sizeof(errbuf), &errtxt);
-		if (NULL==errtxt) status = NTSKE_OK;
-
-		SSL_shutdown(ssl);
-		SSL_free(ssl);
-		close(client);
-
-		clock_gettime(CLOCK_MONOTONIC, &finish);
-		wall = tspec_intv_to_lfp(sub_tspec(finish, start));
+                        nts_ke_accept_fail(addrbuf,
+                          lfptox(wall), lfptox(usr), lfptox(sys), code);
+                        continue;
+                }
+
+                // Save info for final message.
+                snprintf(usingbuf, sizeof(usingbuf), "%s:%s(%d)",
+                        SSL_get_version(ssl),
+                        SSL_get_cipher_name(ssl),
+                        SSL_get_cipher_bits(ssl, NULL));
+
+                status = NTSKE_Failed;
+                nts_ke_request(ssl, errbuf, sizeof(errbuf), &errtxt);
+                if (NULL==errtxt) status = NTSKE_OK;
+
+                SSL_shutdown(ssl);
+                SSL_free(ssl);
+                close(client);
+
+                clock_gettime(CLOCK_MONOTONIC, &finish);
+                wall = tspec_intv_to_lfp(sub_tspec(finish, start));
 #ifdef RUSAGE_THREAD
-		getrusage(RUSAGE_THREAD, &usage);
-		finish_u = tval_to_tspec(usage.ru_utime);
-		finish_s = tval_to_tspec(usage.ru_stime);
-		usr = tspec_intv_to_lfp(sub_tspec(finish_u, start_u));
-		sys = tspec_intv_to_lfp(sub_tspec(finish_s, start_s));
-		start_u = finish_u;
-		start_s = finish_s;
+                getrusage(RUSAGE_THREAD, &usage);
+                finish_u = tval_to_tspec(usage.ru_utime);
+                finish_s = tval_to_tspec(usage.ru_stime);
+                usr = tspec_intv_to_lfp(sub_tspec(finish_u, start_u));
+                sys = tspec_intv_to_lfp(sub_tspec(finish_s, start_s));
+                start_u = finish_u;
+                start_s = finish_s;
 #endif
-		record_ntske_log(status, addrbuf, usingbuf,
-		  lfptox(wall), lfptox(usr), lfptox(sys),
-		  errtxt);
-	}
+                record_ntske_log(status, addrbuf, usingbuf,
+                  lfptox(wall), lfptox(usr), lfptox(sys),
+                  errtxt);
+        }
 
-	return NULL;
+        return NULL;
 }
 
 /* Analyze failure from SSL_accept
@@ -353,329 +353,329 @@ void* nts_ke_listener(void* arg) {
  */
 void nts_ke_accept_fail(char* hostname,
     double wall, double usr, double sys, int code) {
-	unsigned long err = ERR_peek_error();
-	char errbuf[100];
-	char buff[200];
-	const char *msg = NULL;
-	const char *errmsg = NULL;
-	if (0 == err) {
-	  switch (code) {
-	    case SSL_ERROR_WANT_READ:
-	      msg = "Timeout";
-	      break;
-	    case SSL_ERROR_SYSCALL:
-	      if (ECONNRESET==errno) {
-	        msg = "Connection reset";
-	        break;
-	      }
-	      /* fall through */
-	    default:
-	      ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-	      snprintf(buff, sizeof(buff), "code %d, errno=>%d, %s",
-		code, errno, errbuf);
-	      msg = buff;
-	      break;
-	  }
-	} else {
-	  if (code==SSL_ERROR_SSL) {
-	    msg = ERR_reason_error_string(err);
-	    err = 0;
-	  } else {
-	    // Maybe we need to handle other codes
-	    ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-	    snprintf(buff, sizeof(buff), "code %d, errno=>%d, %s, %lx=>%s",
-	      code, errno, errbuf, err, ERR_reason_error_string(err));
-	    err = 0;
-	    msg = buff;
-	  }
-	}
-	record_ntske_log(NTSKE_SSL_Failed, hostname, msg,
-		wall, usr, sys, errmsg);
+        unsigned long err = ERR_peek_error();
+        char errbuf[100];
+        char buff[200];
+        const char *msg = NULL;
+        const char *errmsg = NULL;
+        if (0 == err) {
+          switch (code) {
+            case SSL_ERROR_WANT_READ:
+              msg = "Timeout";
+              break;
+            case SSL_ERROR_SYSCALL:
+              if (ECONNRESET==errno) {
+                msg = "Connection reset";
+                break;
+              }
+              // fall through
+            default:
+              ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+              snprintf(buff, sizeof(buff), "code %d, errno=>%d, %s",
+                code, errno, errbuf);
+              msg = buff;
+              break;
+          }
+        } else {
+          if (code==SSL_ERROR_SSL) {
+            msg = ERR_reason_error_string(err);
+            err = 0;
+          } else {
+            // Maybe we need to handle other codes
+            ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+            snprintf(buff, sizeof(buff), "code %d, errno=>%d, %s, %lx=>%s",
+              code, errno, errbuf, err, ERR_reason_error_string(err));
+            err = 0;
+            msg = buff;
+          }
+        }
+        record_ntske_log(NTSKE_SSL_Failed, hostname, msg,
+                wall, usr, sys, errmsg);
 }
 
 
 void nts_ke_request(SSL *ssl,
   char *errbuf, int errlng, const char **errtxt) {
-	/* RFC 4: servers must accept 1024
-	 * Our cookies can be 104, 136, or 168 for AES_SIV_CMAC_xxx
-	 * 8*168 fits comfortably into 2K.
-	 */
-	uint8_t buff[2048];
-	uint8_t c2s[NTS_MAX_KEYLEN], s2c[NTS_MAX_KEYLEN];
-	int aead = NO_AEAD, keylen;
-	struct BufCtl_t buf;
-	int bytes_read, bytes_written;
-	int used;
-
-	bytes_read = nts_ssl_read(ssl, buff, sizeof(buff), errtxt);
-	if (0 >= bytes_read)
-		return;
-
-	buf.next = buff;
-	buf.left = bytes_read;
-	if (!nts_ke_process_receive(&buf, &aead, errbuf, errlng, errtxt)) {
-		return;
-	}
-
-	if ((NO_AEAD == aead) && (NULL != ntsconfig.aead))
-		aead = nts_string_to_aead(ntsconfig.aead);
-	if (NO_AEAD == aead)
-		aead = AEAD_AES_SIV_CMAC_256;    /* default */
-
-	keylen = nts_get_key_length(aead);
-	if (!nts_make_keys(ssl, aead, c2s, s2c, keylen)) {
-		*errtxt = "Can't make keys";
-		return;
-	}
-
-	buf.next = buff;
-	buf.left = sizeof(buff);
-	nts_ke_setup_send(&buf, aead, c2s, s2c, keylen);
-
-	used = sizeof(buff)-buf.left;
-	bytes_written = nts_ssl_write(ssl, buff, used, errtxt);
-	if (bytes_written != used)
-		return;
-
-/* FIXME: Need counters for AEAD */
-
-	return;
+        /* RFC 4: servers must accept 1024
+         * Our cookies can be 104, 136, or 168 for AES_SIV_CMAC_xxx
+         * 8*168 fits comfortably into 2K.
+         */
+        uint8_t buff[2048];
+        uint8_t c2s[NTS_MAX_KEYLEN], s2c[NTS_MAX_KEYLEN];
+        int aead = NO_AEAD, keylen;
+        struct BufCtl_t buf;
+        int bytes_read, bytes_written;
+        int used;
+
+        bytes_read = nts_ssl_read(ssl, buff, sizeof(buff), errtxt);
+        if (0 >= bytes_read)
+                return;
+
+        buf.next = buff;
+        buf.left = bytes_read;
+        if (!nts_ke_process_receive(&buf, &aead, errbuf, errlng, errtxt)) {
+                return;
+        }
+
+        if ((NO_AEAD == aead) && (NULL != ntsconfig.aead))
+                aead = nts_string_to_aead(ntsconfig.aead);
+        if (NO_AEAD == aead)
+                aead = AEAD_AES_SIV_CMAC_256;    // default
+
+        keylen = nts_get_key_length(aead);
+        if (!nts_make_keys(ssl, aead, c2s, s2c, keylen)) {
+                *errtxt = "Can't make keys";
+                return;
+        }
+
+        buf.next = buff;
+        buf.left = sizeof(buff);
+        nts_ke_setup_send(&buf, aead, c2s, s2c, keylen);
+
+        used = sizeof(buff)-buf.left;
+        bytes_written = nts_ssl_write(ssl, buff, used, errtxt);
+        if (bytes_written != used)
+                return;
+
+// FIXME: Need counters for AEAD
+
+        return;
 }
 
 bool create_listener4(int port) {
-	int sock = -1;
-	sockaddr_u addr;
-	int on = 1;
-	int err;
-	char errbuf[100];
-
-	addr.sa4.sin_family = AF_INET;
-	addr.sa4.sin_port = htons(port);
-	addr.sa4.sin_addr.s_addr= htonl(INADDR_ANY);
-	sock = socket(AF_INET, SOCK_STREAM, 0);
-	if (sock < 0) {
-		if (EAFNOSUPPORT == errno) {
-			msyslog(LOG_ERR, "NTSs: No IPv4 support, disabling NTS-KE listener");
-			return true;
-		}
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_ERR, "NTSs: Can't create socket4: %s", errbuf);
-		return false;
-	}
-	err = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
-	if (0 > err) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_ERR, "NTSs: can't setsockopt4: %s", errbuf);
-		close(sock);
-		return false;
-	}
-	err = bind(sock, &addr.sa, sizeof(addr.sa4));
-	if (0 > err) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_ERR, "NTSs: can't bind4: %s", errbuf);
-		close(sock);
-		return false;
-	}
-	if (listen(sock, 6) < 0) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_ERR, "NTSs: can't listen4: %s", errbuf);
-		close(sock);
-		return false;
-	}
-	msyslog(LOG_INFO, "NTSs: listen4 worked");
-
-	listener4_sock = sock;
-	return true;
+        int sock = -1;
+        sockaddr_u addr;
+        int on = 1;
+        int err;
+        char errbuf[100];
+
+        addr.sa4.sin_family = AF_INET;
+        addr.sa4.sin_port = htons(port);
+        addr.sa4.sin_addr.s_addr= htonl(INADDR_ANY);
+        sock = socket(AF_INET, SOCK_STREAM, 0);
+        if (sock < 0) {
+                if (EAFNOSUPPORT == errno) {
+                        msyslog(LOG_ERR, "NTSs: No IPv4 support, disabling NTS-KE listener");
+                        return true;
+                }
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_ERR, "NTSs: Can't create socket4: %s", errbuf);
+                return false;
+        }
+        err = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
+        if (0 > err) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_ERR, "NTSs: can't setsockopt4: %s", errbuf);
+                close(sock);
+                return false;
+        }
+        err = bind(sock, &addr.sa, sizeof(addr.sa4));
+        if (0 > err) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_ERR, "NTSs: can't bind4: %s", errbuf);
+                close(sock);
+                return false;
+        }
+        if (listen(sock, 6) < 0) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_ERR, "NTSs: can't listen4: %s", errbuf);
+                close(sock);
+                return false;
+        }
+        msyslog(LOG_INFO, "NTSs: listen4 worked");
+
+        listener4_sock = sock;
+        return true;
 }
 
 bool create_listener6(int port) {
-	int sock = -1;
-	sockaddr_u addr;
-	int on = 1;
-	int err;
-	char errbuf[100];
-
-	addr.sa6.sin6_family = AF_INET6;
-	addr.sa6.sin6_port = htons(port);
-	addr.sa6.sin6_addr = in6addr_any;
-	sock = socket(AF_INET6, SOCK_STREAM, 0);
-	if (sock < 0) {
-		if (EAFNOSUPPORT == errno) {
-			msyslog(LOG_ERR, "NTSs: No IPv6 support, disabling NTS-KE listener");
-			return true;
-		}
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_ERR, "NTSs: Can't create socket6: %s", errbuf);
-		return false;
-	}
-	/* Hack to keep IPV6 from listening on IPV4 too */
-	err = setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on));
-	if (0 > err) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_ERR, "NTSs: can't setsockopt6only: %s", errbuf);
-		close(sock);
-		return false;
-	}
-	err = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
-	if (0 > err) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_ERR, "NTSs: can't setsockopt6: %s", errbuf);
-		close(sock);
-		return false;
-	}
-	err = bind(sock, &addr.sa, sizeof(addr.sa6));
-	if (0 > err) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_ERR, "NTSs: can't bind6: %s", errbuf);
-		close(sock);
-		return false;
-	}
-	if (listen(sock, 6) < 0) {
-		ntp_strerror_r(errno, errbuf, sizeof(errbuf));
-		msyslog(LOG_ERR, "NTSs: can't listen6: %s", errbuf);
-		close(sock);
-		return false;
-	}
-	msyslog(LOG_INFO, "NTSs: listen6 worked");
-
-	listener6_sock = sock;
-	return true;
+        int sock = -1;
+        sockaddr_u addr;
+        int on = 1;
+        int err;
+        char errbuf[100];
+
+        addr.sa6.sin6_family = AF_INET6;
+        addr.sa6.sin6_port = htons(port);
+        addr.sa6.sin6_addr = in6addr_any;
+        sock = socket(AF_INET6, SOCK_STREAM, 0);
+        if (sock < 0) {
+                if (EAFNOSUPPORT == errno) {
+                        msyslog(LOG_ERR, "NTSs: No IPv6 support, disabling NTS-KE listener");
+                        return true;
+                }
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_ERR, "NTSs: Can't create socket6: %s", errbuf);
+                return false;
+        }
+        // Hack to keep IPV6 from listening on IPV4 too
+        err = setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on));
+        if (0 > err) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_ERR, "NTSs: can't setsockopt6only: %s", errbuf);
+                close(sock);
+                return false;
+        }
+        err = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
+        if (0 > err) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_ERR, "NTSs: can't setsockopt6: %s", errbuf);
+                close(sock);
+                return false;
+        }
+        err = bind(sock, &addr.sa, sizeof(addr.sa6));
+        if (0 > err) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_ERR, "NTSs: can't bind6: %s", errbuf);
+                close(sock);
+                return false;
+        }
+        if (listen(sock, 6) < 0) {
+                ntp_strerror_r(errno, errbuf, sizeof(errbuf));
+                msyslog(LOG_ERR, "NTSs: can't listen6: %s", errbuf);
+                close(sock);
+                return false;
+        }
+        msyslog(LOG_INFO, "NTSs: listen6 worked");
+
+        listener6_sock = sock;
+        return true;
 }
 
 bool nts_ke_process_receive(struct BufCtl_t *buf, int *aead,
   char *errbuf, int errlng, const char **errtxt) {
-	while (buf->left >= NTS_KE_HDR_LNG) {
-		uint16_t type, data;
-		int length;
-		bool critical = false;
-		type = ke_next_record(buf, &length);
+        while (buf->left >= NTS_KE_HDR_LNG) {
+                uint16_t type, data;
+                int length;
+                bool critical = false;
+                type = ke_next_record(buf, &length);
                 if (length > buf->left) {
-			snprintf(errbuf, errlng,
-				"Chunk too big: 0x%x, %d, %d",
+                        snprintf(errbuf, errlng,
+                                "Chunk too big: 0x%x, %d, %d",
                                 type, buf->left, length);
-			*errtxt = errbuf;
+                        *errtxt = errbuf;
                         return false;
                 }
-		if (NTS_CRITICAL & type) {
-			critical = true;
-			type &= ~NTS_CRITICAL;
-		}
-		if (0) // Handy for debugging but very verbose
-			msyslog(LOG_INFO, "NTSs: Record: T=%d, L=%d, C=%d", type, length, critical);
-		switch (type) {
-		    case nts_error:
-			if (sizeof(data) != length) {
-				snprintf(errbuf, errlng,
-					"Wrong length on error: %d", length);
-				*errtxt = errbuf;
-				return false;
-			}
-			data = next_uint16(buf);
-			snprintf(errbuf, errlng,
-				"Received error: %d", data);
-			*errtxt = errbuf;
-			return false;
-		    case nts_next_protocol_negotiation:
-			if (sizeof(data) != length) {
-				snprintf(errbuf, errlng,
-					"NPN-Wrong length: %d", length);
-				*errtxt = errbuf;
-				return false;
-			}
-			data = next_uint16(buf);
-			if (data != nts_protocol_NTP) {
-				snprintf(errbuf, errlng,
-					"NPN-Bad data: %d", data);
-				*errtxt = errbuf;
-				return false;
-			}
-			break;
-		    case nts_algorithm_negotiation:
-			if (length % sizeof(uint16_t) > 0) {
-				snprintf(errbuf, errlng,
-					"AN-Wrong length: %d", length);
-				*errtxt = errbuf;
-				return false;
-			}
-			for (int i=0; i<length; i+=sizeof(uint16_t)) {
-				data = next_uint16(buf);
-				if (0 == nts_get_key_length(data)) {
-					if (0)  /* for debugging */
-						msyslog(LOG_ERR, "NTSs: AN-Unsupported AEAN type: %d", data);
-					continue;     /* ignore types we don't support */
-				}
-				if (*aead != NO_AEAD)
-					continue;     /* already got one */
-				*aead = data;   /* take this one */
-			}
-			break;
-		    case nts_end_of_message:
-			if ((0 != length) || !critical) {
-				snprintf(errbuf, errlng,
-					"EOM-Wrong length or not Critical: %d, %d",
-					length, critical);
-				*errtxt = errbuf;
-				return false;
-			}
-			if (0 != buf->left) {
-				snprintf(errbuf, errlng,
-					"EOM not at end: %d", buf->left);
-				*errtxt = errbuf;
-				return false;
-			}
-			return true;
-		    default:
-			if (critical) {
-			  // This only logs the first one from a connection
-			  snprintf(errbuf, errlng,
-				"Received strange type: T=%d, C=%d, L=%d",
-				type, critical, length);
-			  // There is an error code for this
-			  return false;
-			}
-			// It might be interesting to log non-critical
-			// but that needs rate limiting
-			buf->next += length;
-			buf->left -= length;
-			break;
-		} /* case */
-	}   /* while */
-
-	/* If we get here, we ran off the end without finding an EOM.
-	 * nts_ssl_read() should have complained, so this check
-	 * should never happen.
-	 */
-	if (buf->left > 0) {
-		*errtxt = "*** Leftovers";
-		return false;
- 	}
-
-	*errtxt = "*** Missing EOM";
-	return false;
+                if (NTS_CRITICAL & type) {
+                        critical = true;
+                        type &= ~NTS_CRITICAL;
+                }
+                if (0) // Handy for debugging but very verbose
+                        msyslog(LOG_INFO, "NTSs: Record: T=%d, L=%d, C=%d", type, length, critical);
+                switch (type) {
+                    case nts_error:
+                        if (sizeof(data) != length) {
+                                snprintf(errbuf, errlng,
+                                        "Wrong length on error: %d", length);
+                                *errtxt = errbuf;
+                                return false;
+                        }
+                        data = next_uint16(buf);
+                        snprintf(errbuf, errlng,
+                                "Received error: %d", data);
+                        *errtxt = errbuf;
+                        return false;
+                    case nts_next_protocol_negotiation:
+                        if (sizeof(data) != length) {
+                                snprintf(errbuf, errlng,
+                                        "NPN-Wrong length: %d", length);
+                                *errtxt = errbuf;
+                                return false;
+                        }
+                        data = next_uint16(buf);
+                        if (data != nts_protocol_NTP) {
+                                snprintf(errbuf, errlng,
+                                        "NPN-Bad data: %d", data);
+                                *errtxt = errbuf;
+                                return false;
+                        }
+                        break;
+                    case nts_algorithm_negotiation:
+                        if (length % sizeof(uint16_t) > 0) {
+                                snprintf(errbuf, errlng,
+                                        "AN-Wrong length: %d", length);
+                                *errtxt = errbuf;
+                                return false;
+                        }
+                        for (int i=0; i<length; i+=sizeof(uint16_t)) {
+                                data = next_uint16(buf);
+                                if (0 == nts_get_key_length(data)) {
+                                        if (0)  // for debugging
+                                                msyslog(LOG_ERR, "NTSs: AN-Unsupported AEAN type: %d", data);
+                                        continue;     // ignore types we don't support
+                                }
+                                if (*aead != NO_AEAD)
+                                        continue;     // already got one
+                                *aead = data;   // take this one
+                        }
+                        break;
+                    case nts_end_of_message:
+                        if ((0 != length) || !critical) {
+                                snprintf(errbuf, errlng,
+                                        "EOM-Wrong length or not Critical: %d, %d",
+                                        length, critical);
+                                *errtxt = errbuf;
+                                return false;
+                        }
+                        if (0 != buf->left) {
+                                snprintf(errbuf, errlng,
+                                        "EOM not at end: %d", buf->left);
+                                *errtxt = errbuf;
+                                return false;
+                        }
+                        return true;
+                    default:
+                        if (critical) {
+                          // This only logs the first one from a connection
+                          snprintf(errbuf, errlng,
+                                "Received strange type: T=%d, C=%d, L=%d",
+                                type, critical, length);
+                          // There is an error code for this
+                          return false;
+                        }
+                        // It might be interesting to log non-critical
+                        // but that needs rate limiting
+                        buf->next += length;
+                        buf->left -= length;
+                        break;
+                }  // case
+        }   // while
+
+        /* If we get here, we ran off the end without finding an EOM.
+         * nts_ssl_read() should have complained, so this check
+         * should never happen.
+         */
+        if (buf->left > 0) {
+                *errtxt = "*** Leftovers";
+                return false;
+        }
+
+        *errtxt = "*** Missing EOM";
+        return false;
 
 }
 
 void nts_ke_setup_send(struct BufCtl_t *buf, int aead,
        uint8_t *c2s, uint8_t *s2c, int keylen) {
 
-	/* 4.1.2 Next Protocol */
-	ke_append_record_uint16(buf,
-				NTS_CRITICAL+nts_next_protocol_negotiation, nts_protocol_NTP);
-	/* 4.1.5 AEAD Algorithm List */
-	ke_append_record_uint16(buf, nts_algorithm_negotiation, aead);
+        // 4.1.2 Next Protocol
+        ke_append_record_uint16(buf,
+                                NTS_CRITICAL+nts_next_protocol_negotiation, nts_protocol_NTP);
+        // 4.1.5 AEAD Algorithm List
+        ke_append_record_uint16(buf, nts_algorithm_negotiation, aead);
 
-	if (extra_port)
-	        ke_append_record_uint16(buf, nts_port_negotiation, extra_port);
+        if (extra_port)
+                ke_append_record_uint16(buf, nts_port_negotiation, extra_port);
 
 
-	for (int i=0; i<NTS_MAX_COOKIES; i++) {
-		uint8_t cookie[NTS_MAX_COOKIELEN];
-		int cookielen = nts_make_cookie(cookie, aead, c2s, s2c, keylen);
-		ke_append_record_bytes(buf, nts_new_cookie, cookie, cookielen);
-	}
+        for (int i=0; i<NTS_MAX_COOKIES; i++) {
+                uint8_t cookie[NTS_MAX_COOKIELEN];
+                int cookielen = nts_make_cookie(cookie, aead, c2s, s2c, keylen);
+                ke_append_record_bytes(buf, nts_new_cookie, cookie, cookielen);
+        }
 
-	/* 4.1.1: End, Critical */
-	ke_append_record_null(buf, NTS_CRITICAL+nts_end_of_message);
+        // 4.1.1: End, Critical
+        ke_append_record_null(buf, NTS_CRITICAL+nts_end_of_message);
 }
 
-/* end */
+// end


=====================================
ntpd/refclock_jjy.c
=====================================
The diff for this file was not included because it is too large.


View it on GitLab: https://gitlab.com/NTPsec/ntpsec/-/compare/7595b7b6ff7030b8187fe89f262caa18c20eec1b...2dee877da4625caca807b0c94cac84bf6a21ca1c

-- 
View it on GitLab: https://gitlab.com/NTPsec/ntpsec/-/compare/7595b7b6ff7030b8187fe89f262caa18c20eec1b...2dee877da4625caca807b0c94cac84bf6a21ca1c
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/17ab53a8/attachment-0001.htm>


More information about the vc mailing list