1e71b7053SJung-uk Kim=pod 2e71b7053SJung-uk Kim 3e71b7053SJung-uk Kim=head1 NAME 4e71b7053SJung-uk Kim 5e71b7053SJung-uk KimDH_get0_pqg, DH_set0_pqg, DH_get0_key, DH_set0_key, 6e71b7053SJung-uk KimDH_get0_p, DH_get0_q, DH_get0_g, 7e71b7053SJung-uk KimDH_get0_priv_key, DH_get0_pub_key, 8e71b7053SJung-uk KimDH_clear_flags, DH_test_flags, DH_set_flags, DH_get0_engine, 9e71b7053SJung-uk KimDH_get_length, DH_set_length - Routines for getting and setting data in a DH object 10e71b7053SJung-uk Kim 11e71b7053SJung-uk Kim=head1 SYNOPSIS 12e71b7053SJung-uk Kim 13e71b7053SJung-uk Kim #include <openssl/dh.h> 14e71b7053SJung-uk Kim 15b077aed3SPierre ProncheryThe following functions have been deprecated since OpenSSL 3.0, and can be 16b077aed3SPierre Proncheryhidden entirely by defining B<OPENSSL_API_COMPAT> with a suitable version value, 17b077aed3SPierre Proncherysee L<openssl_user_macros(7)>: 18b077aed3SPierre Pronchery 19e71b7053SJung-uk Kim void DH_get0_pqg(const DH *dh, 20e71b7053SJung-uk Kim const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); 21e71b7053SJung-uk Kim int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); 22e71b7053SJung-uk Kim void DH_get0_key(const DH *dh, 23e71b7053SJung-uk Kim const BIGNUM **pub_key, const BIGNUM **priv_key); 24e71b7053SJung-uk Kim int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); 25e71b7053SJung-uk Kim const BIGNUM *DH_get0_p(const DH *dh); 26e71b7053SJung-uk Kim const BIGNUM *DH_get0_q(const DH *dh); 27e71b7053SJung-uk Kim const BIGNUM *DH_get0_g(const DH *dh); 28e71b7053SJung-uk Kim const BIGNUM *DH_get0_priv_key(const DH *dh); 29e71b7053SJung-uk Kim const BIGNUM *DH_get0_pub_key(const DH *dh); 30e71b7053SJung-uk Kim void DH_clear_flags(DH *dh, int flags); 31e71b7053SJung-uk Kim int DH_test_flags(const DH *dh, int flags); 32e71b7053SJung-uk Kim void DH_set_flags(DH *dh, int flags); 33b077aed3SPierre Pronchery 34e71b7053SJung-uk Kim long DH_get_length(const DH *dh); 35e71b7053SJung-uk Kim int DH_set_length(DH *dh, long length); 36e71b7053SJung-uk Kim 37b077aed3SPierre Pronchery ENGINE *DH_get0_engine(DH *d); 38b077aed3SPierre Pronchery 39e71b7053SJung-uk Kim=head1 DESCRIPTION 40e71b7053SJung-uk Kim 41b077aed3SPierre ProncheryAll of the functions described on this page are deprecated. 42b077aed3SPierre ProncheryApplications should instead use L<EVP_PKEY_get_bn_param(3)> for any methods that 43*aa795734SPierre Proncheryreturn a B<BIGNUM>. Refer to L<EVP_PKEY-DH(7)> for more information. 44e71b7053SJung-uk Kim 45b077aed3SPierre ProncheryA DH object contains the parameters I<p>, I<q> and I<g>. Note that the I<q> 46b077aed3SPierre Proncheryparameter is optional. It also contains a public key (I<pub_key>) and 47b077aed3SPierre Pronchery(optionally) a private key (I<priv_key>). 48b077aed3SPierre Pronchery 49b077aed3SPierre ProncheryThe I<p>, I<q> and I<g> parameters can be obtained by calling DH_get0_pqg(). 50b077aed3SPierre ProncheryIf the parameters have not yet been set then I<*p>, I<*q> and I<*g> will be set 51e71b7053SJung-uk Kimto NULL. Otherwise they are set to pointers to their respective values. These 52e71b7053SJung-uk Kimpoint directly to the internal representations of the values and therefore 53e71b7053SJung-uk Kimshould not be freed directly. 54b077aed3SPierre ProncheryAny of the out parameters I<p>, I<q>, and I<g> can be NULL, in which case no 55e71b7053SJung-uk Kimvalue will be returned for that parameter. 56e71b7053SJung-uk Kim 57b077aed3SPierre ProncheryThe I<p>, I<q> and I<g> values can be set by calling DH_set0_pqg() and passing 58b077aed3SPierre Proncherythe new values for I<p>, I<q> and I<g> as parameters to the function. Calling 59e71b7053SJung-uk Kimthis function transfers the memory management of the values to the DH object, 60e71b7053SJung-uk Kimand therefore the values that have been passed in should not be freed directly 61b077aed3SPierre Proncheryafter this function has been called. The I<q> parameter may be NULL. 62b077aed3SPierre ProncheryDH_set0_pqg() also checks if the parameters associated with I<p> and I<g> and 63b077aed3SPierre Proncheryoptionally I<q> are associated with known safe prime groups. If it is a safe 64b077aed3SPierre Proncheryprime group then the value of I<q> will be set to q = (p - 1) / 2 if I<q> is 65b077aed3SPierre ProncheryNULL. The optional length parameter will be set to BN_num_bits(I<q>) if I<q> 66b077aed3SPierre Proncheryis not NULL. 67e71b7053SJung-uk Kim 68e71b7053SJung-uk KimTo get the public and private key values use the DH_get0_key() function. A 69b077aed3SPierre Proncherypointer to the public key will be stored in I<*pub_key>, and a pointer to the 70b077aed3SPierre Proncheryprivate key will be stored in I<*priv_key>. Either may be NULL if they have not 71e71b7053SJung-uk Kimbeen set yet, although if the private key has been set then the public key must 72e71b7053SJung-uk Kimbe. The values point to the internal representation of the public key and 73e71b7053SJung-uk Kimprivate key values. This memory should not be freed directly. 74b077aed3SPierre ProncheryAny of the out parameters I<pub_key> and I<priv_key> can be NULL, in which case 75e71b7053SJung-uk Kimno value will be returned for that parameter. 76e71b7053SJung-uk Kim 77e71b7053SJung-uk KimThe public and private key values can be set using DH_set0_key(). Either 78e71b7053SJung-uk Kimparameter may be NULL, which means the corresponding DH field is left 79e71b7053SJung-uk Kimuntouched. As with DH_set0_pqg() this function transfers the memory management 80e71b7053SJung-uk Kimof the key values to the DH object, and therefore they should not be freed 81e71b7053SJung-uk Kimdirectly after this function has been called. 82e71b7053SJung-uk Kim 83b077aed3SPierre ProncheryAny of the values I<p>, I<q>, I<g>, I<priv_key>, and I<pub_key> can also be 84e71b7053SJung-uk Kimretrieved separately by the corresponding function DH_get0_p(), DH_get0_q(), 85e71b7053SJung-uk KimDH_get0_g(), DH_get0_priv_key(), and DH_get0_pub_key(), respectively. 86e71b7053SJung-uk Kim 87b077aed3SPierre ProncheryDH_set_flags() sets the flags in the I<flags> parameter on the DH object. 88e71b7053SJung-uk KimMultiple flags can be passed in one go (bitwise ORed together). Any flags that 89e71b7053SJung-uk Kimare already set are left set. DH_test_flags() tests to see whether the flags 90b077aed3SPierre Proncherypassed in the I<flags> parameter are currently set in the DH object. Multiple 91e71b7053SJung-uk Kimflags can be tested in one go. All flags that are currently set are returned, or 92e71b7053SJung-uk Kimzero if none of the flags are set. DH_clear_flags() clears the specified flags 93e71b7053SJung-uk Kimwithin the DH object. 94e71b7053SJung-uk Kim 95e71b7053SJung-uk KimDH_get0_engine() returns a handle to the ENGINE that has been set for this DH 96b077aed3SPierre Proncheryobject, or NULL if no such ENGINE has been set. This function is deprecated. All 97b077aed3SPierre Proncheryengines should be replaced by providers. 98e71b7053SJung-uk Kim 99e71b7053SJung-uk KimThe DH_get_length() and DH_set_length() functions get and set the optional 10058f35182SJung-uk Kimlength parameter associated with this DH object. If the length is nonzero then 101b077aed3SPierre Proncheryit is used, otherwise it is ignored. The I<length> parameter indicates the 102b077aed3SPierre Proncherylength of the secret exponent (private key) in bits. For safe prime groups the optional length parameter I<length> can be 103b077aed3SPierre Proncheryset to a value greater or equal to 2 * maximum_target_security_strength(BN_num_bits(I<p>)) 104b077aed3SPierre Proncheryas listed in SP800-56Ar3 Table(s) 25 & 26. 105b077aed3SPierre ProncheryThese functions are deprecated and should be replaced with 106b077aed3SPierre ProncheryEVP_PKEY_CTX_set_params() and EVP_PKEY_get_int_param() using the parameter key 107b077aed3SPierre ProncheryB<OSSL_PKEY_PARAM_DH_PRIV_LEN> as described in L<EVP_PKEY-DH(7)>. 108e71b7053SJung-uk Kim 109e71b7053SJung-uk Kim=head1 NOTES 110e71b7053SJung-uk Kim 111e71b7053SJung-uk KimValues retrieved with DH_get0_key() are owned by the DH object used 112e71b7053SJung-uk Kimin the call and may therefore I<not> be passed to DH_set0_key(). If 113e71b7053SJung-uk Kimneeded, duplicate the received value using BN_dup() and pass the 114e71b7053SJung-uk Kimduplicate. The same applies to DH_get0_pqg() and DH_set0_pqg(). 115e71b7053SJung-uk Kim 116e71b7053SJung-uk Kim=head1 RETURN VALUES 117e71b7053SJung-uk Kim 118e71b7053SJung-uk KimDH_set0_pqg() and DH_set0_key() return 1 on success or 0 on failure. 119e71b7053SJung-uk Kim 120e71b7053SJung-uk KimDH_get0_p(), DH_get0_q(), DH_get0_g(), DH_get0_priv_key(), and DH_get0_pub_key() 121e71b7053SJung-uk Kimreturn the respective value, or NULL if it is unset. 122e71b7053SJung-uk Kim 123e71b7053SJung-uk KimDH_test_flags() returns the current state of the flags in the DH object. 124e71b7053SJung-uk Kim 125e71b7053SJung-uk KimDH_get0_engine() returns the ENGINE set for the DH object or NULL if no ENGINE 126e71b7053SJung-uk Kimhas been set. 127e71b7053SJung-uk Kim 128e71b7053SJung-uk KimDH_get_length() returns the length of the secret exponent (private key) in bits, 129e71b7053SJung-uk Kimor zero if no such length has been explicitly set. 130e71b7053SJung-uk Kim 131e71b7053SJung-uk Kim=head1 SEE ALSO 132e71b7053SJung-uk Kim 133e71b7053SJung-uk KimL<DH_new(3)>, L<DH_new(3)>, L<DH_generate_parameters(3)>, L<DH_generate_key(3)>, 134e71b7053SJung-uk KimL<DH_set_method(3)>, L<DH_size(3)>, L<DH_meth_new(3)> 135e71b7053SJung-uk Kim 136e71b7053SJung-uk Kim=head1 HISTORY 137e71b7053SJung-uk Kim 138e71b7053SJung-uk KimThe functions described here were added in OpenSSL 1.1.0. 139e71b7053SJung-uk Kim 140b077aed3SPierre ProncheryAll of these functions were deprecated in OpenSSL 3.0. 141b077aed3SPierre Pronchery 142e71b7053SJung-uk Kim=head1 COPYRIGHT 143e71b7053SJung-uk Kim 144*aa795734SPierre ProncheryCopyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved. 145e71b7053SJung-uk Kim 146b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License"). You may not use 147e71b7053SJung-uk Kimthis file except in compliance with the License. You can obtain a copy 148e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at 149e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>. 150e71b7053SJung-uk Kim 151e71b7053SJung-uk Kim=cut 152