]> gitweb.ps.run Git - matrix_esp_thesis/blobdiff - ext/olm/lib/ed25519/src/seed.c
add dependencies to repo
[matrix_esp_thesis] / ext / olm / lib / ed25519 / src / seed.c
diff --git a/ext/olm/lib/ed25519/src/seed.c b/ext/olm/lib/ed25519/src/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