X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=fips%2Frand%2Ffips_drbgvs.c;h=4d3f0cfee0077871d697ff02b797717da9ab3b15;hp=b0e431d38f283706151fb2200858c5a30eb925b7;hb=af4bfa151c27d70c94272e3ae53b8a50d648b81d;hpb=20f12e63ff3fb9ed04f99039605a449b3137847b diff --git a/fips/rand/fips_drbgvs.c b/fips/rand/fips_drbgvs.c index b0e431d38f..4d3f0cfee0 100644 --- a/fips/rand/fips_drbgvs.c +++ b/fips/rand/fips_drbgvs.c @@ -100,6 +100,27 @@ static int parse_md(char *str) return NID_undef; } +static int parse_ec(char *str) + { + int curve_nid, md_nid; + char *md; + md = strchr(str, ' '); + if (!md) + return NID_undef; + if (!strncmp(str, "[P-256", 6)) + curve_nid = NID_X9_62_prime256v1; + else if (!strncmp(str, "[P-384", 6)) + curve_nid = NID_secp384r1; + else if (!strncmp(str, "[P-521", 6)) + curve_nid = NID_secp521r1; + else + return NID_undef; + md_nid = parse_md(md); + if (md_nid == NID_undef) + return NID_undef; + return (curve_nid << 16) | md_nid; + } + static int parse_aes(char *str, int *pdf) { @@ -257,6 +278,12 @@ int main(int argc,char **argv) if (nid == NID_undef) exit(1); } + if (strlen(buf) > 12 && !strncmp(buf, "[P-", 3)) + { + nid = parse_ec(buf); + if (nid == NID_undef) + exit(1); + } if (!parse_line(&keyword, &value, lbuf, buf)) continue; @@ -287,6 +314,11 @@ int main(int argc,char **argv) if (!strcmp(keyword, "PersonalizationString")) { pers = hex2bin_m(value, &perslen); + if (nid == 0) + { + fprintf(stderr, "DRBG type not recognised!\n"); + exit (1); + } dctx = FIPS_drbg_new(nid, df | DRBG_FLAG_TEST); if (!dctx) exit (1); @@ -312,7 +344,7 @@ int main(int argc,char **argv) adin = hex2bin_m(value, &adinlen); if (pr) continue; - r = FIPS_drbg_generate(dctx, randout, randoutlen, 0, 0, + r = FIPS_drbg_generate(dctx, randout, randoutlen, 0, adin, adinlen); if (!r) { @@ -335,7 +367,7 @@ int main(int argc,char **argv) t.entlen = entlen; r = FIPS_drbg_generate(dctx, randout, randoutlen, - 0, 1, adin, adinlen); + 1, adin, adinlen); if (!r) { fprintf(stderr,