EVPerr(EVP_F_EVP_MD_CTX_COPY,EVP_R_INPUT_NOT_INITIALIZED);
EVPerr(EVP_F_EVP_MD_CTX_COPY_EX,EVP_R_INPUT_NOT_INITIALIZED);
int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in)	{	unsigned char *tmp_buf;	if ((in == NULL) || (in->digest == NULL))		{		EVPerr(EVP_F_EVP_MD_CTX_COPY,EVP_R_INPUT_NOT_INITIALIZED);		return 0;		}#ifndef OPENSSL_NO_ENGINE	/* Make sure it's safe to copy a digest context using an ENGINE */	if (in->engine && !ENGINE_init(in->engine))		{		EVPerr(EVP_F_EVP_MD_CTX_COPY,ERR_R_ENGINE_LIB);		return 0;		}#endif	if (out->digest == in->digest)		{		tmp_buf = out->md_data;	    	EVP_MD_CTX_set_flags(out,EVP_MD_CTX_FLAG_REUSE);		}	else tmp_buf = NULL;	EVP_MD_CTX_cleanup(out);	memcpy(out,in,sizeof *out);	if (out->digest->ctx_size)		{		if (tmp_buf) out->md_data = tmp_buf;		else out->md_data=OPENSSL_malloc(out->digest->ctx_size);		memcpy(out->md_data,in->md_data,out->digest->ctx_size);		}	if (out->digest->copy)		return out->digest->copy(out,in);		return 1;	}