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