replace macros with functions
[openssl.git] / apps / dgst.c
index 47d1309b14c1f601d90806985db26c6a4e00078f..55ba869c696fc76802b69803c02c11f86281db1e 100644 (file)
@@ -100,6 +100,7 @@ int MAIN(int argc, char **argv)
        EVP_PKEY *sigkey = NULL;
        unsigned char *sigbuf = NULL;
        int siglen = 0;
+       char *passargin = NULL, *passin = NULL;
 #ifndef OPENSSL_NO_ENGINE
        char *engine=NULL;
 #endif
@@ -145,6 +146,12 @@ int MAIN(int argc, char **argv)
                        if (--argc < 1) break;
                        keyfile=*(++argv);
                        }
+               else if (!strcmp(*argv,"-passin"))
+                       {
+                       if (--argc < 1)
+                               break;
+                       passargin=*++argv;
+                       }
                else if (strcmp(*argv,"-verify") == 0)
                        {
                        if (--argc < 1) break;
@@ -173,6 +180,7 @@ int MAIN(int argc, char **argv)
                        {
                        if (--argc < 1) break;
                        engine= *(++argv);
+                       e = setup_engine(bio_err, engine, 0);
                        }
 #endif
                else if (strcmp(*argv,"-hex") == 0)
@@ -216,35 +224,53 @@ int MAIN(int argc, char **argv)
                BIO_printf(bio_err,"-engine e       use engine e, possibly a hardware device.\n");
 #endif
 
-               BIO_printf(bio_err,"-%3s to use the %s message digest algorithm (default)\n",
+               BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm (default)\n",
                        LN_md5,LN_md5);
-               BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
+               BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
                        LN_md4,LN_md4);
-               BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
+               BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
                        LN_md2,LN_md2);
-               BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
+#ifndef OPENSSL_NO_SHA
+               BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
                        LN_sha1,LN_sha1);
-               BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
-                       LN_sha,LN_sha);
-               BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
+#ifndef OPENSSL_NO_SHA256
+               BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
+                       LN_sha224,LN_sha224);
+               BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
+                       LN_sha256,LN_sha256);
+#endif
+#ifndef OPENSSL_NO_SHA512
+               BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
+                       LN_sha384,LN_sha384);
+               BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
+                       LN_sha512,LN_sha512);
+#endif
+#endif
+               BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
                        LN_mdc2,LN_mdc2);
-               BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
+               BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
                        LN_ripemd160,LN_ripemd160);
+#ifndef OPENSSL_NO_WHIRLPOOL
+               BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
+                       SN_whirlpool,SN_whirlpool);
+#endif
                err=1;
                goto end;
                }
 
-#ifndef OPENSSL_NO_ENGINE
-        e = setup_engine(bio_err, engine, 0);
-#endif
-
        in=BIO_new(BIO_s_file());
        bmd=BIO_new(BIO_f_md());
        if (debug)
                {
                BIO_set_callback(in,BIO_debug_callback);
                /* needed for windows 3.1 */
-               BIO_set_callback_arg(in,bio_err);
+               BIO_set_callback_arg(in,(char *)bio_err);
+               }
+
+       if(!app_passwd(bio_err, passargin, NULL, &passin, NULL))
+               {
+               BIO_printf(bio_err, "Error getting password\n");
+               goto end;
                }
 
        if ((in == NULL) || (bmd == NULL))
@@ -288,7 +314,7 @@ int MAIN(int argc, char **argv)
                        sigkey = load_pubkey(bio_err, keyfile, keyform, 0, NULL,
                                e, "key file");
                else
-                       sigkey = load_key(bio_err, keyfile, keyform, 0, NULL,
+                       sigkey = load_key(bio_err, keyfile, keyform, 0, passin,
                                e, "key file");
                if (!sigkey)
                        {
@@ -322,7 +348,13 @@ int MAIN(int argc, char **argv)
 
 
        /* we use md as a filter, reading from 'in' */
-       BIO_set_md(bmd,md);
+       if (!BIO_set_md(bmd,md))
+               {
+               BIO_printf(bio_err, "Error setting digest %s\n", pname);
+               ERR_print_errors(bio_err);
+               goto end;
+               }
+               
        inp=BIO_push(bmd,in);
 
        if (argc == 0)
@@ -347,8 +379,9 @@ int MAIN(int argc, char **argv)
                                }
                        if(!out_bin)
                                {
-                               tmp=tofree=OPENSSL_malloc(strlen(name)+strlen(argv[i])+5);
-                               sprintf(tmp,"%s(%s)= ",name,argv[i]);
+                               size_t len = strlen(name)+strlen(argv[i])+5;
+                               tmp=tofree=OPENSSL_malloc(len);
+                               BIO_snprintf(tmp,len,"%s(%s)= ",name,argv[i]);
                                }
                        else
                                tmp="";
@@ -368,6 +401,8 @@ end:
                OPENSSL_free(buf);
                }
        if (in != NULL) BIO_free(in);
+       if (passin)
+               OPENSSL_free(passin);
        BIO_free_all(out);
        EVP_PKEY_free(sigkey);
        if(sigbuf) OPENSSL_free(sigbuf);