diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2011-02-02 17:48:03 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2011-02-02 17:48:03 +0000 |
commit | ee9884654b976386015533766a77e74c414871f5 (patch) | |
tree | 6335c88de2593329e2d7724b46f5fd7c1bcd87f1 /fips/dsa | |
parent | 5f885f1ea4f2d7e1c0fa15431af722541653ddb9 (diff) |
Cope with new DSA2 file format where some p/q only tests are made.
Diffstat (limited to 'fips/dsa')
-rw-r--r-- | fips/dsa/fips_dssvs.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/fips/dsa/fips_dssvs.c b/fips/dsa/fips_dssvs.c index b9e0f8d0e9..a3261af6c4 100644 --- a/fips/dsa/fips_dssvs.c +++ b/fips/dsa/fips_dssvs.c @@ -212,7 +212,7 @@ static void pqgver() int counter, counter2; unsigned long h, h2; DSA *dsa=NULL; - int dsa2, L, N; + int dsa2, L, N, part_test = 0; const EVP_MD *md = NULL; int seedlen; unsigned char seed[1024]; @@ -221,6 +221,11 @@ static void pqgver() { if (!parse_line(&keyword, &value, lbuf, buf)) { + if (p && q) + { + part_test = 1; + goto partial; + } fputs(buf,stdout); continue; } @@ -250,10 +255,12 @@ static void pqgver() } else if(!strcmp(keyword,"c")) counter =atoi(buf+4); - else if(!strcmp(keyword,"H")) + partial: + if(!strcmp(keyword,"H") || part_test) { - h = atoi(value); - if (!p || !q || !g) + if (!part_test) + h = atoi(value); + if (!p || !q || (!g && !part_test)) { fprintf(stderr, "Parse Error\n"); exit (1); @@ -273,8 +280,9 @@ static void pqgver() fprintf(stderr, "Parameter Generation error\n"); exit(1); } - if (BN_cmp(dsa->p, p) || BN_cmp(dsa->q, q) || BN_cmp(dsa->g, g) - || (counter != counter2) || (h != h2)) + if (BN_cmp(dsa->p, p) || BN_cmp(dsa->q, q) || + (!part_test && + ((BN_cmp(dsa->g, g) || (counter != counter2) || (h != h2))))) printf("Result = F\n"); else printf("Result = P\n"); @@ -286,6 +294,11 @@ static void pqgver() g = NULL; FIPS_dsa_free(dsa); dsa = NULL; + if (part_test) + { + fputs(buf,stdout); + part_test = 0; + } } } } |