The unified diff between revisions [d0935a5d..] and [e0686662..] is displayed below. It can also be downloaded as a raw diff.
This diff has been restricted to the following files: 'gendss.c'
#
#
# patch "gendss.c"
# from [b44a5aee6a454aa841f650ba0c3b79ff791725c3]
# to [e74baeb5db4ddfbcc8b5f45c0b0deb8b16c45ef7]
#
============================================================
--- gendss.c b44a5aee6a454aa841f650ba0c3b79ff791725c3
+++ gendss.c e74baeb5db4ddfbcc8b5f45c0b0deb8b16c45ef7
@@ -77,10 +77,7 @@ static void getq(dss_key *key) {
buf[0] |= 0x80; /* top bit high */
buf[QSIZE-1] |= 0x01; /* bottom bit high */
- if (mp_read_unsigned_bin(key->q, buf, QSIZE) != MP_OKAY) {
- fprintf(stderr, "dss key generation failed\n");
- exit(1);
- }
+ bytes_to_mp(key->q, buf, QSIZE);
/* 18 rounds are required according to HAC */
if (mp_prime_next_prime(key->q, 18, 0) != MP_OKAY) {
@@ -116,10 +113,7 @@ static void getp(dss_key *key, unsigned
buf[0] |= 0x80; /* set the top bit high */
/* X is a random mp_int */
- if (mp_read_unsigned_bin(&tempX, buf, size) != MP_OKAY) {
- fprintf(stderr, "dss key generation failed\n");
- exit(1);
- }
+ bytes_to_mp(&tempX, buf, size);
/* C = X mod 2q */
if (mp_mod(&tempX, &temp2q, &tempC) != MP_OKAY) {
@@ -147,6 +141,7 @@ static void getp(dss_key *key, unsigned
} while (!result);
mp_clear_multi(&tempX, &tempC, &tempP, &temp2q, NULL);
+ m_burn(buf, size);
m_free(buf);
}
@@ -189,22 +184,7 @@ static void getx(dss_key *key) {
static void getx(dss_key *key) {
- DEF_MP_INT(val);
- char buf[QSIZE];
-
- m_mp_init(&val);
-
- do {
- genrandom(buf, QSIZE);
-
- if (mp_read_unsigned_bin(&val, buf, QSIZE) != MP_OKAY) {
- fprintf(stderr, "dss key generation failed\n");
- }
- } while ((mp_cmp_d(&val, 1) == MP_GT) && (mp_cmp(&val, key->q) == MP_LT));
-
- mp_copy(&val, key->x);
- mp_clear(&val);
-
+ gen_random_mpint(key->q, key->x);
}
static void gety(dss_key *key) {