xref: /netbsd-src/crypto/external/bsd/openssl.old/dist/doc/man3/DH_meth_new.pod (revision 4724848cf0da353df257f730694b7882798e5daf)
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