xref: /freebsd/crypto/openssl/doc/man3/DH_get0_pqg.pod (revision aa7957345732816fb0ba8308798d2f79f45597f9)
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