[openssl-users] EVP_MD_CTX and EVP_PKEY_CTX? How to init? How to free?

Matt Caswell matt at openssl.org
Sat Apr 29 23:33:33 UTC 2017



On 28/04/17 20:29, Blumenthal, Uri - 0553 - MITLL wrote:
> I’m playing with RSA-PSS signatures, and stumbled upon a few problems. I
> tried the OpenSSL manual pages, but still coming short of complete
> understanding. :-)
> 
>  
> 
> This is how I initialize the contexts (error handlers removed for brevity):
> 
>  
> 
>       ctx = EVP_PKEY_CTX_new(privkey, NULL);

Don't do this. Just set ctx to NULL.

> 
>       md_ctx = EVP_MD_CTX_create();
> 
>       const EVP_MD *md = EVP_sha256();
> 
>       rv = EVP_DigestInit_ex(md_ctx, md, NULL);
>
>       rv = EVP_DigestSignInit(md_ctx, &ctx, md, NULL, privkey);

ctx gets "filled in" by the EVP_DigestSignInit call.

> 
>  
> 
> First question: do I need EVP_DigestInit_ex() there?

No. It unnecessary.

> 
>  
> 
> Second question: do I have to specify hash-function (EVP_MD*) twice?
> First when initializing EVP_MD_CTX, and second for EVP_DigestSignInit()?
> 

No...don't call EVP_DigestInit_ex() at all.

>  
> 
> At the end I need to dispose of both ctx and md_ctx.

"ctx" is "owned" by md_ctx. Just free md_ctx and ctx also gets freed.


Matt


More information about the openssl-users mailing list