1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 3<title>Heimdal crypto library: Diffie-Hellman functions</title> 4<link href="doxygen.css" rel="stylesheet" type="text/css"> 5<link href="tabs.css" rel="stylesheet" type="text/css"> 6</head><body> 7<p> 8<a href="http://www.h5l.org/"><img src="http://www.h5l.org/keyhole-heimdal.png" alt="keyhole logo"/></a> 9</p> 10<!-- end of header marker --> 11<!-- Generated by Doxygen 1.5.6 --> 12<div class="navigation" id="top"> 13 <div class="tabs"> 14 <ul> 15 <li><a href="index.html"><span>Main Page</span></a></li> 16 <li><a href="modules.html"><span>Modules</span></a></li> 17 <li><a href="examples.html"><span>Examples</span></a></li> 18 </ul> 19 </div> 20</div> 21<div class="contents"> 22<h1>Diffie-Hellman functions</h1><table border="0" cellpadding="0" cellspacing="0"> 23<tr><td></td></tr> 24<tr><td colspan="2"><br><h2>Functions</h2></td></tr> 25<tr><td class="memItemLeft" nowrap align="right" valign="top">const DH_METHOD * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#gbfe13af1fef654a94a9be268df6d8809">DH_ltm_method</a> (void)</td></tr> 26 27<tr><td class="memItemLeft" nowrap align="right" valign="top">DH * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#g76c6e12bd1f0b9977d80fee83b086031">DH_new</a> (void)</td></tr> 28 29<tr><td class="memItemLeft" nowrap align="right" valign="top">DH * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#g2e97e03aee56c6094bb7fd6322b3ce68">DH_new_method</a> (ENGINE *engine)</td></tr> 30 31<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#g1f15312ca21e290ee714e86578820c35">DH_free</a> (DH *dh)</td></tr> 32 33<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#gf7c3e51cba326865c3684012c2337df1">DH_up_ref</a> (DH *dh)</td></tr> 34 35<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#g9e1fdd62e3bfe4b671dbfc363f0e6297">DH_size</a> (const DH *dh)</td></tr> 36 37<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#g7a03e7589a8473ed34cf2a4177709c0e">DH_set_ex_data</a> (DH *dh, int idx, void *data)</td></tr> 38 39<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#g25fff6e977829c49410f046b8cc3471d">DH_get_ex_data</a> (DH *dh, int idx)</td></tr> 40 41<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#g11ef051e93bc408f3e7ba77d44c5d3cb">DH_generate_parameters_ex</a> (DH *dh, int prime_len, int generator, BN_GENCB *cb)</td></tr> 42 43<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#g8995ef180ab448fdedde5da65f6ea249">DH_check_pubkey</a> (const DH *dh, const BIGNUM *pub_key, int *codes)</td></tr> 44 45<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#gb90ec6b9e64f62c05754731c0c13ea01">DH_generate_key</a> (DH *dh)</td></tr> 46 47<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#gf8b793df62108341ed3dc54a0ca75ca8">DH_compute_key</a> (unsigned char *shared_key, const BIGNUM *peer_pub_key, DH *dh)</td></tr> 48 49<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#ge8f6c9ec1c2e4904439227a952980fdd">DH_set_method</a> (DH *dh, const DH_METHOD *method)</td></tr> 50 51<tr><td class="memItemLeft" nowrap align="right" valign="top">const DH_METHOD * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#g1e3dc0dbc1ba678716d28654c0eded84">DH_null_method</a> (void)</td></tr> 52 53<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#g6c63e1e8af5957d7f798439c854d06b6">DH_set_default_method</a> (const DH_METHOD *meth)</td></tr> 54 55<tr><td class="memItemLeft" nowrap align="right" valign="top">const DH_METHOD * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hcrypto__dh.html#ge2b07654d087940e36e7583887d8b070">DH_get_default_method</a> (void)</td></tr> 56 57</table> 58<hr><a name="_details"></a><h2>Detailed Description</h2> 59See the <a class="el" href="page_dh.html">DH - Diffie-Hellman key exchange</a> for description and examples. <hr><h2>Function Documentation</h2> 60<a class="anchor" name="g8995ef180ab448fdedde5da65f6ea249"></a><!-- doxytag: member="dh.c::DH_check_pubkey" ref="g8995ef180ab448fdedde5da65f6ea249" args="(const DH *dh, const BIGNUM *pub_key, int *codes)" --> 61<div class="memitem"> 62<div class="memproto"> 63 <table class="memname"> 64 <tr> 65 <td class="memname">int DH_check_pubkey </td> 66 <td>(</td> 67 <td class="paramtype">const DH * </td> 68 <td class="paramname"> <em>dh</em>, </td> 69 </tr> 70 <tr> 71 <td class="paramkey"></td> 72 <td></td> 73 <td class="paramtype">const BIGNUM * </td> 74 <td class="paramname"> <em>pub_key</em>, </td> 75 </tr> 76 <tr> 77 <td class="paramkey"></td> 78 <td></td> 79 <td class="paramtype">int * </td> 80 <td class="paramname"> <em>codes</em></td><td> </td> 81 </tr> 82 <tr> 83 <td></td> 84 <td>)</td> 85 <td></td><td></td><td></td> 86 </tr> 87 </table> 88</div> 89<div class="memdoc"> 90 91<p> 92Check that the public key is sane.<p> 93<dl compact><dt><b>Parameters:</b></dt><dd> 94 <table border="0" cellspacing="2" cellpadding="0"> 95 <tr><td valign="top"></td><td valign="top"><em>dh</em> </td><td>the local peer DH parameters. </td></tr> 96 <tr><td valign="top"></td><td valign="top"><em>pub_key</em> </td><td>the remote peer public key parameters. </td></tr> 97 <tr><td valign="top"></td><td valign="top"><em>codes</em> </td><td>return that the failures of the pub_key are.</td></tr> 98 </table> 99</dl> 100<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 on success, 0 on failure and *codes is set the the combined fail check for the public key </dd></dl> 101 102<p> 103Checks that the function performs are:<ul> 104<li>pub_key is not negative</li></ul> 105<p> 106<ul> 107<li>pub_key > 1 and pub_key < p - 1, to avoid small subgroups attack.</li></ul> 108<p> 109<ul> 110<li>if g == 2, pub_key have more then one bit set, if bits set is 1, log_2(pub_key) is trival </li></ul> 111 112</div> 113</div><p> 114<a class="anchor" name="gf8b793df62108341ed3dc54a0ca75ca8"></a><!-- doxytag: member="dh.c::DH_compute_key" ref="gf8b793df62108341ed3dc54a0ca75ca8" args="(unsigned char *shared_key, const BIGNUM *peer_pub_key, DH *dh)" --> 115<div class="memitem"> 116<div class="memproto"> 117 <table class="memname"> 118 <tr> 119 <td class="memname">int DH_compute_key </td> 120 <td>(</td> 121 <td class="paramtype">unsigned char * </td> 122 <td class="paramname"> <em>shared_key</em>, </td> 123 </tr> 124 <tr> 125 <td class="paramkey"></td> 126 <td></td> 127 <td class="paramtype">const BIGNUM * </td> 128 <td class="paramname"> <em>peer_pub_key</em>, </td> 129 </tr> 130 <tr> 131 <td class="paramkey"></td> 132 <td></td> 133 <td class="paramtype">DH * </td> 134 <td class="paramname"> <em>dh</em></td><td> </td> 135 </tr> 136 <tr> 137 <td></td> 138 <td>)</td> 139 <td></td><td></td><td></td> 140 </tr> 141 </table> 142</div> 143<div class="memdoc"> 144 145<p> 146Complute the shared secret key.<p> 147<dl compact><dt><b>Parameters:</b></dt><dd> 148 <table border="0" cellspacing="2" cellpadding="0"> 149 <tr><td valign="top"></td><td valign="top"><em>shared_key</em> </td><td>the resulting shared key, need to be at least <a class="el" href="group__hcrypto__dh.html#g9e1fdd62e3bfe4b671dbfc363f0e6297">DH_size()</a> large. </td></tr> 150 <tr><td valign="top"></td><td valign="top"><em>peer_pub_key</em> </td><td>the peer's public key. </td></tr> 151 <tr><td valign="top"></td><td valign="top"><em>dh</em> </td><td>the dh key pair.</td></tr> 152 </table> 153</dl> 154<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 on success. </dd></dl> 155 156<p> 157Checks that the pubkey passed in is valid using <a class="el" href="group__hcrypto__dh.html#g8995ef180ab448fdedde5da65f6ea249">DH_check_pubkey()</a>. 158</div> 159</div><p> 160<a class="anchor" name="g1f15312ca21e290ee714e86578820c35"></a><!-- doxytag: member="dh.c::DH_free" ref="g1f15312ca21e290ee714e86578820c35" args="(DH *dh)" --> 161<div class="memitem"> 162<div class="memproto"> 163 <table class="memname"> 164 <tr> 165 <td class="memname">void DH_free </td> 166 <td>(</td> 167 <td class="paramtype">DH * </td> 168 <td class="paramname"> <em>dh</em> </td> 169 <td> ) </td> 170 <td></td> 171 </tr> 172 </table> 173</div> 174<div class="memdoc"> 175 176<p> 177Free a DH object and release related resources, like ENGINE, that the object was using.<p> 178<dl compact><dt><b>Parameters:</b></dt><dd> 179 <table border="0" cellspacing="2" cellpadding="0"> 180 <tr><td valign="top"></td><td valign="top"><em>dh</em> </td><td>object to be freed. </td></tr> 181 </table> 182</dl> 183 184</div> 185</div><p> 186<a class="anchor" name="gb90ec6b9e64f62c05754731c0c13ea01"></a><!-- doxytag: member="dh.c::DH_generate_key" ref="gb90ec6b9e64f62c05754731c0c13ea01" args="(DH *dh)" --> 187<div class="memitem"> 188<div class="memproto"> 189 <table class="memname"> 190 <tr> 191 <td class="memname">int DH_generate_key </td> 192 <td>(</td> 193 <td class="paramtype">DH * </td> 194 <td class="paramname"> <em>dh</em> </td> 195 <td> ) </td> 196 <td></td> 197 </tr> 198 </table> 199</div> 200<div class="memdoc"> 201 202<p> 203Generate a new DH private-public key pair. The dh parameter must be allocted first with <a class="el" href="group__hcrypto__dh.html#g76c6e12bd1f0b9977d80fee83b086031">DH_new()</a>. dh->p and dp->g must be set.<p> 204<dl compact><dt><b>Parameters:</b></dt><dd> 205 <table border="0" cellspacing="2" cellpadding="0"> 206 <tr><td valign="top"></td><td valign="top"><em>dh</em> </td><td>dh parameter.</td></tr> 207 </table> 208</dl> 209<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 on success. </dd></dl> 210 211</div> 212</div><p> 213<a class="anchor" name="g11ef051e93bc408f3e7ba77d44c5d3cb"></a><!-- doxytag: member="dh.c::DH_generate_parameters_ex" ref="g11ef051e93bc408f3e7ba77d44c5d3cb" args="(DH *dh, int prime_len, int generator, BN_GENCB *cb)" --> 214<div class="memitem"> 215<div class="memproto"> 216 <table class="memname"> 217 <tr> 218 <td class="memname">int DH_generate_parameters_ex </td> 219 <td>(</td> 220 <td class="paramtype">DH * </td> 221 <td class="paramname"> <em>dh</em>, </td> 222 </tr> 223 <tr> 224 <td class="paramkey"></td> 225 <td></td> 226 <td class="paramtype">int </td> 227 <td class="paramname"> <em>prime_len</em>, </td> 228 </tr> 229 <tr> 230 <td class="paramkey"></td> 231 <td></td> 232 <td class="paramtype">int </td> 233 <td class="paramname"> <em>generator</em>, </td> 234 </tr> 235 <tr> 236 <td class="paramkey"></td> 237 <td></td> 238 <td class="paramtype">BN_GENCB * </td> 239 <td class="paramname"> <em>cb</em></td><td> </td> 240 </tr> 241 <tr> 242 <td></td> 243 <td>)</td> 244 <td></td><td></td><td></td> 245 </tr> 246 </table> 247</div> 248<div class="memdoc"> 249 250<p> 251Generate DH parameters for the DH object give parameters.<p> 252<dl compact><dt><b>Parameters:</b></dt><dd> 253 <table border="0" cellspacing="2" cellpadding="0"> 254 <tr><td valign="top"></td><td valign="top"><em>dh</em> </td><td>The DH object to generate parameters for. </td></tr> 255 <tr><td valign="top"></td><td valign="top"><em>prime_len</em> </td><td>length of the prime </td></tr> 256 <tr><td valign="top"></td><td valign="top"><em>generator</em> </td><td>generator, g </td></tr> 257 <tr><td valign="top"></td><td valign="top"><em>cb</em> </td><td>Callback parameters to show progress, can be NULL.</td></tr> 258 </table> 259</dl> 260<dl class="return" compact><dt><b>Returns:</b></dt><dd>the maximum size in bytes of the out data. </dd></dl> 261 262</div> 263</div><p> 264<a class="anchor" name="ge2b07654d087940e36e7583887d8b070"></a><!-- doxytag: member="dh.c::DH_get_default_method" ref="ge2b07654d087940e36e7583887d8b070" args="(void)" --> 265<div class="memitem"> 266<div class="memproto"> 267 <table class="memname"> 268 <tr> 269 <td class="memname">const DH_METHOD* DH_get_default_method </td> 270 <td>(</td> 271 <td class="paramtype">void </td> 272 <td class="paramname"> </td> 273 <td> ) </td> 274 <td></td> 275 </tr> 276 </table> 277</div> 278<div class="memdoc"> 279 280<p> 281Return the default DH implementation.<p> 282<dl class="return" compact><dt><b>Returns:</b></dt><dd>pointer to a DH_METHOD. </dd></dl> 283 284</div> 285</div><p> 286<a class="anchor" name="g25fff6e977829c49410f046b8cc3471d"></a><!-- doxytag: member="dh.c::DH_get_ex_data" ref="g25fff6e977829c49410f046b8cc3471d" args="(DH *dh, int idx)" --> 287<div class="memitem"> 288<div class="memproto"> 289 <table class="memname"> 290 <tr> 291 <td class="memname">void* DH_get_ex_data </td> 292 <td>(</td> 293 <td class="paramtype">DH * </td> 294 <td class="paramname"> <em>dh</em>, </td> 295 </tr> 296 <tr> 297 <td class="paramkey"></td> 298 <td></td> 299 <td class="paramtype">int </td> 300 <td class="paramname"> <em>idx</em></td><td> </td> 301 </tr> 302 <tr> 303 <td></td> 304 <td>)</td> 305 <td></td><td></td><td></td> 306 </tr> 307 </table> 308</div> 309<div class="memdoc"> 310 311<p> 312Get the data for index idx in the DH object.<p> 313<dl compact><dt><b>Parameters:</b></dt><dd> 314 <table border="0" cellspacing="2" cellpadding="0"> 315 <tr><td valign="top"></td><td valign="top"><em>dh</em> </td><td>DH object. </td></tr> 316 <tr><td valign="top"></td><td valign="top"><em>idx</em> </td><td>index to get the data for.</td></tr> 317 </table> 318</dl> 319<dl class="return" compact><dt><b>Returns:</b></dt><dd>the object store in index idx </dd></dl> 320 321</div> 322</div><p> 323<a class="anchor" name="gbfe13af1fef654a94a9be268df6d8809"></a><!-- doxytag: member="dh-ltm.c::DH_ltm_method" ref="gbfe13af1fef654a94a9be268df6d8809" args="(void)" --> 324<div class="memitem"> 325<div class="memproto"> 326 <table class="memname"> 327 <tr> 328 <td class="memname">const DH_METHOD* DH_ltm_method </td> 329 <td>(</td> 330 <td class="paramtype">void </td> 331 <td class="paramname"> </td> 332 <td> ) </td> 333 <td></td> 334 </tr> 335 </table> 336</div> 337<div class="memdoc"> 338 339<p> 340DH implementation using libtommath.<p> 341<dl class="return" compact><dt><b>Returns:</b></dt><dd>the DH_METHOD for the DH implementation using libtommath. </dd></dl> 342 343</div> 344</div><p> 345<a class="anchor" name="g76c6e12bd1f0b9977d80fee83b086031"></a><!-- doxytag: member="dh.c::DH_new" ref="g76c6e12bd1f0b9977d80fee83b086031" args="(void)" --> 346<div class="memitem"> 347<div class="memproto"> 348 <table class="memname"> 349 <tr> 350 <td class="memname">DH* DH_new </td> 351 <td>(</td> 352 <td class="paramtype">void </td> 353 <td class="paramname"> </td> 354 <td> ) </td> 355 <td></td> 356 </tr> 357 </table> 358</div> 359<div class="memdoc"> 360 361<p> 362Create a new DH object using DH_new_method(NULL), see <a class="el" href="group__hcrypto__dh.html#g2e97e03aee56c6094bb7fd6322b3ce68">DH_new_method()</a>.<p> 363<dl class="return" compact><dt><b>Returns:</b></dt><dd>a newly allocated DH object. </dd></dl> 364 365</div> 366</div><p> 367<a class="anchor" name="g2e97e03aee56c6094bb7fd6322b3ce68"></a><!-- doxytag: member="dh.c::DH_new_method" ref="g2e97e03aee56c6094bb7fd6322b3ce68" args="(ENGINE *engine)" --> 368<div class="memitem"> 369<div class="memproto"> 370 <table class="memname"> 371 <tr> 372 <td class="memname">DH* DH_new_method </td> 373 <td>(</td> 374 <td class="paramtype">ENGINE * </td> 375 <td class="paramname"> <em>engine</em> </td> 376 <td> ) </td> 377 <td></td> 378 </tr> 379 </table> 380</div> 381<div class="memdoc"> 382 383<p> 384Create a new DH object from the given engine, if the NULL is used, the default engine is used. Free the DH object with <a class="el" href="group__hcrypto__dh.html#g1f15312ca21e290ee714e86578820c35">DH_free()</a>.<p> 385<dl compact><dt><b>Parameters:</b></dt><dd> 386 <table border="0" cellspacing="2" cellpadding="0"> 387 <tr><td valign="top"></td><td valign="top"><em>engine</em> </td><td>The engine to use to allocate the DH object.</td></tr> 388 </table> 389</dl> 390<dl class="return" compact><dt><b>Returns:</b></dt><dd>a newly allocated DH object. </dd></dl> 391 392</div> 393</div><p> 394<a class="anchor" name="g1e3dc0dbc1ba678716d28654c0eded84"></a><!-- doxytag: member="dh.c::DH_null_method" ref="g1e3dc0dbc1ba678716d28654c0eded84" args="(void)" --> 395<div class="memitem"> 396<div class="memproto"> 397 <table class="memname"> 398 <tr> 399 <td class="memname">const DH_METHOD* DH_null_method </td> 400 <td>(</td> 401 <td class="paramtype">void </td> 402 <td class="paramname"> </td> 403 <td> ) </td> 404 <td></td> 405 </tr> 406 </table> 407</div> 408<div class="memdoc"> 409 410<p> 411Return the dummy DH implementation.<p> 412<dl class="return" compact><dt><b>Returns:</b></dt><dd>pointer to a DH_METHOD. </dd></dl> 413 414</div> 415</div><p> 416<a class="anchor" name="g6c63e1e8af5957d7f798439c854d06b6"></a><!-- doxytag: member="dh.c::DH_set_default_method" ref="g6c63e1e8af5957d7f798439c854d06b6" args="(const DH_METHOD *meth)" --> 417<div class="memitem"> 418<div class="memproto"> 419 <table class="memname"> 420 <tr> 421 <td class="memname">void DH_set_default_method </td> 422 <td>(</td> 423 <td class="paramtype">const DH_METHOD * </td> 424 <td class="paramname"> <em>meth</em> </td> 425 <td> ) </td> 426 <td></td> 427 </tr> 428 </table> 429</div> 430<div class="memdoc"> 431 432<p> 433Set the default DH implementation.<p> 434<dl compact><dt><b>Parameters:</b></dt><dd> 435 <table border="0" cellspacing="2" cellpadding="0"> 436 <tr><td valign="top"></td><td valign="top"><em>meth</em> </td><td>pointer to a DH_METHOD. </td></tr> 437 </table> 438</dl> 439 440</div> 441</div><p> 442<a class="anchor" name="g7a03e7589a8473ed34cf2a4177709c0e"></a><!-- doxytag: member="dh.c::DH_set_ex_data" ref="g7a03e7589a8473ed34cf2a4177709c0e" args="(DH *dh, int idx, void *data)" --> 443<div class="memitem"> 444<div class="memproto"> 445 <table class="memname"> 446 <tr> 447 <td class="memname">int DH_set_ex_data </td> 448 <td>(</td> 449 <td class="paramtype">DH * </td> 450 <td class="paramname"> <em>dh</em>, </td> 451 </tr> 452 <tr> 453 <td class="paramkey"></td> 454 <td></td> 455 <td class="paramtype">int </td> 456 <td class="paramname"> <em>idx</em>, </td> 457 </tr> 458 <tr> 459 <td class="paramkey"></td> 460 <td></td> 461 <td class="paramtype">void * </td> 462 <td class="paramname"> <em>data</em></td><td> </td> 463 </tr> 464 <tr> 465 <td></td> 466 <td>)</td> 467 <td></td><td></td><td></td> 468 </tr> 469 </table> 470</div> 471<div class="memdoc"> 472 473<p> 474Set the data index idx in the DH object to data.<p> 475<dl compact><dt><b>Parameters:</b></dt><dd> 476 <table border="0" cellspacing="2" cellpadding="0"> 477 <tr><td valign="top"></td><td valign="top"><em>dh</em> </td><td>DH object. </td></tr> 478 <tr><td valign="top"></td><td valign="top"><em>idx</em> </td><td>index to set the data for. </td></tr> 479 <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>data to store for the index idx.</td></tr> 480 </table> 481</dl> 482<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 on success. </dd></dl> 483 484</div> 485</div><p> 486<a class="anchor" name="ge8f6c9ec1c2e4904439227a952980fdd"></a><!-- doxytag: member="dh.c::DH_set_method" ref="ge8f6c9ec1c2e4904439227a952980fdd" args="(DH *dh, const DH_METHOD *method)" --> 487<div class="memitem"> 488<div class="memproto"> 489 <table class="memname"> 490 <tr> 491 <td class="memname">int DH_set_method </td> 492 <td>(</td> 493 <td class="paramtype">DH * </td> 494 <td class="paramname"> <em>dh</em>, </td> 495 </tr> 496 <tr> 497 <td class="paramkey"></td> 498 <td></td> 499 <td class="paramtype">const DH_METHOD * </td> 500 <td class="paramname"> <em>method</em></td><td> </td> 501 </tr> 502 <tr> 503 <td></td> 504 <td>)</td> 505 <td></td><td></td><td></td> 506 </tr> 507 </table> 508</div> 509<div class="memdoc"> 510 511<p> 512Set a new method for the DH keypair.<p> 513<dl compact><dt><b>Parameters:</b></dt><dd> 514 <table border="0" cellspacing="2" cellpadding="0"> 515 <tr><td valign="top"></td><td valign="top"><em>dh</em> </td><td>dh parameter. </td></tr> 516 <tr><td valign="top"></td><td valign="top"><em>method</em> </td><td>the new method for the DH parameter.</td></tr> 517 </table> 518</dl> 519<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 on success. </dd></dl> 520 521</div> 522</div><p> 523<a class="anchor" name="g9e1fdd62e3bfe4b671dbfc363f0e6297"></a><!-- doxytag: member="dh.c::DH_size" ref="g9e1fdd62e3bfe4b671dbfc363f0e6297" args="(const DH *dh)" --> 524<div class="memitem"> 525<div class="memproto"> 526 <table class="memname"> 527 <tr> 528 <td class="memname">int DH_size </td> 529 <td>(</td> 530 <td class="paramtype">const DH * </td> 531 <td class="paramname"> <em>dh</em> </td> 532 <td> ) </td> 533 <td></td> 534 </tr> 535 </table> 536</div> 537<div class="memdoc"> 538 539<p> 540The maximum output size of the <a class="el" href="group__hcrypto__dh.html#gf8b793df62108341ed3dc54a0ca75ca8">DH_compute_key()</a> function.<p> 541<dl compact><dt><b>Parameters:</b></dt><dd> 542 <table border="0" cellspacing="2" cellpadding="0"> 543 <tr><td valign="top"></td><td valign="top"><em>dh</em> </td><td>The DH object to get the size from.</td></tr> 544 </table> 545</dl> 546<dl class="return" compact><dt><b>Returns:</b></dt><dd>the maximum size in bytes of the out data. </dd></dl> 547 548</div> 549</div><p> 550<a class="anchor" name="gf7c3e51cba326865c3684012c2337df1"></a><!-- doxytag: member="dh.c::DH_up_ref" ref="gf7c3e51cba326865c3684012c2337df1" args="(DH *dh)" --> 551<div class="memitem"> 552<div class="memproto"> 553 <table class="memname"> 554 <tr> 555 <td class="memname">int DH_up_ref </td> 556 <td>(</td> 557 <td class="paramtype">DH * </td> 558 <td class="paramname"> <em>dh</em> </td> 559 <td> ) </td> 560 <td></td> 561 </tr> 562 </table> 563</div> 564<div class="memdoc"> 565 566<p> 567Add a reference to the DH object. The object should be free with <a class="el" href="group__hcrypto__dh.html#g1f15312ca21e290ee714e86578820c35">DH_free()</a> to drop the reference.<p> 568<dl compact><dt><b>Parameters:</b></dt><dd> 569 <table border="0" cellspacing="2" cellpadding="0"> 570 <tr><td valign="top"></td><td valign="top"><em>dh</em> </td><td>the object to increase the reference count too.</td></tr> 571 </table> 572</dl> 573<dl class="return" compact><dt><b>Returns:</b></dt><dd>the updated reference count, can't safely be used except for debug printing. </dd></dl> 574 575</div> 576</div><p> 577</div> 578<hr size="1"><address style="text-align: right;"><small> 579Generated on Fri Sep 30 15:26:03 2011 for Heimdal crypto library by <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6</small></address> 580</body> 581</html> 582