spaces/tabs
This commit is contained in:
parent
35f4cd8431
commit
b89b77be10
@ -1,5 +1,4 @@
|
|||||||
#include "ed25519.h"
|
#include "ed25519.h"
|
||||||
#include "sha512.h"
|
|
||||||
#include "ge.h"
|
#include "ge.h"
|
||||||
#include "sc.h"
|
#include "sc.h"
|
||||||
|
|
||||||
@ -8,8 +7,7 @@
|
|||||||
void ed25519_add_scalar(unsigned char *public_key, unsigned char *private_key, const unsigned char *scalar) {
|
void ed25519_add_scalar(unsigned char *public_key, unsigned char *private_key, const unsigned char *scalar) {
|
||||||
const unsigned char SC_1[32] = {1}; /* scalar with value 1 */
|
const unsigned char SC_1[32] = {1}; /* scalar with value 1 */
|
||||||
|
|
||||||
unsigned char n[32];
|
unsigned char n[32];
|
||||||
unsigned char salt[64];
|
|
||||||
ge_p3 nB;
|
ge_p3 nB;
|
||||||
ge_p1p1 A_p1p1;
|
ge_p1p1 A_p1p1;
|
||||||
ge_p3 A;
|
ge_p3 A;
|
||||||
@ -25,41 +23,34 @@ void ed25519_add_scalar(unsigned char *public_key, unsigned char *private_key, c
|
|||||||
n[31] = scalar[31] & 127;
|
n[31] = scalar[31] & 127;
|
||||||
|
|
||||||
/* private key: a = n + t */
|
/* private key: a = n + t */
|
||||||
/* we also create a new salt, just to be sure */
|
|
||||||
if (private_key) {
|
if (private_key) {
|
||||||
sc_muladd(private_key, SC_1, n, private_key);
|
sc_muladd(private_key, SC_1, n, private_key);
|
||||||
|
|
||||||
/* generate new salt as the last 32 bytes of SHA512(new_private_key, old_salt) */
|
|
||||||
sha512(private_key, 64, salt);
|
|
||||||
for (i = 0; i < 32; ++i) {
|
|
||||||
private_key[i + 32] = salt[i + 32];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* public key: A = nB + T */
|
/* public key: A = nB + T */
|
||||||
if (public_key) {
|
if (public_key) {
|
||||||
/* if we know the private key we don't need a point addition, which is faster */
|
/* if we know the private key we don't need a point addition, which is faster */
|
||||||
/* using a "timing attack" you could find out wether or not we know the private
|
/* using a "timing attack" you could find out wether or not we know the private
|
||||||
key, but this information seems rather useless - if this is important pass
|
key, but this information seems rather useless - if this is important pass
|
||||||
public_key and private_key seperately in 2 function calls */
|
public_key and private_key seperately in 2 function calls */
|
||||||
if (private_key) {
|
if (private_key) {
|
||||||
ge_scalarmult_base(&A, private_key);
|
ge_scalarmult_base(&A, private_key);
|
||||||
} else {
|
} else {
|
||||||
/* unpack public key into T */
|
/* unpack public key into T */
|
||||||
ge_frombytes_negate_vartime(&public_key_unpacked, public_key);
|
ge_frombytes_negate_vartime(&public_key_unpacked, public_key);
|
||||||
fe_neg(public_key_unpacked.X, public_key_unpacked.X); // undo negate
|
fe_neg(public_key_unpacked.X, public_key_unpacked.X); // undo negate
|
||||||
fe_neg(public_key_unpacked.T, public_key_unpacked.T); // undo negate
|
fe_neg(public_key_unpacked.T, public_key_unpacked.T); // undo negate
|
||||||
ge_p3_to_cached(&T, &public_key_unpacked);
|
ge_p3_to_cached(&T, &public_key_unpacked);
|
||||||
|
|
||||||
/* calculate n*B */
|
/* calculate n*B */
|
||||||
ge_scalarmult_base(&nB, n);
|
ge_scalarmult_base(&nB, n);
|
||||||
|
|
||||||
/* A = n*B + T */
|
/* A = n*B + T */
|
||||||
ge_add(&A_p1p1, &nB, &T);
|
ge_add(&A_p1p1, &nB, &T);
|
||||||
ge_p1p1_to_p3(&A, &A_p1p1);
|
ge_p1p1_to_p3(&A, &A_p1p1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* pack public key */
|
/* pack public key */
|
||||||
ge_p3_tobytes(public_key, &A);
|
ge_p3_tobytes(public_key, &A);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,15 +4,15 @@
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
#if defined(ED25519_BUILD_DLL)
|
#if defined(ED25519_BUILD_DLL)
|
||||||
#define ED25519_DECLSPEC __declspec(dllexport)
|
#define ED25519_DECLSPEC __declspec(dllexport)
|
||||||
#elif defined(ED25519_DLL)
|
#elif defined(ED25519_DLL)
|
||||||
#define ED25519_DECLSPEC __declspec(dllimport)
|
#define ED25519_DECLSPEC __declspec(dllimport)
|
||||||
#else
|
#else
|
||||||
#define ED25519_DECLSPEC
|
#define ED25519_DECLSPEC
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#define ED25519_DECLSPEC
|
#define ED25519_DECLSPEC
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
228
src/fe.c
228
src/fe.c
@ -188,74 +188,74 @@ void fe_cmov(fe f, const fe g, unsigned int b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Replace (f,g) with (g,f) if b == 1;
|
Replace (f,g) with (g,f) if b == 1;
|
||||||
replace (f,g) with (f,g) if b == 0.
|
replace (f,g) with (f,g) if b == 0.
|
||||||
|
|
||||||
Preconditions: b in {0,1}.
|
Preconditions: b in {0,1}.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void fe_cswap(fe f,fe g,unsigned int b) {
|
void fe_cswap(fe f,fe g,unsigned int b) {
|
||||||
int32_t f0 = f[0];
|
int32_t f0 = f[0];
|
||||||
int32_t f1 = f[1];
|
int32_t f1 = f[1];
|
||||||
int32_t f2 = f[2];
|
int32_t f2 = f[2];
|
||||||
int32_t f3 = f[3];
|
int32_t f3 = f[3];
|
||||||
int32_t f4 = f[4];
|
int32_t f4 = f[4];
|
||||||
int32_t f5 = f[5];
|
int32_t f5 = f[5];
|
||||||
int32_t f6 = f[6];
|
int32_t f6 = f[6];
|
||||||
int32_t f7 = f[7];
|
int32_t f7 = f[7];
|
||||||
int32_t f8 = f[8];
|
int32_t f8 = f[8];
|
||||||
int32_t f9 = f[9];
|
int32_t f9 = f[9];
|
||||||
int32_t g0 = g[0];
|
int32_t g0 = g[0];
|
||||||
int32_t g1 = g[1];
|
int32_t g1 = g[1];
|
||||||
int32_t g2 = g[2];
|
int32_t g2 = g[2];
|
||||||
int32_t g3 = g[3];
|
int32_t g3 = g[3];
|
||||||
int32_t g4 = g[4];
|
int32_t g4 = g[4];
|
||||||
int32_t g5 = g[5];
|
int32_t g5 = g[5];
|
||||||
int32_t g6 = g[6];
|
int32_t g6 = g[6];
|
||||||
int32_t g7 = g[7];
|
int32_t g7 = g[7];
|
||||||
int32_t g8 = g[8];
|
int32_t g8 = g[8];
|
||||||
int32_t g9 = g[9];
|
int32_t g9 = g[9];
|
||||||
int32_t x0 = f0 ^ g0;
|
int32_t x0 = f0 ^ g0;
|
||||||
int32_t x1 = f1 ^ g1;
|
int32_t x1 = f1 ^ g1;
|
||||||
int32_t x2 = f2 ^ g2;
|
int32_t x2 = f2 ^ g2;
|
||||||
int32_t x3 = f3 ^ g3;
|
int32_t x3 = f3 ^ g3;
|
||||||
int32_t x4 = f4 ^ g4;
|
int32_t x4 = f4 ^ g4;
|
||||||
int32_t x5 = f5 ^ g5;
|
int32_t x5 = f5 ^ g5;
|
||||||
int32_t x6 = f6 ^ g6;
|
int32_t x6 = f6 ^ g6;
|
||||||
int32_t x7 = f7 ^ g7;
|
int32_t x7 = f7 ^ g7;
|
||||||
int32_t x8 = f8 ^ g8;
|
int32_t x8 = f8 ^ g8;
|
||||||
int32_t x9 = f9 ^ g9;
|
int32_t x9 = f9 ^ g9;
|
||||||
b = -b;
|
b = -b;
|
||||||
x0 &= b;
|
x0 &= b;
|
||||||
x1 &= b;
|
x1 &= b;
|
||||||
x2 &= b;
|
x2 &= b;
|
||||||
x3 &= b;
|
x3 &= b;
|
||||||
x4 &= b;
|
x4 &= b;
|
||||||
x5 &= b;
|
x5 &= b;
|
||||||
x6 &= b;
|
x6 &= b;
|
||||||
x7 &= b;
|
x7 &= b;
|
||||||
x8 &= b;
|
x8 &= b;
|
||||||
x9 &= b;
|
x9 &= b;
|
||||||
f[0] = f0 ^ x0;
|
f[0] = f0 ^ x0;
|
||||||
f[1] = f1 ^ x1;
|
f[1] = f1 ^ x1;
|
||||||
f[2] = f2 ^ x2;
|
f[2] = f2 ^ x2;
|
||||||
f[3] = f3 ^ x3;
|
f[3] = f3 ^ x3;
|
||||||
f[4] = f4 ^ x4;
|
f[4] = f4 ^ x4;
|
||||||
f[5] = f5 ^ x5;
|
f[5] = f5 ^ x5;
|
||||||
f[6] = f6 ^ x6;
|
f[6] = f6 ^ x6;
|
||||||
f[7] = f7 ^ x7;
|
f[7] = f7 ^ x7;
|
||||||
f[8] = f8 ^ x8;
|
f[8] = f8 ^ x8;
|
||||||
f[9] = f9 ^ x9;
|
f[9] = f9 ^ x9;
|
||||||
g[0] = g0 ^ x0;
|
g[0] = g0 ^ x0;
|
||||||
g[1] = g1 ^ x1;
|
g[1] = g1 ^ x1;
|
||||||
g[2] = g2 ^ x2;
|
g[2] = g2 ^ x2;
|
||||||
g[3] = g3 ^ x3;
|
g[3] = g3 ^ x3;
|
||||||
g[4] = g4 ^ x4;
|
g[4] = g4 ^ x4;
|
||||||
g[5] = g5 ^ x5;
|
g[5] = g5 ^ x5;
|
||||||
g[6] = g6 ^ x6;
|
g[6] = g6 ^ x6;
|
||||||
g[7] = g7 ^ x7;
|
g[7] = g7 ^ x7;
|
||||||
g[8] = g8 ^ x8;
|
g[8] = g8 ^ x8;
|
||||||
g[9] = g9 ^ x9;
|
g[9] = g9 ^ x9;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -777,59 +777,59 @@ Postconditions:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void fe_mul121666(fe h, fe f) {
|
void fe_mul121666(fe h, fe f) {
|
||||||
int32_t f0 = f[0];
|
int32_t f0 = f[0];
|
||||||
int32_t f1 = f[1];
|
int32_t f1 = f[1];
|
||||||
int32_t f2 = f[2];
|
int32_t f2 = f[2];
|
||||||
int32_t f3 = f[3];
|
int32_t f3 = f[3];
|
||||||
int32_t f4 = f[4];
|
int32_t f4 = f[4];
|
||||||
int32_t f5 = f[5];
|
int32_t f5 = f[5];
|
||||||
int32_t f6 = f[6];
|
int32_t f6 = f[6];
|
||||||
int32_t f7 = f[7];
|
int32_t f7 = f[7];
|
||||||
int32_t f8 = f[8];
|
int32_t f8 = f[8];
|
||||||
int32_t f9 = f[9];
|
int32_t f9 = f[9];
|
||||||
int64_t h0 = f0 * (int64_t) 121666;
|
int64_t h0 = f0 * (int64_t) 121666;
|
||||||
int64_t h1 = f1 * (int64_t) 121666;
|
int64_t h1 = f1 * (int64_t) 121666;
|
||||||
int64_t h2 = f2 * (int64_t) 121666;
|
int64_t h2 = f2 * (int64_t) 121666;
|
||||||
int64_t h3 = f3 * (int64_t) 121666;
|
int64_t h3 = f3 * (int64_t) 121666;
|
||||||
int64_t h4 = f4 * (int64_t) 121666;
|
int64_t h4 = f4 * (int64_t) 121666;
|
||||||
int64_t h5 = f5 * (int64_t) 121666;
|
int64_t h5 = f5 * (int64_t) 121666;
|
||||||
int64_t h6 = f6 * (int64_t) 121666;
|
int64_t h6 = f6 * (int64_t) 121666;
|
||||||
int64_t h7 = f7 * (int64_t) 121666;
|
int64_t h7 = f7 * (int64_t) 121666;
|
||||||
int64_t h8 = f8 * (int64_t) 121666;
|
int64_t h8 = f8 * (int64_t) 121666;
|
||||||
int64_t h9 = f9 * (int64_t) 121666;
|
int64_t h9 = f9 * (int64_t) 121666;
|
||||||
int64_t carry0;
|
int64_t carry0;
|
||||||
int64_t carry1;
|
int64_t carry1;
|
||||||
int64_t carry2;
|
int64_t carry2;
|
||||||
int64_t carry3;
|
int64_t carry3;
|
||||||
int64_t carry4;
|
int64_t carry4;
|
||||||
int64_t carry5;
|
int64_t carry5;
|
||||||
int64_t carry6;
|
int64_t carry6;
|
||||||
int64_t carry7;
|
int64_t carry7;
|
||||||
int64_t carry8;
|
int64_t carry8;
|
||||||
int64_t carry9;
|
int64_t carry9;
|
||||||
|
|
||||||
carry9 = (h9 + (int64_t) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;
|
carry9 = (h9 + (int64_t) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;
|
||||||
carry1 = (h1 + (int64_t) (1<<24)) >> 25; h2 += carry1; h1 -= carry1 << 25;
|
carry1 = (h1 + (int64_t) (1<<24)) >> 25; h2 += carry1; h1 -= carry1 << 25;
|
||||||
carry3 = (h3 + (int64_t) (1<<24)) >> 25; h4 += carry3; h3 -= carry3 << 25;
|
carry3 = (h3 + (int64_t) (1<<24)) >> 25; h4 += carry3; h3 -= carry3 << 25;
|
||||||
carry5 = (h5 + (int64_t) (1<<24)) >> 25; h6 += carry5; h5 -= carry5 << 25;
|
carry5 = (h5 + (int64_t) (1<<24)) >> 25; h6 += carry5; h5 -= carry5 << 25;
|
||||||
carry7 = (h7 + (int64_t) (1<<24)) >> 25; h8 += carry7; h7 -= carry7 << 25;
|
carry7 = (h7 + (int64_t) (1<<24)) >> 25; h8 += carry7; h7 -= carry7 << 25;
|
||||||
|
|
||||||
carry0 = (h0 + (int64_t) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;
|
carry0 = (h0 + (int64_t) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;
|
||||||
carry2 = (h2 + (int64_t) (1<<25)) >> 26; h3 += carry2; h2 -= carry2 << 26;
|
carry2 = (h2 + (int64_t) (1<<25)) >> 26; h3 += carry2; h2 -= carry2 << 26;
|
||||||
carry4 = (h4 + (int64_t) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;
|
carry4 = (h4 + (int64_t) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;
|
||||||
carry6 = (h6 + (int64_t) (1<<25)) >> 26; h7 += carry6; h6 -= carry6 << 26;
|
carry6 = (h6 + (int64_t) (1<<25)) >> 26; h7 += carry6; h6 -= carry6 << 26;
|
||||||
carry8 = (h8 + (int64_t) (1<<25)) >> 26; h9 += carry8; h8 -= carry8 << 26;
|
carry8 = (h8 + (int64_t) (1<<25)) >> 26; h9 += carry8; h8 -= carry8 << 26;
|
||||||
|
|
||||||
h[0] = h0;
|
h[0] = h0;
|
||||||
h[1] = h1;
|
h[1] = h1;
|
||||||
h[2] = h2;
|
h[2] = h2;
|
||||||
h[3] = h3;
|
h[3] = h3;
|
||||||
h[4] = h4;
|
h[4] = h4;
|
||||||
h[5] = h5;
|
h[5] = h5;
|
||||||
h[6] = h6;
|
h[6] = h6;
|
||||||
h[7] = h7;
|
h[7] = h7;
|
||||||
h[8] = h8;
|
h[8] = h8;
|
||||||
h[9] = h9;
|
h[9] = h9;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,78 +2,78 @@
|
|||||||
#include "fe.h"
|
#include "fe.h"
|
||||||
|
|
||||||
void ed25519_key_exchange(unsigned char *shared_secret, const unsigned char *public_key, const unsigned char *private_key) {
|
void ed25519_key_exchange(unsigned char *shared_secret, const unsigned char *public_key, const unsigned char *private_key) {
|
||||||
unsigned char e[32];
|
unsigned char e[32];
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
fe x1;
|
fe x1;
|
||||||
fe x2;
|
fe x2;
|
||||||
fe z2;
|
fe z2;
|
||||||
fe x3;
|
fe x3;
|
||||||
fe z3;
|
fe z3;
|
||||||
fe tmp0;
|
fe tmp0;
|
||||||
fe tmp1;
|
fe tmp1;
|
||||||
|
|
||||||
int pos;
|
int pos;
|
||||||
unsigned int swap;
|
unsigned int swap;
|
||||||
unsigned int b;
|
unsigned int b;
|
||||||
|
|
||||||
/* copy the private key and make sure it's valid */
|
/* copy the private key and make sure it's valid */
|
||||||
for (i = 0; i < 32; ++i) {
|
for (i = 0; i < 32; ++i) {
|
||||||
e[i] = private_key[i];
|
e[i] = private_key[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
e[0] &= 248;
|
e[0] &= 248;
|
||||||
e[31] &= 63;
|
e[31] &= 63;
|
||||||
e[31] |= 64;
|
e[31] |= 64;
|
||||||
|
|
||||||
/* unpack the public key and convert edwards to montgomery */
|
/* unpack the public key and convert edwards to montgomery */
|
||||||
/* due to CodesInChaos: montgomeryX = (edwardsY + 1)*inverse(1 - edwardsY) mod p */
|
/* due to CodesInChaos: montgomeryX = (edwardsY + 1)*inverse(1 - edwardsY) mod p */
|
||||||
fe_frombytes(x1, public_key);
|
fe_frombytes(x1, public_key);
|
||||||
fe_1(tmp1);
|
fe_1(tmp1);
|
||||||
fe_add(tmp0, x1, tmp1);
|
fe_add(tmp0, x1, tmp1);
|
||||||
fe_sub(tmp1, tmp1, x1);
|
fe_sub(tmp1, tmp1, x1);
|
||||||
fe_invert(tmp1, tmp1);
|
fe_invert(tmp1, tmp1);
|
||||||
fe_mul(x1, tmp0, tmp1);
|
fe_mul(x1, tmp0, tmp1);
|
||||||
|
|
||||||
fe_1(x2);
|
fe_1(x2);
|
||||||
fe_0(z2);
|
fe_0(z2);
|
||||||
fe_copy(x3, x1);
|
fe_copy(x3, x1);
|
||||||
fe_1(z3);
|
fe_1(z3);
|
||||||
|
|
||||||
swap = 0;
|
swap = 0;
|
||||||
for (pos = 254; pos >= 0; --pos) {
|
for (pos = 254; pos >= 0; --pos) {
|
||||||
b = e[pos / 8] >> (pos & 7);
|
b = e[pos / 8] >> (pos & 7);
|
||||||
b &= 1;
|
b &= 1;
|
||||||
swap ^= b;
|
swap ^= b;
|
||||||
fe_cswap(x2, x3, swap);
|
fe_cswap(x2, x3, swap);
|
||||||
fe_cswap(z2, z3, swap);
|
fe_cswap(z2, z3, swap);
|
||||||
swap = b;
|
swap = b;
|
||||||
|
|
||||||
/* from montgomery.h */
|
/* from montgomery.h */
|
||||||
fe_sub(tmp0, x3, z3);
|
fe_sub(tmp0, x3, z3);
|
||||||
fe_sub(tmp1, x2, z2);
|
fe_sub(tmp1, x2, z2);
|
||||||
fe_add(x2, x2, z2);
|
fe_add(x2, x2, z2);
|
||||||
fe_add(z2, x3, z3);
|
fe_add(z2, x3, z3);
|
||||||
fe_mul(z3, tmp0, x2);
|
fe_mul(z3, tmp0, x2);
|
||||||
fe_mul(z2, z2, tmp1);
|
fe_mul(z2, z2, tmp1);
|
||||||
fe_sq(tmp0, tmp1);
|
fe_sq(tmp0, tmp1);
|
||||||
fe_sq(tmp1, x2);
|
fe_sq(tmp1, x2);
|
||||||
fe_add(x3, z3, z2);
|
fe_add(x3, z3, z2);
|
||||||
fe_sub(z2, z3, z2);
|
fe_sub(z2, z3, z2);
|
||||||
fe_mul(x2, tmp1, tmp0);
|
fe_mul(x2, tmp1, tmp0);
|
||||||
fe_sub(tmp1, tmp1, tmp0);
|
fe_sub(tmp1, tmp1, tmp0);
|
||||||
fe_sq(z2, z2);
|
fe_sq(z2, z2);
|
||||||
fe_mul121666(z3, tmp1);
|
fe_mul121666(z3, tmp1);
|
||||||
fe_sq(x3, x3);
|
fe_sq(x3, x3);
|
||||||
fe_add(tmp0, tmp0, z3);
|
fe_add(tmp0, tmp0, z3);
|
||||||
fe_mul(z3, x1, z2);
|
fe_mul(z3, x1, z2);
|
||||||
fe_mul(z2, tmp1, tmp0);
|
fe_mul(z2, tmp1, tmp0);
|
||||||
}
|
}
|
||||||
|
|
||||||
fe_cswap(x2, x3, swap);
|
fe_cswap(x2, x3, swap);
|
||||||
fe_cswap(z2, z3, swap);
|
fe_cswap(z2, z3, swap);
|
||||||
|
|
||||||
fe_invert(z2, z2);
|
fe_invert(z2, z2);
|
||||||
fe_mul(x2, x2, z2);
|
fe_mul(x2, x2, z2);
|
||||||
fe_tobytes(shared_secret, x2);
|
fe_tobytes(shared_secret, x2);
|
||||||
}
|
}
|
||||||
|
30
src/seed.c
30
src/seed.c
@ -11,27 +11,27 @@
|
|||||||
|
|
||||||
int ed25519_create_seed(unsigned char *seed) {
|
int ed25519_create_seed(unsigned char *seed) {
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
HCRYPTPROV prov;
|
HCRYPTPROV prov;
|
||||||
|
|
||||||
if (!CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
|
if (!CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!CryptGenRandom(prov, 32, seed)) {
|
if (!CryptGenRandom(prov, 32, seed)) {
|
||||||
CryptReleaseContext(prov, 0);
|
CryptReleaseContext(prov, 0);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
CryptReleaseContext(prov, 0);
|
CryptReleaseContext(prov, 0);
|
||||||
#else
|
#else
|
||||||
FILE *f = fopen("/dev/urandom", "rb");
|
FILE *f = fopen("/dev/urandom", "rb");
|
||||||
|
|
||||||
if (f == NULL) {
|
if (f == NULL) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
fread(seed, 1, 32, f);
|
fread(seed, 1, 32, f);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user