1*4724848cSchristos=pod 2*4724848cSchristos 3*4724848cSchristos=head1 NAME 4*4724848cSchristos 5*4724848cSchristosDH_meth_new, DH_meth_free, DH_meth_dup, DH_meth_get0_name, DH_meth_set1_name, 6*4724848cSchristosDH_meth_get_flags, DH_meth_set_flags, DH_meth_get0_app_data, 7*4724848cSchristosDH_meth_set0_app_data, DH_meth_get_generate_key, DH_meth_set_generate_key, 8*4724848cSchristosDH_meth_get_compute_key, DH_meth_set_compute_key, DH_meth_get_bn_mod_exp, 9*4724848cSchristosDH_meth_set_bn_mod_exp, DH_meth_get_init, DH_meth_set_init, DH_meth_get_finish, 10*4724848cSchristosDH_meth_set_finish, DH_meth_get_generate_params, 11*4724848cSchristosDH_meth_set_generate_params - Routines to build up DH methods 12*4724848cSchristos 13*4724848cSchristos=head1 SYNOPSIS 14*4724848cSchristos 15*4724848cSchristos #include <openssl/dh.h> 16*4724848cSchristos 17*4724848cSchristos DH_METHOD *DH_meth_new(const char *name, int flags); 18*4724848cSchristos 19*4724848cSchristos void DH_meth_free(DH_METHOD *dhm); 20*4724848cSchristos 21*4724848cSchristos DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); 22*4724848cSchristos 23*4724848cSchristos const char *DH_meth_get0_name(const DH_METHOD *dhm); 24*4724848cSchristos int DH_meth_set1_name(DH_METHOD *dhm, const char *name); 25*4724848cSchristos 26*4724848cSchristos int DH_meth_get_flags(const DH_METHOD *dhm); 27*4724848cSchristos int DH_meth_set_flags(DH_METHOD *dhm, int flags); 28*4724848cSchristos 29*4724848cSchristos void *DH_meth_get0_app_data(const DH_METHOD *dhm); 30*4724848cSchristos int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); 31*4724848cSchristos 32*4724848cSchristos int (*DH_meth_get_generate_key(const DH_METHOD *dhm))(DH *); 33*4724848cSchristos int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key)(DH *)); 34*4724848cSchristos 35*4724848cSchristos int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) 36*4724848cSchristos (unsigned char *key, const BIGNUM *pub_key, DH *dh); 37*4724848cSchristos int DH_meth_set_compute_key(DH_METHOD *dhm, 38*4724848cSchristos int (*compute_key)(unsigned char *key, const BIGNUM *pub_key, DH *dh)); 39*4724848cSchristos 40*4724848cSchristos int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) 41*4724848cSchristos (const DH *dh, BIGNUM *r, const BIGNUM *a, const BIGNUM *p, 42*4724848cSchristos const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); 43*4724848cSchristos int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, 44*4724848cSchristos int (*bn_mod_exp)(const DH *dh, BIGNUM *r, const BIGNUM *a, 45*4724848cSchristos const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, 46*4724848cSchristos BN_MONT_CTX *m_ctx)); 47*4724848cSchristos 48*4724848cSchristos int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); 49*4724848cSchristos int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); 50*4724848cSchristos 51*4724848cSchristos int (*DH_meth_get_finish(const DH_METHOD *dhm))(DH *); 52*4724848cSchristos int DH_meth_set_finish(DH_METHOD *dhm, int (*finish)(DH *)); 53*4724848cSchristos 54*4724848cSchristos int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) 55*4724848cSchristos (DH *, int, int, BN_GENCB *); 56*4724848cSchristos int DH_meth_set_generate_params(DH_METHOD *dhm, 57*4724848cSchristos int (*generate_params)(DH *, int, int, BN_GENCB *)); 58*4724848cSchristos 59*4724848cSchristos=head1 DESCRIPTION 60*4724848cSchristos 61*4724848cSchristosThe B<DH_METHOD> type is a structure used for the provision of custom DH 62*4724848cSchristosimplementations. It provides a set of functions used by OpenSSL for the 63*4724848cSchristosimplementation of the various DH capabilities. 64*4724848cSchristos 65*4724848cSchristosDH_meth_new() creates a new B<DH_METHOD> structure. It should be given a 66*4724848cSchristosunique B<name> and a set of B<flags>. The B<name> should be a NULL terminated 67*4724848cSchristosstring, which will be duplicated and stored in the B<DH_METHOD> object. It is 68*4724848cSchristosthe callers responsibility to free the original string. The flags will be used 69*4724848cSchristosduring the construction of a new B<DH> object based on this B<DH_METHOD>. Any 70*4724848cSchristosnew B<DH> object will have those flags set by default. 71*4724848cSchristos 72*4724848cSchristosDH_meth_dup() creates a duplicate copy of the B<DH_METHOD> object passed as a 73*4724848cSchristosparameter. This might be useful for creating a new B<DH_METHOD> based on an 74*4724848cSchristosexisting one, but with some differences. 75*4724848cSchristos 76*4724848cSchristosDH_meth_free() destroys a B<DH_METHOD> structure and frees up any memory 77*4724848cSchristosassociated with it. 78*4724848cSchristos 79*4724848cSchristosDH_meth_get0_name() will return a pointer to the name of this DH_METHOD. This 80*4724848cSchristosis a pointer to the internal name string and so should not be freed by the 81*4724848cSchristoscaller. DH_meth_set1_name() sets the name of the DH_METHOD to B<name>. The 82*4724848cSchristosstring is duplicated and the copy is stored in the DH_METHOD structure, so the 83*4724848cSchristoscaller remains responsible for freeing the memory associated with the name. 84*4724848cSchristos 85*4724848cSchristosDH_meth_get_flags() returns the current value of the flags associated with this 86*4724848cSchristosDH_METHOD. DH_meth_set_flags() provides the ability to set these flags. 87*4724848cSchristos 88*4724848cSchristosThe functions DH_meth_get0_app_data() and DH_meth_set0_app_data() provide the 89*4724848cSchristosability to associate implementation specific data with the DH_METHOD. It is 90*4724848cSchristosthe application's responsibility to free this data before the DH_METHOD is 91*4724848cSchristosfreed via a call to DH_meth_free(). 92*4724848cSchristos 93*4724848cSchristosDH_meth_get_generate_key() and DH_meth_set_generate_key() get and set the 94*4724848cSchristosfunction used for generating a new DH key pair respectively. This function will 95*4724848cSchristosbe called in response to the application calling DH_generate_key(). The 96*4724848cSchristosparameter for the function has the same meaning as for DH_generate_key(). 97*4724848cSchristos 98*4724848cSchristosDH_meth_get_compute_key() and DH_meth_set_compute_key() get and set the 99*4724848cSchristosfunction used for computing a new DH shared secret respectively. This function 100*4724848cSchristoswill be called in response to the application calling DH_compute_key(). The 101*4724848cSchristosparameters for the function have the same meaning as for DH_compute_key(). 102*4724848cSchristos 103*4724848cSchristosDH_meth_get_bn_mod_exp() and DH_meth_set_bn_mod_exp() get and set the function 104*4724848cSchristosused for computing the following value: 105*4724848cSchristos 106*4724848cSchristos r = a ^ p mod m 107*4724848cSchristos 108*4724848cSchristosThis function will be called by the default OpenSSL function for 109*4724848cSchristosDH_generate_key(). The result is stored in the B<r> parameter. This function 110*4724848cSchristosmay be NULL unless using the default generate key function, in which case it 111*4724848cSchristosmust be present. 112*4724848cSchristos 113*4724848cSchristosDH_meth_get_init() and DH_meth_set_init() get and set the function used 114*4724848cSchristosfor creating a new DH instance respectively. This function will be 115*4724848cSchristoscalled in response to the application calling DH_new() (if the current default 116*4724848cSchristosDH_METHOD is this one) or DH_new_method(). The DH_new() and DH_new_method() 117*4724848cSchristosfunctions will allocate the memory for the new DH object, and a pointer to this 118*4724848cSchristosnewly allocated structure will be passed as a parameter to the function. This 119*4724848cSchristosfunction may be NULL. 120*4724848cSchristos 121*4724848cSchristosDH_meth_get_finish() and DH_meth_set_finish() get and set the function used 122*4724848cSchristosfor destroying an instance of a DH object respectively. This function will be 123*4724848cSchristoscalled in response to the application calling DH_free(). A pointer to the DH 124*4724848cSchristosto be destroyed is passed as a parameter. The destroy function should be used 125*4724848cSchristosfor DH implementation specific clean up. The memory for the DH itself should 126*4724848cSchristosnot be freed by this function. This function may be NULL. 127*4724848cSchristos 128*4724848cSchristosDH_meth_get_generate_params() and DH_meth_set_generate_params() get and set the 129*4724848cSchristosfunction used for generating DH parameters respectively. This function will be 130*4724848cSchristoscalled in response to the application calling DH_generate_parameters_ex() (or 131*4724848cSchristosDH_generate_parameters()). The parameters for the function have the same 132*4724848cSchristosmeaning as for DH_generate_parameters_ex(). This function may be NULL. 133*4724848cSchristos 134*4724848cSchristos=head1 RETURN VALUES 135*4724848cSchristos 136*4724848cSchristosDH_meth_new() and DH_meth_dup() return the newly allocated DH_METHOD object 137*4724848cSchristosor NULL on failure. 138*4724848cSchristos 139*4724848cSchristosDH_meth_get0_name() and DH_meth_get_flags() return the name and flags 140*4724848cSchristosassociated with the DH_METHOD respectively. 141*4724848cSchristos 142*4724848cSchristosAll other DH_meth_get_*() functions return the appropriate function pointer 143*4724848cSchristosthat has been set in the DH_METHOD, or NULL if no such pointer has yet been 144*4724848cSchristosset. 145*4724848cSchristos 146*4724848cSchristosDH_meth_set1_name() and all DH_meth_set_*() functions return 1 on success or 147*4724848cSchristos0 on failure. 148*4724848cSchristos 149*4724848cSchristos=head1 SEE ALSO 150*4724848cSchristos 151*4724848cSchristosL<DH_new(3)>, L<DH_new(3)>, L<DH_generate_parameters(3)>, L<DH_generate_key(3)>, 152*4724848cSchristosL<DH_set_method(3)>, L<DH_size(3)>, L<DH_get0_pqg(3)> 153*4724848cSchristos 154*4724848cSchristos=head1 HISTORY 155*4724848cSchristos 156*4724848cSchristosThe functions described here were added in OpenSSL 1.1.0. 157*4724848cSchristos 158*4724848cSchristos=head1 COPYRIGHT 159*4724848cSchristos 160*4724848cSchristosCopyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. 161*4724848cSchristos 162*4724848cSchristosLicensed under the OpenSSL license (the "License"). You may not use 163*4724848cSchristosthis file except in compliance with the License. You can obtain a copy 164*4724848cSchristosin the file LICENSE in the source distribution or at 165*4724848cSchristosL<https://www.openssl.org/source/license.html>. 166*4724848cSchristos 167*4724848cSchristos=cut 168