<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <meta http-equiv="cache-control" content="no-cache"> <title>Genivia - smdevp.c File Reference</title> <link href="genivia_tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="genivia_content.css" rel="stylesheet" type="text/css"> </head> <body> <div id="top"> <div id="titlearea"> <table height="72px" width="100%" cellspacing="0" cellpadding="0"> <tbody> <tr> <td width="10%"> </td> <td width="175px"><a href="https://www.genivia.com"><img alt="Genivia" src="GeniviaLogo2_trans_noslogan.png"/></a></td> <td class="tab_home"><a href="https://www.genivia.com">Home</a></td> <td class="tab_home"><a href="https://www.genivia.com/docs.html">Documentation</a></td> <td> <div style="float: right; font-size: 18px; font-weight: bold;">smdevp.c File Reference</div> <br> <div style="float: right; font-size: 10px;">updated Sun Jul 9 2017 by Robert van Engelen</div> </td> <td width="10%"> </td> </tr> </tbody> </table> </div> <!-- Generated by Doxygen 1.8.11 --> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="dir_b4c3aec6cd8f28418150dce663061cfa.html">plugin</a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="summary"> <a href="#func-members">Functions</a> </div> <div class="headertitle"> <div class="title">smdevp.c File Reference</div> </div> </div><!--header--> <div class="contents"> <div class="textblock"><code>#include "<a class="el" href="smdevp_8h.html">smdevp.h</a>"</code><br /> </div><div class="textblock"><div class="dynheader"> Include dependency graph for smdevp.c:</div> <div class="dyncontent"> <div class="center"><img src="smdevp_8c__incl.png" border="0" usemap="#smdevp_8c" alt=""/></div> <map name="smdevp_8c" id="smdevp_8c"> <area shape="rect" id="node3" href="smdevp_8h.html" title="smdevp.h" alt="" coords="194,83,272,111"/> </map> </div> </div><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> Functions</h2></td></tr> <tr class="memitem:ad3a09ffe1e20e36549c841ae7bad1230"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="smdevp_8c.html#ad3a09ffe1e20e36549c841ae7bad1230">soap_smd_send</a> (struct soap *soap, const char *buf, size_t len)</td></tr> <tr class="memdesc:ad3a09ffe1e20e36549c841ae7bad1230"><td class="mdescLeft"> </td><td class="mdescRight">Callback to intercept messages for digest or signature computation/verification. <a href="#ad3a09ffe1e20e36549c841ae7bad1230">More...</a><br /></td></tr> <tr class="separator:ad3a09ffe1e20e36549c841ae7bad1230"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a0048138cdff0c019be36fbbb74eb4964"><td class="memItemLeft" align="right" valign="top">static size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="smdevp_8c.html#a0048138cdff0c019be36fbbb74eb4964">soap_smd_recv</a> (struct soap *soap, char *buf, size_t len)</td></tr> <tr class="memdesc:a0048138cdff0c019be36fbbb74eb4964"><td class="mdescLeft"> </td><td class="mdescRight">Callback to intercept messages for digest or signature computation/verification. <a href="#a0048138cdff0c019be36fbbb74eb4964">More...</a><br /></td></tr> <tr class="separator:a0048138cdff0c019be36fbbb74eb4964"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a89e6e669161a3023489f7d2a4b154ea8"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="smdevp_8c.html#a89e6e669161a3023489f7d2a4b154ea8">soap_smd_check</a> (struct soap *soap, struct <a class="el" href="structsoap__smd__data.html">soap_smd_data</a> *data, int err, const char *msg)</td></tr> <tr class="memdesc:a89e6e669161a3023489f7d2a4b154ea8"><td class="mdescLeft"> </td><td class="mdescRight">Check result of init/update/final smdevp engine operations. <a href="#a89e6e669161a3023489f7d2a4b154ea8">More...</a><br /></td></tr> <tr class="separator:a89e6e669161a3023489f7d2a4b154ea8"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a19c0648b6e89d1810beac191731989f6"><td class="memItemLeft" align="right" valign="top">SOAP_FMAC1 size_t SOAP_FMAC2 </td><td class="memItemRight" valign="bottom"><a class="el" href="smdevp_8c.html#a19c0648b6e89d1810beac191731989f6">soap_smd_size</a> (int alg, const void *key)</td></tr> <tr class="memdesc:a19c0648b6e89d1810beac191731989f6"><td class="mdescLeft"> </td><td class="mdescRight">Returns the number of octets needed to store the digest or signature returned by soap_smd_end. <a href="#a19c0648b6e89d1810beac191731989f6">More...</a><br /></td></tr> <tr class="separator:a19c0648b6e89d1810beac191731989f6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a9a4c5b08a2b82b71cec93e7ceddb20ae"><td class="memItemLeft" align="right" valign="top">SOAP_FMAC1 int SOAP_FMAC2 </td><td class="memItemRight" valign="bottom"><a class="el" href="smdevp_8c.html#a9a4c5b08a2b82b71cec93e7ceddb20ae">soap_smd_begin</a> (struct soap *soap, int alg, const void *key, int keylen)</td></tr> <tr class="memdesc:a9a4c5b08a2b82b71cec93e7ceddb20ae"><td class="mdescLeft"> </td><td class="mdescRight">Initiates a digest or signature computation. <a href="#a9a4c5b08a2b82b71cec93e7ceddb20ae">More...</a><br /></td></tr> <tr class="separator:a9a4c5b08a2b82b71cec93e7ceddb20ae"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a0f3003d09b3e2d141c9d04b9e302adde"><td class="memItemLeft" align="right" valign="top">SOAP_FMAC1 int SOAP_FMAC2 </td><td class="memItemRight" valign="bottom"><a class="el" href="smdevp_8c.html#a0f3003d09b3e2d141c9d04b9e302adde">soap_smd_end</a> (struct soap *soap, char *buf, int *len)</td></tr> <tr class="memdesc:a0f3003d09b3e2d141c9d04b9e302adde"><td class="mdescLeft"> </td><td class="mdescRight">Completes a digest or signature computation. Also deallocates temporary storage allocated by <a class="el" href="smdevp_8c.html#a9a4c5b08a2b82b71cec93e7ceddb20ae" title="Initiates a digest or signature computation. ">soap_smd_begin()</a>, so MUST be called after <a class="el" href="smdevp_8c.html#a9a4c5b08a2b82b71cec93e7ceddb20ae" title="Initiates a digest or signature computation. ">soap_smd_begin()</a>. <a href="#a0f3003d09b3e2d141c9d04b9e302adde">More...</a><br /></td></tr> <tr class="separator:a0f3003d09b3e2d141c9d04b9e302adde"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a541d1b8b574a198bfa6fc06058c5923c"><td class="memItemLeft" align="right" valign="top">SOAP_FMAC1 int SOAP_FMAC2 </td><td class="memItemRight" valign="bottom"><a class="el" href="smdevp_8c.html#a541d1b8b574a198bfa6fc06058c5923c">soap_smd_init</a> (struct soap *soap, struct <a class="el" href="structsoap__smd__data.html">soap_smd_data</a> *data, int alg, const void *key, int keylen)</td></tr> <tr class="memdesc:a541d1b8b574a198bfa6fc06058c5923c"><td class="mdescLeft"> </td><td class="mdescRight">Initiates a (signed) digest computation. <a href="#a541d1b8b574a198bfa6fc06058c5923c">More...</a><br /></td></tr> <tr class="separator:a541d1b8b574a198bfa6fc06058c5923c"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a360fb1000a8dae32937075f300eb89d1"><td class="memItemLeft" align="right" valign="top">SOAP_FMAC1 int SOAP_FMAC2 </td><td class="memItemRight" valign="bottom"><a class="el" href="smdevp_8c.html#a360fb1000a8dae32937075f300eb89d1">soap_smd_update</a> (struct soap *soap, struct <a class="el" href="structsoap__smd__data.html">soap_smd_data</a> *data, const char *buf, size_t len)</td></tr> <tr class="memdesc:a360fb1000a8dae32937075f300eb89d1"><td class="mdescLeft"> </td><td class="mdescRight">Updates (signed) digest computation with message part. <a href="#a360fb1000a8dae32937075f300eb89d1">More...</a><br /></td></tr> <tr class="separator:a360fb1000a8dae32937075f300eb89d1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab0ebb72766060a46872b2a337b209556"><td class="memItemLeft" align="right" valign="top">SOAP_FMAC1 int SOAP_FMAC2 </td><td class="memItemRight" valign="bottom"><a class="el" href="smdevp_8c.html#ab0ebb72766060a46872b2a337b209556">soap_smd_final</a> (struct soap *soap, struct <a class="el" href="structsoap__smd__data.html">soap_smd_data</a> *data, char *buf, int *len)</td></tr> <tr class="memdesc:ab0ebb72766060a46872b2a337b209556"><td class="mdescLeft"> </td><td class="mdescRight">Finalizes (signed) digest computation and returns digest or signature. <a href="#ab0ebb72766060a46872b2a337b209556">More...</a><br /></td></tr> <tr class="separator:ab0ebb72766060a46872b2a337b209556"><td class="memSeparator" colspan="2"> </td></tr> </table> <h2 class="groupheader">Function Documentation</h2> <a class="anchor" id="a9a4c5b08a2b82b71cec93e7ceddb20ae"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">SOAP_FMAC1 int SOAP_FMAC2 soap_smd_begin </td> <td>(</td> <td class="paramtype">struct soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>alg</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const void * </td> <td class="paramname"><em>key</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>keylen</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Initiates a digest or signature computation. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramdir"></td><td class="paramname">soap</td><td>context </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">alg</td><td>is the digest or signature (sign/verification) algorithm used </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">key</td><td>is a HMAC key or pointer to EVP_PKEY object or NULL for digests </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">keylen</td><td>is the length of the HMAC key or 0 </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>SOAP_OK, SOAP_EOM, or SOAP_SSL_ERROR </dd></dl> </div> </div> <a class="anchor" id="a89e6e669161a3023489f7d2a4b154ea8"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static int soap_smd_check </td> <td>(</td> <td class="paramtype">struct soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct <a class="el" href="structsoap__smd__data.html">soap_smd_data</a> * </td> <td class="paramname"><em>data</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>ok</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>msg</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Check result of init/update/final smdevp engine operations. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramdir"></td><td class="paramname">soap</td><td>context </td></tr> <tr><td class="paramdir">[in,out]</td><td class="paramname">data</td><td>smdevp engine context </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">ok</td><td>EVP error value </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">msg</td><td>error message </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>SOAP_OK or SOAP_SSL_ERROR </dd></dl> </div> </div> <a class="anchor" id="a0f3003d09b3e2d141c9d04b9e302adde"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">SOAP_FMAC1 int SOAP_FMAC2 soap_smd_end </td> <td>(</td> <td class="paramtype">struct soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">char * </td> <td class="paramname"><em>buf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int * </td> <td class="paramname"><em>len</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Completes a digest or signature computation. Also deallocates temporary storage allocated by <a class="el" href="smdevp_8c.html#a9a4c5b08a2b82b71cec93e7ceddb20ae" title="Initiates a digest or signature computation. ">soap_smd_begin()</a>, so MUST be called after <a class="el" href="smdevp_8c.html#a9a4c5b08a2b82b71cec93e7ceddb20ae" title="Initiates a digest or signature computation. ">soap_smd_begin()</a>. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramdir"></td><td class="paramname">soap</td><td>context </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">buf</td><td>contains signature for verification (when using a SOAP_SMD_VRFY algorithm) or NULL for cleanup </td></tr> <tr><td class="paramdir">[out]</td><td class="paramname">buf</td><td>is populated with the digest or signature with maximum length soap_smd_size(alg, key) </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>points to length of signature to verify (when using a SOAP_SMD_VRFY algorithm) or NULL for cleanup </td></tr> <tr><td class="paramdir">[out]</td><td class="paramname">len</td><td>points to length of stored digest or signature (when not NULL) </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>SOAP_OK, SOAP_USER_ERROR, or SOAP_SSL_ERROR </dd></dl> </div> </div> <a class="anchor" id="ab0ebb72766060a46872b2a337b209556"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">SOAP_FMAC1 int SOAP_FMAC2 soap_smd_final </td> <td>(</td> <td class="paramtype">struct soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct <a class="el" href="structsoap__smd__data.html">soap_smd_data</a> * </td> <td class="paramname"><em>data</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">char * </td> <td class="paramname"><em>buf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int * </td> <td class="paramname"><em>len</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Finalizes (signed) digest computation and returns digest or signature. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramdir"></td><td class="paramname">soap</td><td>context </td></tr> <tr><td class="paramdir">[in,out]</td><td class="paramname">data</td><td>smdevp engine context </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">buf</td><td>contains signature for verification (SOAP_SMD_VRFY algorithms) </td></tr> <tr><td class="paramdir">[out]</td><td class="paramname">buf</td><td>is populated with the digest or signature </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>points to length of signature to verify (SOAP_SMD_VRFY algorithms) </td></tr> <tr><td class="paramdir">[out]</td><td class="paramname">len</td><td>points to length of stored digest or signature (pass NULL if you are not interested in this value) </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>SOAP_OK or SOAP_SSL_ERROR </dd></dl> </div> </div> <a class="anchor" id="a541d1b8b574a198bfa6fc06058c5923c"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">SOAP_FMAC1 int SOAP_FMAC2 soap_smd_init </td> <td>(</td> <td class="paramtype">struct soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct <a class="el" href="structsoap__smd__data.html">soap_smd_data</a> * </td> <td class="paramname"><em>data</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>alg</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const void * </td> <td class="paramname"><em>key</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>keylen</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Initiates a (signed) digest computation. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramdir"></td><td class="paramname">soap</td><td>context </td></tr> <tr><td class="paramdir">[in,out]</td><td class="paramname">data</td><td>smdevp engine context </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">alg</td><td>is algorithm to use </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">key</td><td>is key to use or NULL for digests </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">keylen</td><td>is length of HMAC key (when provided) </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>SOAP_OK or SOAP_SSL_ERROR </dd></dl> </div> </div> <a class="anchor" id="a0048138cdff0c019be36fbbb74eb4964"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static size_t soap_smd_recv </td> <td>(</td> <td class="paramtype">struct soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">char * </td> <td class="paramname"><em>buf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>len</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Callback to intercept messages for digest or signature computation/verification. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramdir"></td><td class="paramname">soap</td><td>context </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">buf</td><td>buffer </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>max buffer length </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>message size in buffer or 0 on error. </dd></dl> </div> </div> <a class="anchor" id="ad3a09ffe1e20e36549c841ae7bad1230"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static int soap_smd_send </td> <td>(</td> <td class="paramtype">struct soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>buf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>len</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Callback to intercept messages for digest or signature computation/verification. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramdir"></td><td class="paramname">soap</td><td>context </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">buf</td><td>message </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>message length </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>SOAP_OK or SOAP_SSL_ERROR </dd></dl> </div> </div> <a class="anchor" id="a19c0648b6e89d1810beac191731989f6"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">SOAP_FMAC1 size_t SOAP_FMAC2 soap_smd_size </td> <td>(</td> <td class="paramtype">int </td> <td class="paramname"><em>alg</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const void * </td> <td class="paramname"><em>key</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Returns the number of octets needed to store the digest or signature returned by soap_smd_end. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramdir">[in]</td><td class="paramname">alg</td><td>is the digest or signature algorithm to be used </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">key</td><td>is a pointer to an EVP_PKEY object for RSA/DSA signatures or NULL for digests and HMAC </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>size_t number of octets that is needed to hold digest or signature </dd></dl> <dl class="section see"><dt>See also</dt><dd><a class="el" href="smdevp_8c.html#a0f3003d09b3e2d141c9d04b9e302adde" title="Completes a digest or signature computation. Also deallocates temporary storage allocated by soap_smd...">soap_smd_end</a></dd></dl> <p>The values returned for digests are SOAP_SMD_MD5_SIZE, SOAP_SMD_SHA1_SIZE, SOAP_SMD_SHA256_SIZE, SOAP_SMD_SHA512_SIZE. </p> </div> </div> <a class="anchor" id="a360fb1000a8dae32937075f300eb89d1"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">SOAP_FMAC1 int SOAP_FMAC2 soap_smd_update </td> <td>(</td> <td class="paramtype">struct soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct <a class="el" href="structsoap__smd__data.html">soap_smd_data</a> * </td> <td class="paramname"><em>data</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>buf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>len</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Updates (signed) digest computation with message part. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramdir"></td><td class="paramname">soap</td><td>context </td></tr> <tr><td class="paramdir">[in,out]</td><td class="paramname">data</td><td>smdevp engine context </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">buf</td><td>contains message part </td></tr> <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>of message part </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>SOAP_OK or SOAP_SSL_ERROR </dd></dl> </div> </div> </div><!-- contents --> <hr class="footer"> <address class="footer"> Copyright (C) 2017, Robert van Engelen, Genivia Inc., All Rights Reserved. </address> <address class="footer"><small> Converted on Sun Jul 9 2017 11:29:29 by <a target="_blank" href="http://www.doxygen.org/index.html">Doxygen</a> 1.8.11</small></address> <br> <div style="height: 246px; background: #DBDBDB;"> </body> </html>