changes from 0.9.8
[openssl.git] / apps / dgst.c
index 30253149114186123e8159b811248a7d7bdc527f..c13535f3b21f59f4fc12ed8944c7b2ed9c10108d 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;
@@ -257,6 +264,12 @@ int MAIN(int argc, char **argv)
                BIO_set_callback_arg(in,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))
                {
                ERR_print_errors(bio_err);
@@ -298,7 +311,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)
                        {
@@ -385,6 +398,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);