DF-3388 / wgkeygen.c
/* DF-3388: generate wgkeys.bin = resp_pub || priv0_raw || NPEERS × peer_raw */ #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #include <time.h> #include <unistd.h> #include <crypto/curve25519/curve25519.h> #define NPEERS 128 static void randbuf(uint8_t *p, size_t n) { size_t i; for (i = 0; i < n; i++) p[i] = (uint8_t)(random() & 0xff); } int main(void) { uint8_t priv[32], pub[32], base[32] = { 9 }; FILE *f; int i; srandom(time(NULL) ^ getpid()); f = fopen("/tmp/wgkeys.bin", "wb"); if (!f) { perror("fopen"); return 1; } randbuf(priv, 32); priv[0] &= 248; priv[31] &= 127; priv[31] |= 64; /* clamp */ curve25519(pub, priv, base); fwrite(pub, 32, 1, f); fwrite(priv, 32, 1, f); /* already clamped (idempotent) */ for (i = 0; i < NPEERS; i++) { randbuf(priv, 32); fwrite(priv, 32, 1, f); } fclose(f); printf("wrote /tmp/wgkeys.bin\n"); return 0; } |