summaryrefslogtreecommitdiff
path: root/src/ltc/pk/dsa/dsa_generate_pqg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ltc/pk/dsa/dsa_generate_pqg.c')
-rw-r--r--src/ltc/pk/dsa/dsa_generate_pqg.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/ltc/pk/dsa/dsa_generate_pqg.c b/src/ltc/pk/dsa/dsa_generate_pqg.c
index af1b2023..a2d54382 100644
--- a/src/ltc/pk/dsa/dsa_generate_pqg.c
+++ b/src/ltc/pk/dsa/dsa_generate_pqg.c
@@ -26,9 +26,10 @@ static int s_dsa_make_params(prng_state *prng, int wprng, int group_size, int mo
int err, res, mr_tests_q, mr_tests_p, found_p, found_q, hash;
unsigned char *wbuf, *sbuf, digest[MAXBLOCKSIZE];
void *t2L1, *t2N1, *t2q, *t2seedlen, *U, *W, *X, *c, *h, *e, *seedinc;
+ const char *accepted_hashes[] = { "sha3-512", "sha512", "sha3-384", "sha384", "sha3-256", "sha256" };
/* check size */
- if (group_size >= LTC_MDSA_MAX_GROUP || group_size < 1 || group_size >= modulus_size) {
+ if (group_size > LTC_MDSA_MAX_GROUP || group_size < 1 || group_size >= modulus_size || modulus_size > LTC_MDSA_MAX_MODULUS) {
return CRYPT_INVALID_ARG;
}
@@ -87,16 +88,15 @@ static int s_dsa_make_params(prng_state *prng, int wprng, int group_size, int mo
else { mr_tests_q = 64; }
#endif
- if (N <= 256) {
- hash = register_hash(&sha256_desc);
+ hash = -1;
+ for (i = 0; i < sizeof(accepted_hashes)/sizeof(accepted_hashes[0]); ++i) {
+ hash = find_hash(accepted_hashes[i]);
+ if (hash != -1) break;
}
- else if (N <= 384) {
- hash = register_hash(&sha384_desc);
+ if (hash == -1) {
+ return CRYPT_INVALID_ARG; /* no appropriate hash function found */
}
- else if (N <= 512) {
- hash = register_hash(&sha512_desc);
- }
- else {
+ if (N > hash_descriptor[hash].hashsize * 8) {
return CRYPT_INVALID_ARG; /* group_size too big */
}