]> git.meshlink.io Git - meshlink/blob - src/ed25519/seed.c
Use the canonical address exclusively for making outgoing meta-connections.
[meshlink] / src / ed25519 / seed.c
1 #include "ed25519.h"
2
3 #ifndef ED25519_NO_SEED
4
5 #ifdef _WIN32
6 #include <windows.h>
7 #include <wincrypt.h>
8 #else
9 #include <stdio.h>
10 #endif
11
12 int ed25519_create_seed(unsigned char *seed) {
13 #ifdef _WIN32
14     HCRYPTPROV prov;
15
16     if (!CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))  {
17         return 1;
18     }
19
20     if (!CryptGenRandom(prov, 32, seed))  {
21         CryptReleaseContext(prov, 0);
22         return 1;
23     }
24
25     CryptReleaseContext(prov, 0);
26 #else
27     FILE *f = fopen("/dev/urandom", "rb");
28
29     if (f == NULL) {
30         return 1;
31     }
32
33     if(fread(seed, 32, 1, f) != 1) {
34             fclose(f);
35             return 1;
36     }
37
38     fclose(f);
39 #endif
40
41     return 0;
42 }
43
44 #endif