mirror of
https://github.com/openssl/openssl.git
synced 2025-01-30 14:01:55 +08:00
Document the new EVP_KEYEXCH type and related functions
Previous commits added the EVP_KEYEXCH type for representing key exchange algorithms. They also added various functions for fetching and using them, so we document all of those functions. Reviewed-by: Paul Dale <paul.dale@oracle.com> (Merged from https://github.com/openssl/openssl/pull/9266)
This commit is contained in:
parent
35aca9eccb
commit
12df11bdf1
11
CHANGES
11
CHANGES
@ -9,6 +9,17 @@
|
|||||||
|
|
||||||
Changes between 1.1.1 and 3.0.0 [xx XXX xxxx]
|
Changes between 1.1.1 and 3.0.0 [xx XXX xxxx]
|
||||||
|
|
||||||
|
*) A new type, EVP_KEYEXCH, has been introduced to represent key exchange
|
||||||
|
algorithms. An implementation of a key exchange algorithm can be obtained
|
||||||
|
by using the function EVP_KEYEXCH_fetch(). An EVP_KEYEXCH algorithm can be
|
||||||
|
used in a call to EVP_PKEY_derive_init_ex() which works in a similar way to
|
||||||
|
the older EVP_PKEY_derive_init() function. See the man pages for the new
|
||||||
|
functions for further details.
|
||||||
|
[Matt Caswell]
|
||||||
|
|
||||||
|
*) The EVP_PKEY_CTX_set_dh_pad() macro has now been converted to a function.
|
||||||
|
[Matt Caswell]
|
||||||
|
|
||||||
*) Removed the function names from error messages and deprecated the
|
*) Removed the function names from error messages and deprecated the
|
||||||
xxx_F_xxx define's.
|
xxx_F_xxx define's.
|
||||||
[Rich Salz]
|
[Rich Salz]
|
||||||
|
46
doc/man3/EVP_KEYEXCH_free.pod
Normal file
46
doc/man3/EVP_KEYEXCH_free.pod
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
EVP_KEYEXCH_free, EVP_KEYEXCH_up_ref
|
||||||
|
- Functions to manage EVP_KEYEXCH algorithm objects
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
#include <openssl/evp.h>
|
||||||
|
|
||||||
|
void EVP_KEYEXCH_free(EVP_KEYEXCH *exchange);
|
||||||
|
int EVP_KEYEXCH_up_ref(EVP_KEYEXCH *exchange);
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
EVP_KEYEXCH_free() decrements the reference count for the B<EVP_KEYEXCH>
|
||||||
|
structure. Typically this structure will have been obtained from an earlier call
|
||||||
|
to L<EVP_KEYEXCH_fetch(3)>. If the reference count drops to 0 then the
|
||||||
|
structure is freed.
|
||||||
|
|
||||||
|
EVP_KEYEXCH_up_ref() increments the reference count for an B<EVP_KEYEXCH>
|
||||||
|
structure.
|
||||||
|
|
||||||
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
EVP_KEYEXCH_up_ref() returns 1 for success or 0 otherwise.
|
||||||
|
|
||||||
|
=head1 SEE ALSO
|
||||||
|
|
||||||
|
L<EVP_KEYEXCH_fetch(3)>
|
||||||
|
|
||||||
|
=head1 HISTORY
|
||||||
|
|
||||||
|
The functions described here were added in OpenSSL 3.0.
|
||||||
|
|
||||||
|
=head1 COPYRIGHT
|
||||||
|
|
||||||
|
Copyright 2019 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
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
EVP_MD_fetch, EVP_CIPHER_fetch
|
EVP_MD_fetch, EVP_CIPHER_fetch, EVP_KEYEXCH_fetch
|
||||||
- Functions to explicitly fetch algorithm implementations
|
- Functions to explicitly fetch algorithm implementations
|
||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
@ -13,6 +13,8 @@ EVP_MD_fetch, EVP_CIPHER_fetch
|
|||||||
const char *properties);
|
const char *properties);
|
||||||
EVP_CIPHER *EVP_CIPHER_fetch(OPENSSL_CTX *ctx, const char *algorithm,
|
EVP_CIPHER *EVP_CIPHER_fetch(OPENSSL_CTX *ctx, const char *algorithm,
|
||||||
const char *properties);
|
const char *properties);
|
||||||
|
EVP_KEYEXCH *EVP_KEYEXCH_fetch(OPENSSL_CTX *ctx, const char *algorithm,
|
||||||
|
const char *properties);
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
@ -38,6 +40,10 @@ Represents a Message Authentication Code algorithm.
|
|||||||
|
|
||||||
Represents a Key Derivation Function algorithm.
|
Represents a Key Derivation Function algorithm.
|
||||||
|
|
||||||
|
=item B<EVP_KEYEXCH>
|
||||||
|
|
||||||
|
Represents a Key Exchange algorithm.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
The algorithm objects may or may not have an associated algorithm
|
The algorithm objects may or may not have an associated algorithm
|
||||||
@ -62,6 +68,12 @@ Typically, this will return an implementation of the appropriate algorithm from
|
|||||||
the default provider unless the default search criteria have been changed and/or
|
the default provider unless the default search criteria have been changed and/or
|
||||||
different providers have been loaded.
|
different providers have been loaded.
|
||||||
|
|
||||||
|
Implicit fetching can also occur with functions such as
|
||||||
|
L<EVP_PKEY_CTX_derive_init_ex(3)> where a NULL algorithm parameter is supplied.
|
||||||
|
In this case an algorithm implementation is implicitly fetched using default
|
||||||
|
search criteria and an algorithm name that is consistent with the type of
|
||||||
|
EVP_PKEY being used.
|
||||||
|
|
||||||
=item Explicit Fetch
|
=item Explicit Fetch
|
||||||
|
|
||||||
With explicit fetch an application uses one of the "fetch" functions to obtain
|
With explicit fetch an application uses one of the "fetch" functions to obtain
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
|
EVP_PKEY_CTX_set_params,
|
||||||
EVP_PKEY_CTX_ctrl,
|
EVP_PKEY_CTX_ctrl,
|
||||||
EVP_PKEY_CTX_ctrl_str,
|
EVP_PKEY_CTX_ctrl_str,
|
||||||
EVP_PKEY_CTX_ctrl_uint64,
|
EVP_PKEY_CTX_ctrl_uint64,
|
||||||
@ -62,6 +63,8 @@ EVP_PKEY_CTX_set1_id, EVP_PKEY_CTX_get1_id, EVP_PKEY_CTX_get1_id_len
|
|||||||
|
|
||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
|
|
||||||
|
int EVP_PKEY_CTX_set_params(EVP_PKEY_CTX *ctx, OSSL_PARAM *params);
|
||||||
|
|
||||||
int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
|
int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
|
||||||
int cmd, int p1, void *p2);
|
int cmd, int p1, void *p2);
|
||||||
int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype,
|
int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype,
|
||||||
@ -141,6 +144,25 @@ EVP_PKEY_CTX_set1_id, EVP_PKEY_CTX_get1_id, EVP_PKEY_CTX_get1_id_len
|
|||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
The EVP_PKEY_CTX_set_params() function sends arbitrary parameters to the
|
||||||
|
algorithm implementation.
|
||||||
|
Not all parameters may be supported by all providers.
|
||||||
|
See L<OSSL_PROVIDER(3)> for more information on providers.
|
||||||
|
See L<OSSL_PARAM(3)> for more information on parameters.
|
||||||
|
The parameters currently supported by the default provider are:
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
=item OSSL_EXCHANGE_PARAM_PAD (int type)
|
||||||
|
|
||||||
|
Sets the DH padding mode.
|
||||||
|
If B<OSSL_EXCHANGE_PARAM_PAD> is 1 then the shared secret is padded with zeroes
|
||||||
|
up to the size of the DH prime B<p>.
|
||||||
|
If B<OSSL_EXCHANGE_PARAM_PAD> is zero (the default) then no padding is
|
||||||
|
performed.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
The function EVP_PKEY_CTX_ctrl() sends a control operation to the context
|
The function EVP_PKEY_CTX_ctrl() sends a control operation to the context
|
||||||
B<ctx>. The key type used must match B<keytype> if it is not -1. The parameter
|
B<ctx>. The key type used must match B<keytype> if it is not -1. The parameter
|
||||||
B<optype> is a mask indicating which operations the control can be applied to.
|
B<optype> is a mask indicating which operations the control can be applied to.
|
||||||
@ -290,8 +312,9 @@ The EVP_PKEY_CTX_set_dh_paramgen_type() macro sets the key type for DH
|
|||||||
parameter generation. Use 0 for PKCS#3 DH and 1 for X9.42 DH.
|
parameter generation. Use 0 for PKCS#3 DH and 1 for X9.42 DH.
|
||||||
The default is 0.
|
The default is 0.
|
||||||
|
|
||||||
The EVP_PKEY_CTX_set_dh_pad() macro sets the DH padding mode. If B<pad> is
|
The EVP_PKEY_CTX_set_dh_pad() function sets the DH padding mode.
|
||||||
1 the shared secret is padded with zeroes up to the size of the DH prime B<p>.
|
If B<pad> is 1 the shared secret is padded with zeroes up to the size of the DH
|
||||||
|
prime B<p>.
|
||||||
If B<pad> is zero (the default) then no padding is performed.
|
If B<pad> is zero (the default) then no padding is performed.
|
||||||
|
|
||||||
EVP_PKEY_CTX_set_dh_nid() sets the DH parameters to values corresponding to
|
EVP_PKEY_CTX_set_dh_nid() sets the DH parameters to values corresponding to
|
||||||
@ -458,6 +481,9 @@ The
|
|||||||
EVP_PKEY_CTX_set1_id(), EVP_PKEY_CTX_get1_id() and EVP_PKEY_CTX_get1_id_len()
|
EVP_PKEY_CTX_set1_id(), EVP_PKEY_CTX_get1_id() and EVP_PKEY_CTX_get1_id_len()
|
||||||
macros were added in 1.1.1, other functions were added in OpenSSL 1.0.0.
|
macros were added in 1.1.1, other functions were added in OpenSSL 1.0.0.
|
||||||
|
|
||||||
|
EVP_PKEY_CTX_set_dh_pad() was a macro in OpenSSL 1.1.1 and below.
|
||||||
|
From OpenSSL 3.0 it is a function.
|
||||||
|
|
||||||
=head1 COPYRIGHT
|
=head1 COPYRIGHT
|
||||||
|
|
||||||
Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
|
Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||||
|
@ -2,20 +2,33 @@
|
|||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
EVP_PKEY_derive_init, EVP_PKEY_derive_set_peer, EVP_PKEY_derive - derive public key algorithm shared secret
|
EVP_PKEY_derive_init, EVP_PKEY_derive_init_ex, EVP_PKEY_derive_set_peer,
|
||||||
|
EVP_PKEY_derive - derive public key algorithm shared secret
|
||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
|
|
||||||
|
int EVP_PKEY_derive_init_ex(EVP_PKEY_CTX *ctx, EVP_KEYEXCH *exchange);
|
||||||
int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
|
int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
|
||||||
int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
|
int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
|
||||||
int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
|
int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
The EVP_PKEY_derive_init() function initializes a public key algorithm
|
The EVP_PKEY_derive_init_ex() function initializes a public key algorithm
|
||||||
context using key B<pkey> for shared secret derivation.
|
context for shared secret derivation using the key exchange algorithm
|
||||||
|
B<exchange>.
|
||||||
|
The key exchange algorithm B<exchange> should be fetched using a call to
|
||||||
|
L<EVP_KEYEXCH_fetch(3)>.
|
||||||
|
The EVP_PKEY object associated with B<ctx> must be compatible with that
|
||||||
|
algorithm.
|
||||||
|
B<exchange> may be NULL in which case the EVP_KEYEXCH algorithm is fetched
|
||||||
|
implicitly based on the type of EVP_PKEY associated with B<ctx>.
|
||||||
|
See L<EVP_KEYEXCH_fetch(3)> for more information about implict fetches.
|
||||||
|
|
||||||
|
The EVP_PKEY_derive_init() function is the same as EVP_PKEY_derive() except that
|
||||||
|
the EVP_KEYEXCH algorithm is always implicitly fetched.
|
||||||
|
|
||||||
The EVP_PKEY_derive_set_peer() function sets the peer key: this will normally
|
The EVP_PKEY_derive_set_peer() function sets the peer key: this will normally
|
||||||
be a public key.
|
be a public key.
|
||||||
@ -29,18 +42,19 @@ written to B<keylen>.
|
|||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
After the call to EVP_PKEY_derive_init() algorithm specific control
|
After the call to EVP_PKEY_derive_init() or EVP_PKEY_derive_init_ex() algorithm
|
||||||
operations can be performed to set any appropriate parameters for the
|
specific control operations can be performed to set any appropriate parameters
|
||||||
operation.
|
for the operation.
|
||||||
|
|
||||||
The function EVP_PKEY_derive() can be called more than once on the same
|
The function EVP_PKEY_derive() can be called more than once on the same
|
||||||
context if several operations are performed using the same parameters.
|
context if several operations are performed using the same parameters.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
EVP_PKEY_derive_init() and EVP_PKEY_derive() return 1 for success and 0
|
EVP_PKEY_derive_init_ex(), EVP_PKEY_derive_init() and EVP_PKEY_derive() return 1
|
||||||
or a negative value for failure. In particular a return value of -2
|
for success and 0 or a negative value for failure.
|
||||||
indicates the operation is not supported by the public key algorithm.
|
In particular a return value of -2 indicates the operation is not supported by
|
||||||
|
the public key algorithm.
|
||||||
|
|
||||||
=head1 EXAMPLE
|
=head1 EXAMPLE
|
||||||
|
|
||||||
@ -86,10 +100,12 @@ L<EVP_PKEY_decrypt(3)>,
|
|||||||
L<EVP_PKEY_sign(3)>,
|
L<EVP_PKEY_sign(3)>,
|
||||||
L<EVP_PKEY_verify(3)>,
|
L<EVP_PKEY_verify(3)>,
|
||||||
L<EVP_PKEY_verify_recover(3)>,
|
L<EVP_PKEY_verify_recover(3)>,
|
||||||
|
L<EVP_KEYEXCH_fetch(3)>
|
||||||
|
|
||||||
=head1 HISTORY
|
=head1 HISTORY
|
||||||
|
|
||||||
These functions were added in OpenSSL 1.0.0.
|
These functions were added in OpenSSL 1.0.0. The EVP_PKEY_derive_init_ex()
|
||||||
|
function was added in OpenSSL 3.0.
|
||||||
|
|
||||||
=head1 COPYRIGHT
|
=head1 COPYRIGHT
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user