seed.c 644 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include "ed25519.h"
  2. #ifndef ED25519_NO_SEED
  3. #ifdef _WIN32
  4. #include <windows.h>
  5. #include <wincrypt.h>
  6. #else
  7. #include <stdio.h>
  8. #endif
  9. int ed25519_create_seed(unsigned char *seed) {
  10. #ifdef _WIN32
  11. HCRYPTPROV prov;
  12. if (!CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
  13. return 1;
  14. }
  15. if (!CryptGenRandom(prov, 32, seed)) {
  16. CryptReleaseContext(prov, 0);
  17. return 1;
  18. }
  19. CryptReleaseContext(prov, 0);
  20. #else
  21. FILE *f = fopen("/dev/urandom", "rb");
  22. if (f == NULL) {
  23. return 1;
  24. }
  25. fread(seed, 1, 32, f);
  26. fclose(f);
  27. #endif
  28. return 0;
  29. }
  30. #endif