Use default md if none specified in dgst utility.
[openssl.git] / apps / dgst.c
index 9981ee1db5164fe923beeb5513064f31517213ac..deb829ae199be5641ad99538741515e3609e7317 100644 (file)
@@ -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,6 +479,13 @@ 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);