X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=fips%2Frand%2Ffips_drbgvs.c;h=53d4439342ced245b95a3fabbc53111bd8dbbcc1;hp=a5992339080e96e5fd1d31d3121b00ed996460c7;hb=dad78514853f40bbb1cec87597a740b8fef06756;hpb=868f12988c7397fa6466a4fbc7269cd6de99ec1b diff --git a/fips/rand/fips_drbgvs.c b/fips/rand/fips_drbgvs.c index a599233908..53d4439342 100644 --- a/fips/rand/fips_drbgvs.c +++ b/fips/rand/fips_drbgvs.c @@ -60,7 +60,7 @@ int main(int argc, char **argv) { - printf("No FIPS GCM support\n"); + printf("No FIPS DRBG support\n"); return(0); } #else @@ -155,27 +155,54 @@ static size_t test_nonce(DRBG_CTX *dctx, unsigned char *out, int main(int argc,char **argv) { - DRBG_CTX *dctx; + FILE *in, *out; + DRBG_CTX *dctx = NULL; TEST_ENT t; - int r, nid; + int r, nid = 0; int pr = 0; char buf[2048], lbuf[2048]; - unsigned char out[2048]; + unsigned char randout[2048]; char *keyword = NULL, *value = NULL; unsigned char *ent = NULL, *nonce = NULL, *pers = NULL, *adin = NULL; long entlen, noncelen, perslen, adinlen; - int df; + int df = 0; - int outlen = 0; + int randoutlen = 0; int gen = 0; fips_set_error_print(); - - while (fgets(buf, sizeof(buf), stdin) != NULL) + + if (argc == 3) + { + in = fopen(argv[1], "r"); + if (!in) + { + fprintf(stderr, "Error opening input file\n"); + exit(1); + } + out = fopen(argv[2], "w"); + if (!out) + { + fprintf(stderr, "Error opening output file\n"); + exit(1); + } + } + else if (argc == 1) + { + in = stdin; + out = stdout; + } + else + { + fprintf(stderr,"%s (infile outfile)\n",argv[0]); + exit(1); + } + + while (fgets(buf, sizeof(buf), in) != NULL) { - fputs(buf, stdout); + fputs(buf, out); if (strlen(buf) > 4 && !strncmp(buf, "[SHA-", 5)) { nid = parse_md(buf); @@ -218,13 +245,13 @@ int main(int argc,char **argv) if (!strcmp(keyword, "PersonalizationString")) { pers = hex2bin_m(value, &perslen); - dctx = FIPS_drbg_new(nid, df); + dctx = FIPS_drbg_new(nid, df | DRBG_FLAG_TEST); if (!dctx) exit (1); - FIPS_drbg_set_test_mode(dctx, test_entropy, test_nonce); + FIPS_drbg_set_callbacks(dctx, test_entropy, test_nonce); FIPS_drbg_set_app_data(dctx, &t); - outlen = (int)FIPS_drbg_get_blocklength(dctx); - r = FIPS_drbg_instantiate(dctx, 0, pers, perslen); + randoutlen = (int)FIPS_drbg_get_blocklength(dctx); + r = FIPS_drbg_instantiate(dctx, pers, perslen); if (!r) { fprintf(stderr, "Error instantiating DRBG\n"); @@ -242,7 +269,7 @@ int main(int argc,char **argv) adin = hex2bin_m(value, &adinlen); if (pr) continue; - r = FIPS_drbg_generate(dctx, out, outlen, 0, + r = FIPS_drbg_generate(dctx, randout, randoutlen, 0, 0, adin, adinlen); if (!r) { @@ -263,8 +290,9 @@ int main(int argc,char **argv) ent = hex2bin_m(value, &entlen); t.ent = ent; t.entlen = entlen; - r = FIPS_drbg_generate(dctx, out, outlen, 1, - adin, adinlen); + r = FIPS_drbg_generate(dctx, + randout, randoutlen, + 0, 1, adin, adinlen); if (!r) { fprintf(stderr, @@ -293,7 +321,10 @@ int main(int argc,char **argv) } if (gen == 2) { - OutputValue("ReturnedBits", out, outlen, stdout, 0); + OutputValue("ReturnedBits", randout, randoutlen, + out, 0); + FIPS_drbg_free(dctx); + dctx = NULL; gen = 0; }