Codebase list libcryptx-perl / 9cbfb68
tuning DSA key generation Karel Miko 10 years ago
1 changed file(s) with 5 addition(s) and 8 deletion(s). Raw diff Collapse all Expand all
2828 int dsa_make_key(prng_state *prng, int wprng, int group_size, int modulus_size, dsa_key *key)
2929 {
3030 void *tmp, *tmp2;
31 int err, res, q_size;
31 int err, res, qbits;
3232 unsigned char *buf;
3333
3434 LTC_ARGCHK(key != NULL);
103103 /* so now we have our DH structure, generator g, order q, modulus p
104104 Now we need a random exponent [mod q] and it's power g^x mod p
105105 */
106 q_size = mp_unsigned_bin_size(key->q);
106 qbits = mp_count_bits(key->q);
107107 do {
108 if (prng_descriptor[wprng].read(buf, q_size, prng) != (unsigned long)q_size) {
109 err = CRYPT_ERROR_READPRNG;
110 goto error;
111 }
112 if ((err = mp_read_unsigned_bin(key->x, buf, q_size)) != CRYPT_OK) { goto error; }
113 } while (mp_cmp_d(key->x, 1) != LTC_MP_GT || mp_cmp(key->x, key->q) != LTC_MP_LT);
108 if ((err = rand_bn_bits(key->x, qbits, prng, wprng)) != CRYPT_OK) { goto error; }
109 /* private key x should be from range: 1 <= x <= q-1 */
110 } while (mp_cmp_d(key->x, 0) != LTC_MP_GT || mp_cmp(key->x, key->q) != LTC_MP_LT);
114111 if ((err = mp_exptmod(key->g, key->x, key->p, key->y)) != CRYPT_OK) { goto error; }
115112
116113 key->type = PK_PRIVATE;