.TH "hcrypto_dh" 3 "Tue Jul 11 2017" "Version 7.4.0" "Heimdal crypto library" \" -*- nroff -*- .ad l .nh .SH NAME hcrypto_dh \- Diffie-Hellman functions .SS "Functions" .in +1c .ti -1c .RI "const DH_METHOD * \fBDH_ltm_method\fP (void)" .br .ti -1c .RI "DH * \fBDH_new\fP (void)" .br .ti -1c .RI "DH * \fBDH_new_method\fP (ENGINE *engine)" .br .ti -1c .RI "void \fBDH_free\fP (DH *dh)" .br .ti -1c .RI "int \fBDH_up_ref\fP (DH *dh)" .br .ti -1c .RI "int \fBDH_size\fP (const DH *dh)" .br .ti -1c .RI "int \fBDH_set_ex_data\fP (DH *dh, int idx, void *data)" .br .ti -1c .RI "void * \fBDH_get_ex_data\fP (DH *dh, int idx)" .br .ti -1c .RI "int \fBDH_generate_parameters_ex\fP (DH *dh, int prime_len, int generator, BN_GENCB *cb)" .br .ti -1c .RI "int \fBDH_check_pubkey\fP (const DH *dh, const BIGNUM *pub_key, int *codes)" .br .ti -1c .RI "int \fBDH_generate_key\fP (DH *dh)" .br .ti -1c .RI "int \fBDH_compute_key\fP (unsigned char *shared_key, const BIGNUM *peer_pub_key, DH *dh)" .br .ti -1c .RI "int \fBDH_set_method\fP (DH *dh, const DH_METHOD *method)" .br .ti -1c .RI "const DH_METHOD * \fBDH_null_method\fP (void)" .br .ti -1c .RI "void \fBDH_set_default_method\fP (const DH_METHOD *meth)" .br .ti -1c .RI "const DH_METHOD * \fBDH_get_default_method\fP (void)" .br .in -1c .SH "Detailed Description" .PP See the \fBDH - Diffie-Hellman key exchange\fP for description and examples\&. .SH "Function Documentation" .PP .SS "int DH_check_pubkey (const DH * dh, const BIGNUM * pub_key, int * codes)" Check that the public key is sane\&. .PP \fBParameters:\fP .RS 4 \fIdh\fP the local peer DH parameters\&. .br \fIpub_key\fP the remote peer public key parameters\&. .br \fIcodes\fP return that the failures of the pub_key are\&. .RE .PP \fBReturns:\fP .RS 4 1 on success, 0 on failure and *codes is set the the combined fail check for the public key .RE .PP Checks that the function performs are: .IP "\(bu" 2 pub_key is not negative .IP "\(bu" 2 pub_key > 1 and pub_key < p - 1, to avoid small subgroups attack\&. .IP "\(bu" 2 if g == 2, pub_key have more then one bit set, if bits set is 1, log_2(pub_key) is trival .PP .SS "int DH_compute_key (unsigned char * shared_key, const BIGNUM * peer_pub_key, DH * dh)" Complute the shared secret key\&. .PP \fBParameters:\fP .RS 4 \fIshared_key\fP the resulting shared key, need to be at least \fBDH_size()\fP large\&. .br \fIpeer_pub_key\fP the peer's public key\&. .br \fIdh\fP the dh key pair\&. .RE .PP \fBReturns:\fP .RS 4 1 on success\&. .RE .PP Checks that the pubkey passed in is valid using \fBDH_check_pubkey()\fP\&. .SS "void DH_free (DH * dh)" Free a DH object and release related resources, like ENGINE, that the object was using\&. .PP \fBParameters:\fP .RS 4 \fIdh\fP object to be freed\&. .RE .PP .SS "int DH_generate_key (DH * dh)" Generate a new DH private-public key pair\&. The dh parameter must be allocted first with \fBDH_new()\fP\&. dh->p and dp->g must be set\&. .PP \fBParameters:\fP .RS 4 \fIdh\fP dh parameter\&. .RE .PP \fBReturns:\fP .RS 4 1 on success\&. .RE .PP .SS "int DH_generate_parameters_ex (DH * dh, int prime_len, int generator, BN_GENCB * cb)" Generate DH parameters for the DH object give parameters\&. .PP \fBParameters:\fP .RS 4 \fIdh\fP The DH object to generate parameters for\&. .br \fIprime_len\fP length of the prime .br \fIgenerator\fP generator, g .br \fIcb\fP Callback parameters to show progress, can be NULL\&. .RE .PP \fBReturns:\fP .RS 4 the maximum size in bytes of the out data\&. .RE .PP .SS "const DH_METHOD* DH_get_default_method (void)" Return the default DH implementation\&. .PP \fBReturns:\fP .RS 4 pointer to a DH_METHOD\&. .RE .PP .SS "void* DH_get_ex_data (DH * dh, int idx)" Get the data for index idx in the DH object\&. .PP \fBParameters:\fP .RS 4 \fIdh\fP DH object\&. .br \fIidx\fP index to get the data for\&. .RE .PP \fBReturns:\fP .RS 4 the object store in index idx .RE .PP .SS "const DH_METHOD* DH_ltm_method (void)" DH implementation using libtommath\&. .PP \fBReturns:\fP .RS 4 the DH_METHOD for the DH implementation using libtommath\&. .RE .PP .SS "DH* DH_new (void)" Create a new DH object using DH_new_method(NULL), see \fBDH_new_method()\fP\&. .PP \fBReturns:\fP .RS 4 a newly allocated DH object\&. .RE .PP .SS "DH* DH_new_method (ENGINE * engine)" Create a new DH object from the given engine, if the NULL is used, the default engine is used\&. Free the DH object with \fBDH_free()\fP\&. .PP \fBParameters:\fP .RS 4 \fIengine\fP The engine to use to allocate the DH object\&. .RE .PP \fBReturns:\fP .RS 4 a newly allocated DH object\&. .RE .PP .SS "const DH_METHOD* DH_null_method (void)" Return the dummy DH implementation\&. .PP \fBReturns:\fP .RS 4 pointer to a DH_METHOD\&. .RE .PP .SS "void DH_set_default_method (const DH_METHOD * meth)" Set the default DH implementation\&. .PP \fBParameters:\fP .RS 4 \fImeth\fP pointer to a DH_METHOD\&. .RE .PP .SS "int DH_set_ex_data (DH * dh, int idx, void * data)" Set the data index idx in the DH object to data\&. .PP \fBParameters:\fP .RS 4 \fIdh\fP DH object\&. .br \fIidx\fP index to set the data for\&. .br \fIdata\fP data to store for the index idx\&. .RE .PP \fBReturns:\fP .RS 4 1 on success\&. .RE .PP .SS "int DH_set_method (DH * dh, const DH_METHOD * method)" Set a new method for the DH keypair\&. .PP \fBParameters:\fP .RS 4 \fIdh\fP dh parameter\&. .br \fImethod\fP the new method for the DH parameter\&. .RE .PP \fBReturns:\fP .RS 4 1 on success\&. .RE .PP .SS "int DH_size (const DH * dh)" The maximum output size of the \fBDH_compute_key()\fP function\&. .PP \fBParameters:\fP .RS 4 \fIdh\fP The DH object to get the size from\&. .RE .PP \fBReturns:\fP .RS 4 the maximum size in bytes of the out data\&. .RE .PP .SS "int DH_up_ref (DH * dh)" Add a reference to the DH object\&. The object should be free with \fBDH_free()\fP to drop the reference\&. .PP \fBParameters:\fP .RS 4 \fIdh\fP the object to increase the reference count too\&. .RE .PP \fBReturns:\fP .RS 4 the updated reference count, can't safely be used except for debug printing\&. .RE .PP .SH "Author" .PP Generated automatically by Doxygen for Heimdal crypto library from the source code\&.