Codebase list libcryptx-perl / 0547bb0
rand_helper Karel Miko 10 years ago
3 changed file(s) with 13 addition(s) and 22 deletion(s). Raw diff Collapse all Expand all
55 PK_PUBLIC_COMPRESSED=2 /* used only when exporting public ECC key */
66 };
77
8 typedef struct rand_helper {
9 prng_state *prng;
10 int wprng;
11 } rand_helper_st;
12
13 int rand_helper(unsigned char *dst, int len, void *dat);
814 int rand_prime(void *N, long len, prng_state *prng, int wprng);
915 int rand_bn_bits(void *N, int bits, prng_state *prng, int wprng);
1016 int rand_bn_range(void *N, void *limit, prng_state *prng, int wprng);
1616
1717 #define USE_BBS 1
1818
19 struct rng_data {
20 prng_state *prng;
21 int wprng;
22 };
23
24 static int rand_prime_helper(unsigned char *dst, int len, void *dat)
19 int rand_helper(unsigned char *dst, int len, void *dat)
2520 {
26 return (int)prng_descriptor[((struct rng_data *)dat)->wprng].read(dst, len, ((struct rng_data *)dat)->prng);
21 return (int)prng_descriptor[((rand_helper_st *)dat)->wprng].read(dst, len, ((rand_helper_st *)dat)->prng);
2722 }
2823
2924 int rand_prime(void *N, long len, prng_state *prng, int wprng)
3025 {
3126 int err, res, type;
3227 unsigned char *buf;
33 struct rng_data rng;
28 rand_helper_st rng;
3429
3530 LTC_ARGCHK(N != NULL);
3631
8075 }
8176
8277 /* test */
83 if ((err = mp_prime_is_prime_ex(N, 0, &res, rand_prime_helper, &rng)) != CRYPT_OK) {
78 if ((err = mp_prime_is_prime_ex(N, 0, &res, rand_helper, &rng)) != CRYPT_OK) {
8479 XFREE(buf);
8580 return err;
8681 }
1616
1717 #ifdef LTC_MDSA
1818
19 struct rng_data {
20 prng_state *prng;
21 int wprng;
22 };
23
24 static int rng_helper(unsigned char *dst, int len, void *dat)
25 {
26 return (int)prng_descriptor[((struct rng_data *)dat)->wprng].read(dst, len, ((struct rng_data *)dat)->prng);
27 }
28
2919 /**
3020 Create DSA parameters
3121 @param prng An active PRNG state
4333 int err, res, mr_tests_q, mr_tests_p, found_p, found_q, hash;
4434 unsigned char *wbuf, *sbuf, digest[MAXBLOCKSIZE];
4535 void *t2L1, *t2N1, *t2q, *t2seedlen, *U, *W, *X, *c, *h, *e, *seedinc;
46 struct rng_data rng;
36 rand_helper_st rng;
4737
4838 /* check prng */
4939 if ((err = prng_is_valid(wprng)) != CRYPT_OK) {
143133 if ((err = mp_mod(U, t2N1, U)) != CRYPT_OK) { goto cleanup; }
144134 if ((err = mp_add(t2N1, U, q)) != CRYPT_OK) { goto cleanup; }
145135 if (!mp_isodd(q)) mp_add_d(q, 1, q);
146 err = mp_prime_is_prime_ex(q, mr_tests_q, &res, rng_helper, &rng);
136 err = mp_prime_is_prime_ex(q, mr_tests_q, &res, rand_helper, &rng);
147137 if (err != CRYPT_OK) { goto cleanup; }
148138 if (res == LTC_MP_YES) found_q = 1;
149139 }
172162 if ((err = mp_sub(X, p, p)) != CRYPT_OK) { goto cleanup; }
173163 if (mp_cmp(p, t2L1) != LTC_MP_LT) {
174164 /* p >= 2^(L-1) */
175 err = mp_prime_is_prime_ex(p, mr_tests_p, &res, rng_helper, &rng);
165 err = mp_prime_is_prime_ex(p, mr_tests_p, &res, rand_helper, &rng);
176166 if (err != CRYPT_OK) { goto cleanup; }
177167 if (res == LTC_MP_YES) found_p = 1;
178168 }