summaryrefslogtreecommitdiffstats
path: root/apps/dgst.c
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2010-03-05 13:28:21 +0000
committerDr. Stephen Henson <steve@openssl.org>2014-01-23 18:35:42 +0000
commit3fcf327e26f05b73f92e0e19946b888721945bc1 (patch)
treec653473b2741642a9fddce2315f8994a8834d0d2 /apps/dgst.c
parent3f4742b48c8ce2d1474bccf4c3df9152cfbc3040 (diff)
Add -engine_impl option to dgst which will use an implementation of
an algorithm from the supplied engine instead of just the default one. (cherry picked from commit bb845ee044587a91589357a772a02cffb0ba4454)
Diffstat (limited to 'apps/dgst.c')
-rw-r--r--apps/dgst.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/apps/dgst.c b/apps/dgst.c
index 81bd870f99..d471dbdabd 100644
--- a/apps/dgst.c
+++ b/apps/dgst.c
@@ -103,7 +103,7 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv)
{
- ENGINE *e = NULL;
+ ENGINE *e = NULL, *impl = NULL;
unsigned char *buf=NULL;
int i,err=1;
const EVP_MD *md=NULL,*m;
@@ -124,6 +124,7 @@ int MAIN(int argc, char **argv)
char *passargin = NULL, *passin = NULL;
#ifndef OPENSSL_NO_ENGINE
char *engine=NULL;
+ int engine_impl = 0;
#endif
char *hmac_key=NULL;
char *mac_name=NULL;
@@ -209,6 +210,8 @@ int MAIN(int argc, char **argv)
engine= *(++argv);
e = setup_engine(bio_err, engine, 0);
}
+ else if (strcmp(*argv,"-engine_impl") == 0)
+ engine_impl = 1;
#endif
else if (strcmp(*argv,"-hex") == 0)
out_bin = 0;
@@ -291,6 +294,11 @@ int MAIN(int argc, char **argv)
goto end;
}
+#ifndef OPENSSL_NO_ENGINE
+ if (engine_impl)
+ impl = e;
+#endif
+
in=BIO_new(BIO_s_file());
bmd=BIO_new(BIO_f_md());
if (debug)
@@ -368,7 +376,7 @@ int MAIN(int argc, char **argv)
{
EVP_PKEY_CTX *mac_ctx = NULL;
int r = 0;
- if (!init_gen_str(bio_err, &mac_ctx, mac_name,e, 0))
+ if (!init_gen_str(bio_err, &mac_ctx, mac_name, impl, 0))
goto mac_end;
if (macopts)
{
@@ -409,7 +417,7 @@ int MAIN(int argc, char **argv)
if (hmac_key)
{
- sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, e,
+ sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, impl,
(unsigned char *)hmac_key, -1);
if (!sigkey)
goto end;
@@ -427,9 +435,9 @@ int MAIN(int argc, char **argv)
goto end;
}
if (do_verify)
- r = EVP_DigestVerifyInit(mctx, &pctx, md, e, sigkey);
+ r = EVP_DigestVerifyInit(mctx, &pctx, md, impl, sigkey);
else
- r = EVP_DigestSignInit(mctx, &pctx, md, e, sigkey);
+ r = EVP_DigestSignInit(mctx, &pctx, md, impl, sigkey);
if (!r)
{
BIO_printf(bio_err, "Error setting context\n");
@@ -456,9 +464,16 @@ int MAIN(int argc, char **argv)
/* we use md as a filter, reading from 'in' */
else
{
+ EVP_MD_CTX *mctx = NULL;
+ if (!BIO_get_md_ctx(bmd, &mctx))
+ {
+ BIO_printf(bio_err, "Error getting context\n");
+ ERR_print_errors(bio_err);
+ goto end;
+ }
if (md == NULL)
md = EVP_md5();
- if (!BIO_set_md(bmd,md))
+ if (!EVP_DigestInit_ex(mctx, md, impl))
{
BIO_printf(bio_err, "Error setting digest %s\n", pname);
ERR_print_errors(bio_err);