Blame doc/man7/EVP_KDF_KRB5KDF.pod

Packit Service 084de1
=pod
Packit Service 084de1
Packit Service 084de1
=head1 NAME
Packit Service 084de1
Packit Service 084de1
EVP_KDF_KRB5KDF - The RFC3961 Krb5 KDF EVP_KDF implementation
Packit Service 084de1
Packit Service 084de1
=head1 DESCRIPTION
Packit Service 084de1
Packit Service 084de1
Support for computing the B<KRB5KDF> KDF through the B<EVP_KDF> API.
Packit Service 084de1
Packit Service 084de1
The B<EVP_KDF_KRB5KDF> algorithm implements the key derivation function defined
Packit Service 084de1
in RFC 3961, section 5.1 and is used by Krb5 to derive session keys.
Packit Service 084de1
Three inputs are required to perform key derivation: a cipher, (for example
Packit Service 084de1
AES-128-CBC), the initial key, and a constant.
Packit Service 084de1
Packit Service 084de1
=head2 Numeric identity
Packit Service 084de1
Packit Service 084de1
B<EVP_KDF_KRB5KDF> is the numeric identity for this implementation; it can be used with the
Packit Service 084de1
EVP_KDF_CTX_new_id() function.
Packit Service 084de1
Packit Service 084de1
=head2 Supported controls
Packit Service 084de1
Packit Service 084de1
The supported controls are:
Packit Service 084de1
Packit Service 084de1
=over 4
Packit Service 084de1
Packit Service 084de1
=item B<EVP_KDF_CTRL_SET_CIPHER>
Packit Service 084de1
Packit Service 084de1
=item B<EVP_KDF_CTRL_SET_KEY>
Packit Service 084de1
Packit Service 084de1
These controls work as described in L<EVP_KDF_CTX(3)/CONTROLS>.
Packit Service 084de1
Packit Service 084de1
=item B<EVP_KDF_CTRL_SET_KRB5KDF_CONSTANT>
Packit Service 084de1
Packit Service 084de1
This control expects two arguments: C<unsigned char *constant>, C<size_t constantlen>
Packit Service 084de1
Packit Service 084de1
This control sets the I<constant> value for the KDF.
Packit Service 084de1
If a value is already set, the contents are replaced.
Packit Service 084de1
Packit Service 084de1
=back
Packit Service 084de1
Packit Service 084de1
Packit Service 084de1
=head1 NOTES
Packit Service 084de1
Packit Service 084de1
A context for KRB5KDF can be obtained by calling:
Packit Service 084de1
Packit Service 084de1
 EVP_KDF_CTX *kctx = EVP_KDF_CTX_new_id(EVP_KDF_KRB5KDF);
Packit Service 084de1
Packit Service 084de1
The output length of the KRB5KDF derivation is specified via the I<keylen>
Packit Service 084de1
parameter to the L<EVP_KDF_derive(3)> function, and MUST match the key
Packit Service 084de1
length for the chosen cipher or an error is returned. Moreover the
Packit Service 084de1
I<constant>'s length must not exceed the block size of the cipher.
Packit Service 084de1
Since the KRB5KDF output length depends on the chosen cipher, calling
Packit Service 084de1
L<EVP_KDF_size()> to obtain the requisite length returns the correct length
Packit Service 084de1
only after the cipher is set. Prior to that B<EVP_MAX_KEY_LENGTH> is returned.
Packit Service 084de1
The caller must allocate a buffer of the correct length for the chosen
Packit Service 084de1
cipher, and pass that buffer to the L<EVP_KDF_derive(3)> function along
Packit Service 084de1
with that length.
Packit Service 084de1
Packit Service 084de1
=head1 EXAMPLES
Packit Service 084de1
Packit Service 084de1
This example derives a key using the AES-128-CBC cipher:
Packit Service 084de1
Packit Service 084de1
 EVP_KDF_CTX *kctx;
Packit Service 084de1
 unsigned char key[16] = "01234...";
Packit Service 084de1
 unsigned char constant[] = "I'm a constant";
Packit Service 084de1
 unsigned char out[16];
Packit Service 084de1
 size_t outlen = sizeof(out);
Packit Service 084de1
Packit Service 084de1
 kctx = EVP_KDF_CTX_new_id(EVP_KDF_KRB5KDF);
Packit Service 084de1
Packit Service 084de1
 EVP_KDF_ctrl(kctx, EVP_KDF_CTRL_SET_CIPHER, EVP_aes_128_cbc());
Packit Service 084de1
 EVP_KDF_ctrl(kctx, EVP_KDF_CTRL_SET_KEY, key, (size_t)16);
Packit Service 084de1
 EVP_KDF_ctrl(kctx, EVP_KDF_CTRL_SET_KRB5KDF_CONSTANT, constant, strlen(constant));
Packit Service 084de1
 if (EVP_KDF_derive(kctx, out, outlen) <= 0)
Packit Service 084de1
     /* Error */
Packit Service 084de1
 EVP_KDF_CTX_free(kctx);
Packit Service 084de1
Packit Service 084de1
=head1 CONFORMING TO
Packit Service 084de1
Packit Service 084de1
RFC 3961
Packit Service 084de1
Packit Service 084de1
=head1 SEE ALSO
Packit Service 084de1
Packit Service 084de1
L<EVP_KDF_CTX(3)>,
Packit Service 084de1
L<EVP_KDF_CTX_new_id(3)>,
Packit Service 084de1
L<EVP_KDF_CTX_free(3)>,
Packit Service 084de1
L<EVP_KDF_ctrl(3)>,
Packit Service 084de1
L<EVP_KDF_size(3)>,
Packit Service 084de1
L<EVP_KDF_derive(3)>,
Packit Service 084de1
L<EVP_KDF_CTX(3)/CONTROLS>
Packit Service 084de1
Packit Service 084de1
=head1 HISTORY
Packit Service 084de1
Packit Service 084de1
This functionality was added to OpenSSL 3.0.
Packit Service 084de1
Packit Service 084de1
=head1 COPYRIGHT
Packit Service 084de1
Packit Service 084de1
Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
Packit Service 084de1
Packit Service 084de1
Licensed under the OpenSSL license (the "License").  You may not use
Packit Service 084de1
this file except in compliance with the License.  You can obtain a copy
Packit Service 084de1
in the file LICENSE in the source distribution or at
Packit Service 084de1
L<https://www.openssl.org/source/license.html>.
Packit Service 084de1
Packit Service 084de1
=cut
Packit Service 084de1