X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=apps%2Fdgst.c;h=280f79b4a23abaf5f1c3029642763bdc5dd7536f;hp=4f1660c2a61c542f129de4a91542443d819bf47a;hb=e189872486477c2bb9b041cb00f4390ef4aa911b;hpb=92125ffaec1b9d68c5eebbcc62f0e71751f2b919 diff --git a/apps/dgst.c b/apps/dgst.c index 4f1660c2a6..280f79b4a2 100644 --- a/apps/dgst.c +++ b/apps/dgst.c @@ -66,7 +66,6 @@ #include #include #include -#include #undef BUFSIZE #define BUFSIZE 1024*8 @@ -74,8 +73,9 @@ #undef PROG #define PROG dgst_main -void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, - EVP_PKEY *key, unsigned char *sigin, int siglen); +int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, + EVP_PKEY *key, unsigned char *sigin, int siglen, const char *title, + const char *file); int MAIN(int, char **); @@ -89,8 +89,8 @@ int MAIN(int argc, char **argv) BIO *bmd=NULL; BIO *out = NULL; const char *name; -#define PROG_NAME_SIZE 16 - char pname[PROG_NAME_SIZE]; +#define PROG_NAME_SIZE 39 + char pname[PROG_NAME_SIZE+1]; int separator=0; int debug=0; int keyform=FORMAT_PEM; @@ -113,8 +113,11 @@ int MAIN(int argc, char **argv) if ((bio_err=BIO_new(BIO_s_file())) != NULL) BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); + if (!load_config(bio_err, NULL)) + goto end; + /* first check the program name */ - program_name(argv[0],pname,PROG_NAME_SIZE); + program_name(argv[0],pname,sizeof pname); md=EVP_get_digestbyname(pname); @@ -225,23 +228,7 @@ int MAIN(int argc, char **argv) goto end; } - if (engine != NULL) - { - if((e = ENGINE_by_id(engine)) == NULL) - { - BIO_printf(bio_err,"invalid engine \"%s\"\n", - engine); - goto end; - } - if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) - { - BIO_printf(bio_err,"can't use that engine\n"); - goto end; - } - BIO_printf(bio_err,"engine \"%s\" set.\n", engine); - /* Free our "structural" reference. */ - ENGINE_free(e); - } + e = setup_engine(bio_err, engine, 0); in=BIO_new(BIO_s_file()); bmd=BIO_new(BIO_f_md()); @@ -272,7 +259,7 @@ int MAIN(int argc, char **argv) else out = BIO_new_file(outfile, "w"); } else { out = BIO_new_fp(stdout, BIO_NOCLOSE); -#ifdef VMS +#ifdef OPENSSL_SYS_VMS { BIO *tmpbio = BIO_new(BIO_f_linebuffer()); out = BIO_push(tmpbio, out); @@ -289,52 +276,19 @@ int MAIN(int argc, char **argv) if(keyfile) { - if (keyform == FORMAT_PEM) - { - BIO *keybio; - keybio = BIO_new_file(keyfile, "r"); - if(!keybio) - { - BIO_printf(bio_err, - "Error opening key file %s\n", - keyfile); - ERR_print_errors(bio_err); - goto end; - } - if(want_pub) - sigkey = PEM_read_bio_PUBKEY(keybio, - NULL, NULL, NULL); - else - sigkey = PEM_read_bio_PrivateKey(keybio, - NULL, NULL, NULL); - BIO_free(keybio); - } - else if (keyform == FORMAT_ENGINE) - { - if (!e) - { - BIO_printf(bio_err,"no engine specified\n"); - goto end; - } - if (want_pub) - sigkey = ENGINE_load_public_key(e, keyfile, NULL); - else - sigkey = ENGINE_load_private_key(e, keyfile, NULL); - } + if (want_pub) + sigkey = load_pubkey(bio_err, keyfile, keyform, 0, NULL, + e, "key file"); else + sigkey = load_key(bio_err, keyfile, keyform, 0, NULL, + e, "key file"); + if (!sigkey) { - BIO_printf(bio_err, - "bad input format specified for key file\n"); + /* load_[pub]key() has already printed an appropriate + message */ goto end; } - - if(!sigkey) { - BIO_printf(bio_err, "Error reading key file %s\n", - keyfile); - ERR_print_errors(bio_err); - goto end; } - } if(sigfile && sigkey) { BIO *sigbio; @@ -366,29 +320,43 @@ int MAIN(int argc, char **argv) if (argc == 0) { BIO_set_fp(in,stdin,BIO_NOCLOSE); - do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf, siglen); + err=do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf, + siglen,"","(stdin)"); } else { name=OBJ_nid2sn(md->type); for (i=0; i 0) BIO_printf(out, "Verified OK\n"); - else if(i == 0) BIO_printf(out, "Verification Failure\n"); + if(i > 0) + BIO_printf(out, "Verified OK\n"); + else if(i == 0) + { + BIO_printf(out, "Verification Failure\n"); + return 1; + } else { BIO_printf(bio_err, "Error Verifying Data\n"); ERR_print_errors(bio_err); + return 1; } - return; + return 0; } if(key) { @@ -432,7 +414,7 @@ void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, { BIO_printf(bio_err, "Error Signing Data\n"); ERR_print_errors(bio_err); - return; + return 1; } } else @@ -441,6 +423,7 @@ void do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, if(binout) BIO_write(out, buf, len); else { + BIO_write(out,title,strlen(title)); for (i=0; i