Blame doc/man7/X25519.pod

Packit c4476c
=pod
Packit c4476c
Packit c4476c
=head1 NAME
Packit c4476c
Packit c4476c
X25519,
Packit c4476c
X448
Packit c4476c
- EVP_PKEY X25519 and X448 support
Packit c4476c
Packit c4476c
=head1 DESCRIPTION
Packit c4476c
Packit c4476c
The B<X25519> and B<X448> EVP_PKEY implementation supports key generation and
Packit c4476c
key derivation using B<X25519> and B<X448>. It has associated private and public
Packit c4476c
key formats compatible with RFC 8410.
Packit c4476c
Packit c4476c
No additional parameters can be set during key generation.
Packit c4476c
Packit c4476c
The peer public key must be set using EVP_PKEY_derive_set_peer() when
Packit c4476c
performing key derivation.
Packit c4476c
Packit c4476c
=head1 NOTES
Packit c4476c
Packit c4476c
A context for the B<X25519> algorithm can be obtained by calling:
Packit c4476c
Packit c4476c
 EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X25519, NULL);
Packit c4476c
Packit c4476c
For the B<X448> algorithm a context can be obtained by calling:
Packit c4476c
Packit c4476c
 EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X448, NULL);
Packit c4476c
Packit c4476c
X25519 or X448 private keys can be set directly using
Packit c4476c
L<EVP_PKEY_new_raw_private_key(3)> or loaded from a PKCS#8 private key file
Packit c4476c
using L<PEM_read_bio_PrivateKey(3)> (or similar function). Completely new keys
Packit c4476c
can also be generated (see the example below). Setting a private key also sets
Packit c4476c
the associated public key.
Packit c4476c
Packit c4476c
X25519 or X448 public keys can be set directly using
Packit c4476c
L<EVP_PKEY_new_raw_public_key(3)> or loaded from a SubjectPublicKeyInfo
Packit c4476c
structure in a PEM file using L<PEM_read_bio_PUBKEY(3)> (or similar function).
Packit c4476c
Packit c4476c
=head1 EXAMPLES
Packit c4476c
Packit c4476c
This example generates an B<X25519> private key and writes it to standard
Packit c4476c
output in PEM format:
Packit c4476c
Packit c4476c
 #include <openssl/evp.h>
Packit c4476c
 #include <openssl/pem.h>
Packit c4476c
 ...
Packit c4476c
 EVP_PKEY *pkey = NULL;
Packit c4476c
 EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X25519, NULL);
Packit c4476c
 EVP_PKEY_keygen_init(pctx);
Packit c4476c
 EVP_PKEY_keygen(pctx, &pkey);
Packit c4476c
 EVP_PKEY_CTX_free(pctx);
Packit c4476c
 PEM_write_PrivateKey(stdout, pkey, NULL, NULL, 0, NULL, NULL);
Packit c4476c
Packit c4476c
The key derivation example in L<EVP_PKEY_derive(3)> can be used with
Packit c4476c
B<X25519> and B<X448>.
Packit c4476c
Packit c4476c
=head1 SEE ALSO
Packit c4476c
Packit c4476c
L<EVP_PKEY_CTX_new(3)>,
Packit c4476c
L<EVP_PKEY_keygen(3)>,
Packit c4476c
L<EVP_PKEY_derive(3)>,
Packit c4476c
L<EVP_PKEY_derive_set_peer(3)>
Packit c4476c
Packit c4476c
=head1 COPYRIGHT
Packit c4476c
Packit c4476c
Copyright 2017-2020 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
Packit c4476c
Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
this file except in compliance with the License.  You can obtain a copy
Packit c4476c
in the file LICENSE in the source distribution or at
Packit c4476c
L<https://www.openssl.org/source/license.html>.
Packit c4476c
Packit c4476c
=cut