=pod

=head1 NAME

EVP_PKEY-FFC - EVP_PKEY DSA and DH/DHX shared FFC parameters.

=head1 DESCRIPTION

Finite field cryptography (FFC) is a method of implementing discrete logarithm
cryptography using finite field mathematics. DSA is an example of FFC and
Diffie-Hellman key establishment algorithms specified in SP800-56A can also be
implemented as FFC.

The B<DSA>, B<DH> and B<DHX> keytypes are implemented in OpenSSL's default and
FIPS providers.
The implementations support the basic DSA, DH and DHX keys, containing the public
and private keys I<pub> and I<priv> as well as the three main domain parameters
I<p>, I<q> and I<g>.

For B<DSA> (and B<DH> that is not a named group) the FIPS186-4 standard
specifies that the values used for FFC parameter generation are also required
for parameter validation.
This means that optional FFC domain parameter values for I<seed>, I<pcounter>
and I<gindex> may need to be stored for validation purposes.
For B<DH> the I<seed> and I<pcounter> can be stored in ASN1 data
(but the I<gindex> is not). For B<DSA> however, these fields are not stored in
the ASN1 data so they need to be stored externally if validation is required.

The B<DH> key type uses PKCS#3 format which saves p and g, but not the 'q' value.
The B<DHX> key type uses X9.42 format which saves the value of 'q' and this
must be used for FIPS186-4.

=head2 FFC parameters

In addition to the common parameters that all keytypes should support (see
L<provider-keymgmt(7)/Common parameters>), the B<DSA>, B<DH> and B<DHX> keytype
implementations support the following.

=over 4

=item "pub" (B<OSSL_PKEY_PARAM_PUB_KEY>) <unsigned integer>

The public key value.

=item "priv" (B<OSSL_PKEY_PARAM_PRIV_KEY>) <unsigned integer>

The private key value.

=back

=head2 FFC DSA, DH and DHX domain parameters

=over 4

=item "p" (B<OSSL_PKEY_PARAM_FFC_P>) <unsigned integer>

A DSA or Diffie-Hellman prime "p" value.

=item "g" (B<OSSL_PKEY_PARAM_FFC_G>) <unsigned integer>

A DSA or Diffie-Hellman generator "g" value.

=back

=head2 FFC DSA and DHX domain parameters

=over 4

=item "q" (B<OSSL_PKEY_PARAM_FFC_Q>) <unsigned integer>

A DSA or Diffie-Hellman prime "q" value.

=item "seed" (B<OSSL_PKEY_PARAM_FFC_SEED>) <octet string>

An optional domain parameter I<seed> value used during generation and validation
of I<p>, I<q> and canonical I<g>.
For validation this needs to set the I<seed> that was produced during generation.

=item "gindex" (B<OSSL_PKEY_PARAM_FFC_GINDEX>) <integer>

Sets the index to use for canonical generation and verification of the generator
I<g>.
Set this to a positive value from 0..FF to use this mode. This I<gindex> can
then be reused during key validation to verify the value of I<g>. If this value
is not set or is -1 then unverifiable generation of the generator I<g> will be
used.

=item "pcounter" (B<OSSL_PKEY_PARAM_FFC_PCOUNTER>) <integer>

An optional domain parameter I<counter> value that is output during generation
of I<p>. This value must be saved if domain parameter validation is required.

=item "hindex" (B<OSSL_PKEY_PARAM_FFC_H>) <integer>

For unverifiable generation of the generator I<g> this value is output during
generation of I<g>. Its value is the first integer larger than one that
satisfies g = h^j mod p (where g != 1 and "j" is the cofactor).

=item "j" (B<OSSL_PKEY_PARAM_FFC_COFACTOR>) <unsigned integer>

An optional informational cofactor parameter that should equal to (p - 1) / q.

=item "validate-pq" (B<OSSL_PKEY_PARAM_FFC_VALIDATE_PQ>) <unsigned integer>

=item "validate-g" (B<OSSL_PKEY_PARAM_FFC_VALIDATE_G>) <unsigned integer>

These boolean values are used during FIPS186-4 or FIPS186-2 key validation checks
(See L<EVP_PKEY_param_check(3)>) to select validation options. By default
I<validate-pq> and I<validate-g> are both set to 1 to check that p,q and g are
valid. Either of these may be set to 0 to skip a test, which is mainly useful
for testing purposes.

=item "validate-legacy" (B<OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY>) <unsigned integer>

This boolean value is used during key validation checks
(See L<EVP_PKEY_param_check(3)>) to select the validation type. The default
value of 0 selects FIPS186-4 validation. Setting this value to 1 selects
FIPS186-2 validation.

=back

=head2 FFC key generation parameters

The following key generation types are available for DSA and DHX algorithms:

=over 4

=item "type" (B<OSSL_PKEY_PARAM_FFC_TYPE>) <UTF8 string>

Sets the type of parameter generation. The shared valid values are:

=over 4

=item "fips186_4"

The current standard.

=item "fips186_2"

The old standard that should only be used for legacy purposes.

=item "default"

This can choose one of "fips186_4" or "fips186_2" depending on other
parameters set for parameter generation.

=back

=item "pbits" (B<OSSL_PKEY_PARAM_FFC_PBITS>) <unsigned integer>

Sets the size (in bits) of the prime 'p'.

=item "qbits" (B<OSSL_PKEY_PARAM_FFC_QBITS>) <unsigned integer>

Sets the size (in bits) of the prime 'q'.

For "fips186_4" this can be either 224 or 256.
For "fips186_2" this has a size of 160.

=item "digest" (B<OSSL_PKEY_PARAM_FFC_DIGEST>)  <UTF8 string>

Sets the Digest algorithm to be used as part of the Key Generation Function
associated with the given Key Generation I<ctx>.
This must also be set for key validation.

=item "properties" (B<OSSL_PKEY_PARAM_FFC_DIGEST_PROPS>) <UTF8 string>

Sets properties to be used upon look up of the implementation for the selected
Digest algorithm for the Key Generation Function associated with the given key
generation I<ctx>. This may also be set for key validation.

=item "seed" (B<OSSL_PKEY_PARAM_FFC_SEED>) <octet string>

For "fips186_4" or "fips186_2" generation this sets the I<seed> data to use
instead of generating a random seed internally. This should be used for
testing purposes only. This will either produce fixed values for the generated
parameters OR it will fail if the seed did not generate valid primes.

=item "gindex" (B<OSSL_PKEY_PARAM_FFC_GINDEX>) <integer>

=item "pcounter" (B<OSSL_PKEY_PARAM_FFC_PCOUNTER>) <integer>

=item "hindex" (B<OSSL_PKEY_PARAM_FFC_H>) <integer>

These types are described above.

=back

=head1 CONFORMING TO

The following sections of SP800-56Ar3:

=over 4

=item 5.5.1.1 FFC Domain Parameter Selection/Generation

=back

The following sections of FIPS 186-4:

=over 4

=item A.1.1.2 Generation of Probable Primes p and q Using an Approved Hash Function.

=item A.2.3 Generation of canonical generator g.

=item A.2.1 Unverifiable Generation of the Generator g.

=back

=head1 SEE ALSO

L<EVP_PKEY-DSA(7)>,
L<EVP_PKEY-DH(7)>,
L<EVP_SIGNATURE-DSA(7)>,
L<EVP_KEYEXCH-DH(7)>
L<EVP_KEYMGMT(3)>,
L<EVP_PKEY(3)>,
L<provider-keymgmt(7)>,
L<OSSL_PROVIDER-default(7)>,
L<OSSL_PROVIDER-FIPS(7)>,

=head1 COPYRIGHT

Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (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
