Blame doc/man7/EVP_KDF_SS.pod

Packit Service 084de1
=pod
Packit Service 084de1
Packit Service 084de1
=head1 NAME
Packit Service 084de1
Packit Service 084de1
EVP_KDF_SS - The Single Step / One Step EVP_KDF implementation
Packit Service 084de1
Packit Service 084de1
=head1 DESCRIPTION
Packit Service 084de1
Packit Service 084de1
The EVP_KDF_SS algorithm implements the Single Step key derivation function (SSKDF).
Packit Service 084de1
SSKDF derives a key using input such as a shared secret key (that was generated
Packit Service 084de1
during the execution of a key establishment scheme) and fixedinfo.
Packit Service 084de1
SSKDF is also informally referred to as 'Concat KDF'.
Packit Service 084de1
Packit Service 084de1
=head2 Auxilary function
Packit Service 084de1
Packit Service 084de1
The implementation uses a selectable auxiliary function H, which can be in the
Packit Service 084de1
backported version only a:
Packit Service 084de1
Packit Service 084de1
=over 4
Packit Service 084de1
Packit Service 084de1
=item B<H(x) = hash(x, digest=md)>
Packit Service 084de1
Packit Service 084de1
=back
Packit Service 084de1
Packit Service 084de1
=head2 Numeric identity
Packit Service 084de1
Packit Service 084de1
B<EVP_KDF_SS> is the numeric identity for this implementation; it
Packit Service 084de1
can be used with the 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_MD>
Packit Service 084de1
Packit Service 084de1
This control works as described in L<EVP_KDF_CTX(3)/CONTROLS>.
Packit Service 084de1
Packit Service 084de1
=item B<EVP_KDF_CTRL_SET_KEY>
Packit Service 084de1
Packit Service 084de1
This control expects two arguments: C<unsigned char *secret>, C<size_t secretlen>
Packit Service 084de1
Packit Service 084de1
The shared secret used for key derivation.  This control sets the secret.
Packit Service 084de1
Packit Service 084de1
EVP_KDF_ctrl_str() takes two type strings for this control:
Packit Service 084de1
Packit Service 084de1
=over 4
Packit Service 084de1
Packit Service 084de1
=item "secret"
Packit Service 084de1
Packit Service 084de1
The value string is used as is.
Packit Service 084de1
Packit Service 084de1
=item "hexsecret"
Packit Service 084de1
Packit Service 084de1
The value string is expected to be a hexadecimal number, which will be
Packit Service 084de1
decoded before being passed on as the control value.
Packit Service 084de1
Packit Service 084de1
=back
Packit Service 084de1
Packit Service 084de1
=item B<EVP_KDF_CTRL_SET_SSKDF_INFO>
Packit Service 084de1
Packit Service 084de1
This control expects two arguments: C<unsigned char *info>, C<size_t infolen>
Packit Service 084de1
Packit Service 084de1
An optional value for fixedinfo, also known as otherinfo. This control sets the fixedinfo.
Packit Service 084de1
Packit Service 084de1
EVP_KDF_ctrl_str() takes two type strings for this control:
Packit Service 084de1
Packit Service 084de1
=over 4
Packit Service 084de1
Packit Service 084de1
=item "info"
Packit Service 084de1
Packit Service 084de1
The value string is used as is.
Packit Service 084de1
Packit Service 084de1
=item "hexinfo"
Packit Service 084de1
Packit Service 084de1
The value string is expected to be a hexadecimal number, which will be
Packit Service 084de1
decoded before being passed on as the control value.
Packit Service 084de1
Packit Service 084de1
=back
Packit Service 084de1
Packit Service 084de1
=back
Packit Service 084de1
Packit Service 084de1
=head1 NOTES
Packit Service 084de1
Packit Service 084de1
A context for SSKDF can be obtained by calling:
Packit Service 084de1
Packit Service 084de1
EVP_KDF_CTX *kctx = EVP_KDF_CTX_new_id(EVP_KDF_SS);
Packit Service 084de1
Packit Service 084de1
The output length of an SSKDF is specified via the C<keylen>
Packit Service 084de1
parameter to the L<EVP_KDF_derive(3)> function.
Packit Service 084de1
Packit Service 084de1
=head1 EXAMPLE
Packit Service 084de1
Packit Service 084de1
This example derives 10 bytes using H(x) = SHA-256, with the secret key "secret"
Packit Service 084de1
and fixedinfo value "label":
Packit Service 084de1
Packit Service 084de1
  EVP_KDF_CTX *kctx;
Packit Service 084de1
  unsigned char out[10];
Packit Service 084de1
Packit Service 084de1
  kctx = EVP_KDF_CTX_new_id(EVP_KDF_SS);
Packit Service 084de1
Packit Service 084de1
  if (EVP_KDF_ctrl(kctx, EVP_KDF_CTRL_SET_MD, EVP_sha256()) <= 0) {
Packit Service 084de1
      error("EVP_KDF_CTRL_SET_MD");
Packit Service 084de1
  }
Packit Service 084de1
  if (EVP_KDF_ctrl(kctx, EVP_KDF_CTRL_SET_KEY, "secret", (size_t)6) <= 0) {
Packit Service 084de1
      error("EVP_KDF_CTRL_SET_KEY");
Packit Service 084de1
  }
Packit Service 084de1
  if (EVP_KDF_ctrl(kctx, EVP_KDF_CTRL_SET_SSKDF_INFO, "label", (size_t)5) <= 0) {
Packit Service 084de1
      error("EVP_KDF_CTRL_SET_SSKDF_INFO");
Packit Service 084de1
  }
Packit Service 084de1
  if (EVP_KDF_derive(kctx, out, sizeof(out)) <= 0) {
Packit Service 084de1
      error("EVP_KDF_derive");
Packit Service 084de1
  }
Packit Service 084de1
Packit Service 084de1
  EVP_KDF_CTX_free(kctx);
Packit Service 084de1
Packit Service 084de1
=head1 CONFORMING TO
Packit Service 084de1
Packit Service 084de1
NIST SP800-56Cr1.
Packit Service 084de1
Packit Service 084de1
=head1 SEE ALSO
Packit Service 084de1
Packit Service 084de1
L<EVP_KDF_CTX>,
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.0.
Packit Service 084de1
Packit Service 084de1
=head1 COPYRIGHT
Packit Service 084de1
Packit Service 084de1
Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.  Copyright
Packit Service 084de1
(c) 2019, Oracle and/or its affiliates.  All rights reserved.
Packit Service 084de1
Packit Service 084de1
Licensed under the Apache License 2.0 (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