X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=apps%2Fdgst.c;h=312d8804c389ee546af256a865a737bd0f59a730;hp=9981ee1db5164fe923beeb5513064f31517213ac;hb=e77dbf325f57cc86e6918baf36d597506e77266d;hpb=6ef18c21c9ce4b728774631b9dac8e6b4bf7c9e4 diff --git a/apps/dgst.c b/apps/dgst.c index 9981ee1db5..312d8804c3 100644 --- a/apps/dgst.c +++ b/apps/dgst.c @@ -75,7 +75,8 @@ #define PROG dgst_main 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, + EVP_PKEY *key, unsigned char *sigin, int siglen, + const char *sig_name, const char *md_name, const char *file,BIO *bmd); int MAIN(int, char **); @@ -89,7 +90,6 @@ int MAIN(int argc, char **argv) BIO *in=NULL,*inp; BIO *bmd=NULL; BIO *out = NULL; - const char *name; #define PROG_NAME_SIZE 39 char pname[PROG_NAME_SIZE+1]; int separator=0; @@ -231,8 +231,6 @@ int MAIN(int argc, char **argv) argv++; } - if (md == NULL) - md=EVP_md5(); if(do_verify && !sigfile) { BIO_printf(bio_err, "No signature to verify: use the -signature option\n"); @@ -412,13 +410,18 @@ int MAIN(int argc, char **argv) { EVP_MD_CTX *mctx = NULL; EVP_PKEY_CTX *pctx = NULL; + int r; if (!BIO_get_md_ctx(bmd, &mctx)) { BIO_printf(bio_err, "Error getting context\n"); ERR_print_errors(bio_err); goto end; } - if (!EVP_DigestSignInit(mctx, &pctx, md, e, sigkey)) + if (do_verify) + r = EVP_DigestVerifyInit(mctx, &pctx, md, e, sigkey); + else + r = EVP_DigestSignInit(mctx, &pctx, md, e, sigkey); + if (!r) { BIO_printf(bio_err, "Error setting context\n"); ERR_print_errors(bio_err); @@ -442,11 +445,16 @@ int MAIN(int argc, char **argv) } } /* we use md as a filter, reading from 'in' */ - else if (!BIO_set_md(bmd,md)) + else { - BIO_printf(bio_err, "Error setting digest %s\n", pname); - ERR_print_errors(bio_err); - goto end; + if (md == NULL) + md = EVP_md5(); + if (!BIO_set_md(bmd,md)) + { + BIO_printf(bio_err, "Error setting digest %s\n", pname); + ERR_print_errors(bio_err); + goto end; + } } if(sigfile && sigkey) { @@ -471,41 +479,53 @@ int MAIN(int argc, char **argv) } inp=BIO_push(bmd,in); + if (md == NULL) + { + EVP_MD_CTX *tctx; + BIO_get_md_ctx(bmd, &tctx); + md = EVP_MD_CTX_md(tctx); + } + if (argc == 0) { BIO_set_fp(in,stdin,BIO_NOCLOSE); err=do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf, - siglen,"","(stdin)",bmd); + siglen,NULL,NULL,"stdin",bmd); } else { - name=OBJ_nid2sn(md->type); + const char *md_name, *sig_name; + if(out_bin) + { + md_name = NULL; + sig_name = NULL; + } + else + { + if (sigkey) + { + const EVP_PKEY_ASN1_METHOD *ameth; + ameth = EVP_PKEY_get0_asn1(sigkey); + if (ameth) + EVP_PKEY_asn1_get0_info(NULL, NULL, + NULL, NULL, &sig_name, ameth); + } + md_name = EVP_MD_name(md); + } for (i=0; i