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