<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta name=Title content=""><meta name=Keywords content=""><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:Arial;
panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Monaco;
panose-1:2 0 5 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:Calibri;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:Calibri;
color:windowtext;}
p.p1, li.p1, div.p1
{mso-style-name:p1;
margin:0in;
margin-bottom:.0001pt;
font-size:10.5pt;
font-family:Monaco;}
p.p2, li.p2, div.p2
{mso-style-name:p2;
margin:0in;
margin-bottom:.0001pt;
font-size:10.5pt;
font-family:Monaco;
color:#3933FF;}
p.p3, li.p3, div.p3
{mso-style-name:p3;
margin:0in;
margin-bottom:.0001pt;
font-size:10.5pt;
font-family:Monaco;}
p.p4, li.p4, div.p4
{mso-style-name:p4;
margin:0in;
margin-bottom:.0001pt;
font-size:10.5pt;
font-family:Monaco;
color:#793D93;}
span.s1
{mso-style-name:s1;
color:#793D93;}
span.s2
{mso-style-name:s2;
color:#931A68;}
span.s3
{mso-style-name:s3;
color:black;}
span.s4
{mso-style-name:s4;
text-decoration:underline;}
span.s5
{mso-style-name:s5;
color:#006141;}
span.apple-tab-span
{mso-style-name:apple-tab-span;}
span.msoIns
{mso-style-type:export-only;
mso-style-name:"";
text-decoration:underline;
color:teal;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:Calibri;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style></head><body bgcolor=white lang=EN-US link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>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. :-)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is how I initialize the contexts (error handlers removed for brevity):<o:p></o:p></p><p class=p1><span class=apple-tab-span><o:p> </o:p></span></p><p class=p1><span class=apple-tab-span> </span>ctx = <span class=s1>EVP_PKEY_CTX_new</span>(privkey, NULL);<o:p></o:p></p><p class=p4><span class=apple-tab-span> </span><span class=s3>md_ctx = </span>EVP_MD_CTX_create<span class=s3>();</span><o:p></o:p></p><p class=p1><span class=apple-tab-span> </span><span class=s2>const</span> <span class=s5>EVP_MD</span> *md = <span class=s1>EVP_sha256</span>();<o:p></o:p></p><p class=p1><span class=apple-tab-span> </span>rv = <span class=s1>EVP_DigestInit_ex</span>(md_ctx, md, NULL);<o:p></o:p></p><p class=p1><span class=apple-tab-span> </span>rv = <span class=s1>EVP_DigestSignInit</span>(md_ctx, &ctx, md, NULL, privkey);<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>First question: do I need <span style='font-family:Monaco'>EVP_DigestInit_ex()</span> there?<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Second question: do I have to specify hash-function (<span style='font-family:Monaco'>EVP_MD*</span>) twice? First when initializing <span style='font-family:Monaco'>EVP_MD_CTX</span>, and second for <span style='font-family:Monaco'>EVP_DigestSignInit()</span>?<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>At the end I need to dispose of both <span style='font-family:Monaco'>ctx</span> and <span style='font-family:Monaco'>md_ctx</span>. That leads to my third question/problem. The code I tried (based on what the man page says: to avoid memory leak, I need to do <span style='font-family:Monaco'>EVP_MD_CTX_destroy(md_ctx)</span> crashes with SIGV:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:Monaco;color:black'> </span><span style='font-size:10.5pt;font-family:Monaco;color:#793D93'>EVP_MD_CTX_destroy</span><span style='font-size:10.5pt;font-family:Monaco;color:black'>(md_ctx); // this succeeds</span><span style='font-size:10.5pt;font-family:Monaco;color:#793D93'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:Monaco;color:black'> </span><span style='font-size:10.5pt;font-family:Monaco;color:#793D93'>EVP_PKEY_CTX_free</span><span style='font-size:10.5pt;font-family:Monaco;color:black'>(ctx); // but here the code crashes</span><span style='font-size:10.5pt;font-family:Monaco;color:#793D93'><o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Same happens when I reverse the above order:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:Monaco;color:black'> </span><span style='font-size:10.5pt;font-family:Monaco;color:#793D93'>EVP_PKEY_CTX_free</span><span style='font-size:10.5pt;font-family:Monaco;color:black'>(ctx); // this succeeds</span><span style='font-size:10.5pt;font-family:Monaco;color:#793D93'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:Monaco;color:black'> </span><span style='font-size:10.5pt;font-family:Monaco;color:#793D93'>EVP_MD_CTX_destroy</span><span style='font-size:10.5pt;font-family:Monaco;color:black'>(md_ctx); // but then this one causes crash</span><span style='font-size:10.5pt;font-family:Monaco;color:#793D93'><o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>So what’s the correct way of freeing both of them? Or is it that because they’re sort of “bound together” by <span class=s1>EVP_DigestSignInit</span>(md_ctx, &ctx, md, NULL, privkey); freeing one frees the other?</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks!<o:p></o:p></p><p class=MsoNormal><span style='font-size:10.5pt;color:black'>— <o:p></o:p></span></p><div><p class=MsoNormal><span style='font-size:10.5pt;color:black'>Regards,<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.5pt;color:black'>Uri<o:p></o:p></span></p></div><p class=MsoNormal><o:p> </o:p></p></div></body></html>