Use Ed25519 keys.
[tinc] / src / ed25519 / seed.c
diff --git a/src/ed25519/seed.c b/src/ed25519/seed.c
new file mode 100644 (file)
index 0000000..25e5182
--- /dev/null
@@ -0,0 +1,40 @@
+#include "ed25519.h"
+
+#ifndef ED25519_NO_SEED
+
+#ifdef _WIN32
+#include <Windows.h>
+#include <Wincrypt.h>
+#else
+#include <stdio.h>
+#endif
+
+int ed25519_create_seed(unsigned char *seed) {
+#ifdef _WIN32
+    HCRYPTPROV prov;
+
+    if (!CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))  {
+        return 1;
+    }
+
+    if (!CryptGenRandom(prov, 32, seed))  {
+        CryptReleaseContext(prov, 0);
+        return 1;
+    }
+
+    CryptReleaseContext(prov, 0);
+#else
+    FILE *f = fopen("/dev/urandom", "rb");
+
+    if (f == NULL) {
+        return 1;
+    }
+
+    fread(seed, 1, 32, f);
+    fclose(f);
+#endif
+
+    return 0;
+}
+
+#endif
\ No newline at end of file