Commit 3fcf327e authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

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 bb845ee0)
parent 3f4742b4
Loading
Loading
Loading
Loading
+21 −6
Original line number Diff line number Diff line
@@ -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);