Hi,

The attached patch teaches "openssl dgst" to print the digest type
when (argc == 0), just like it already does for argc > 0.  Noticed
while examining proposed code in "guilt" to parse 'openssl dgst'
output on Mac OS X.

Current behavior:

        $ openssl dgst -sha1 /dev/null
        SHA1(/dev/null)= da39a3ee5e6b4b0d3255bfef95601890afd80709
        $ openssl dgst -sha1 </dev/null
        (stdin)= da39a3ee5e6b4b0d3255bfef95601890afd80709
        $ openssl dgst </dev/null
        (stdin)= d41d8cd98f00b204e9800998ecf8427e

Corrected behavior:

        $ apps/openssl dgst -sha1 /dev/null
        SHA1(/dev/null)= da39a3ee5e6b4b0d3255bfef95601890afd80709
        $ apps/openssl dgst -sha1 </dev/null
        SHA1(stdin)= da39a3ee5e6b4b0d3255bfef95601890afd80709
        $ apps/openssl dgst </dev/null
        MD5(stdin)= d41d8cd98f00b204e9800998ecf8427e

If there is anything I can do to make this easier to review or apply,
just ask.

Thanks,
Jonathan

From: Jonathan Nieder <[email protected]>
Date: Wed, 23 Jan 2013 17:46:31 -0800
Subject: dgst: Prepend digest type when reading from stdin, too

Teach "openssl dgst" to print the digest type when (argc == 0), just
like it already does for argc > 0.  Noticed while examining proposed
code in "guilt" to parse 'openssl dgst' output on Mac OS X.

Current behavior:

        $ openssl dgst -sha1 /dev/null
        SHA1(/dev/null)= da39a3ee5e6b4b0d3255bfef95601890afd80709
        $ openssl dgst -sha1 </dev/null
        (stdin)= da39a3ee5e6b4b0d3255bfef95601890afd80709
        $ openssl dgst </dev/null
        (stdin)= d41d8cd98f00b204e9800998ecf8427e

Corrected behavior: 
        $ apps/openssl dgst -sha1 /dev/null
        SHA1(/dev/null)= da39a3ee5e6b4b0d3255bfef95601890afd80709
        $ apps/openssl dgst -sha1 </dev/null
        SHA1(stdin)= da39a3ee5e6b4b0d3255bfef95601890afd80709
        $ apps/openssl dgst </dev/null
        MD5(stdin)= d41d8cd98f00b204e9800998ecf8427e
---
 apps/dgst.c | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/apps/dgst.c b/apps/dgst.c
index d471dbd..2e5340a 100644
--- a/apps/dgst.c
+++ b/apps/dgst.c
@@ -107,6 +107,7 @@ int MAIN(int argc, char **argv)
        unsigned char *buf=NULL;
        int i,err=1;
        const EVP_MD *md=NULL,*m;
+       const char *md_name=NULL;
        BIO *in=NULL,*inp;
        BIO *bmd=NULL;
        BIO *out = NULL;
@@ -121,6 +122,7 @@ int MAIN(int argc, char **argv)
        EVP_PKEY *sigkey = NULL;
        unsigned char *sigbuf = NULL;
        int siglen = 0;
+       const char *sig_name = NULL;
        char *passargin = NULL, *passin = NULL;
 #ifndef OPENSSL_NO_ENGINE
        char *engine=NULL;
@@ -510,27 +512,27 @@ int MAIN(int argc, char **argv)
                md = EVP_MD_CTX_md(tctx);
                }
 
+       if(!out_bin)
+               {
+               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);
+               }
+
        if (argc == 0)
                {
                BIO_set_fp(in,stdin,BIO_NOCLOSE);
                err=do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf,
-                         siglen,NULL,NULL,"stdin",bmd);
+                         siglen,sig_name,md_name,"stdin",bmd);
                }
        else
                {
-               const char *md_name = NULL, *sig_name = NULL;
-               if(!out_bin)
-                       {
-                       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);
-                       }
                err = 0;
                for (i=0; i<argc; i++)
                        {
-- 
1.8.1

Reply via email to