=pod

=head1 NAME

DH_generate_parameters_ex, DH_generate_parameters,
DH_check - generate and check Diffie-Hellman parameters

=head1 SYNOPSIS

 #include <openssl/dh.h>

 int DH_generate_parameters_ex(DH *dh, int prime_len,int generator, BN_GENCB *cb);

 int DH_check(DH *dh, int *codes);

Deprecated:

 #if OPENSSL_API_COMPAT < 0x00908000L
 DH *DH_generate_parameters(int prime_len, int generator,
     void (*callback)(int, int, void *), void *cb_arg);
 #endif

=head1 DESCRIPTION

DH_generate_parameters_ex() generates Diffie-Hellman parameters that can
be shared among a group of users, and stores them in the provided B<DH>
structure. The pseudo-random number generator must be
seeded prior to calling DH_generate_parameters().

B<prime_len> is the length in bits of the safe prime to be generated.
B<generator> is a small number E<gt> 1, typically 2 or 5.

A callback function may be used to provide feedback about the progress
of the key generation. If B<cb> is not B<NULL>, it will be
called as described in L<BN_generate_prime(3)> while a random prime
number is generated, and when a prime has been found, B<BN_GENCB_call(cb, 3, 0)>
is called. See L<BN_generate_prime(3)> for information on
the BN_GENCB_call() function.

DH_check() confirms that the Diffie-Hellman parameters B<dh> are valid. The
value of B<*codes> is updated with any problems found. If B<*codes> is zero then
no problems were found, otherwise the following bits may be set:

=over 4

=item DH_CHECK_P_NOT_PRIME

The parameter B<p> is not prime.

=item DH_CHECK_P_NOT_SAFE_PRIME

The parameter B<p> is not a safe prime and no B<q> value is present.

=item DH_UNABLE_TO_CHECK_GENERATOR

The generator B<g> cannot be checked for suitability.

=item DH_NOT_SUITABLE_GENERATOR

The generator B<g> is not suitable.

=item DH_CHECK_Q_NOT_PRIME

The parameter B<q> is not prime.

=item DH_CHECK_INVALID_Q_VALUE

The parameter B<q> is invalid.

=item DH_CHECK_INVALID_J_VALUE

The parameter B<j> is invalid.

=back

=head1 RETURN VALUES

DH_generate_parameters_ex() and DH_check() return 1 if the check could be
performed, 0 otherwise.

DH_generate_parameters() (deprecated) returns a pointer to the DH structure, or
NULL if the parameter generation fails.

The error codes can be obtained by L<ERR_get_error(3)>.

=head1 NOTES

DH_generate_parameters_ex() and DH_generate_parameters() may run for several
hours before finding a suitable prime.

The parameters generated by DH_generate_parameters_ex() and DH_generate_parameters()
are not to be used in signature schemes.

=head1 SEE ALSO

L<dh(3)>, L<ERR_get_error(3)>, L<rand(3)>,
L<DH_free(3)>

=head1 COPYRIGHT

Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the OpenSSL license (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut
