Blame doc/man7/Ed25519.pod

Packit c4476c
=pod
Packit c4476c
Packit c4476c
=head1 NAME
Packit c4476c
Packit c4476c
Ed25519,
Packit c4476c
Ed448
Packit c4476c
- EVP_PKEY Ed25519 and Ed448 support
Packit c4476c
Packit c4476c
=head1 DESCRIPTION
Packit c4476c
Packit c4476c
The B<Ed25519> and B<Ed448> EVP_PKEY implementation supports key generation,
Packit c4476c
one-shot digest sign and digest verify using PureEdDSA and B<Ed25519> or B<Ed448>
Packit c4476c
(see RFC8032). It has associated private and public key formats compatible with
Packit c4476c
RFC 8410.
Packit c4476c
Packit c4476c
No additional parameters can be set during key generation, one-shot signing or
Packit c4476c
verification. In particular, because PureEdDSA is used, a digest must B<NOT> be
Packit c4476c
specified when signing or verifying.
Packit c4476c
Packit c4476c
=head1 NOTES
Packit c4476c
Packit c4476c
The PureEdDSA algorithm does not support the streaming mechanism
Packit c4476c
of other signature algorithms using, for example, EVP_DigestUpdate().
Packit c4476c
The message to sign or verify must be passed using the one-shot
Packit c4476c
EVP_DigestSign() and EVP_DigestVerify() functions.
Packit c4476c
Packit c4476c
When calling EVP_DigestSignInit() or EVP_DigestVerifyInit(), the
Packit c4476c
digest B<type> parameter B<MUST> be set to B<NULL>.
Packit c4476c
Packit c4476c
Applications wishing to sign certificates (or other structures such as
Packit c4476c
CRLs or certificate requests) using Ed25519 or Ed448 can either use X509_sign()
Packit c4476c
or X509_sign_ctx() in the usual way.
Packit c4476c
Packit c4476c
A context for the B<Ed25519> algorithm can be obtained by calling:
Packit c4476c
Packit c4476c
 EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519, NULL);
Packit c4476c
Packit c4476c
For the B<Ed448> algorithm a context can be obtained by calling:
Packit c4476c
Packit c4476c
 EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED448, NULL);
Packit c4476c
Packit c4476c
Ed25519 or Ed448 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
Ed25519 or Ed448 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
Ed25519 and Ed448 can be tested within L<speed(1)> application since version 1.1.1.
Packit c4476c
Valid algorithm names are B<ed25519>, B<ed448> and B<eddsa>. If B<eddsa> is
Packit c4476c
specified, then both Ed25519 and Ed448 are benchmarked.
Packit c4476c
Packit c4476c
=head1 EXAMPLES
Packit c4476c
Packit c4476c
This example generates an B<ED25519> 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_ED25519, 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
=head1 SEE ALSO
Packit c4476c
Packit c4476c
L<EVP_PKEY_CTX_new(3)>,
Packit c4476c
L<EVP_PKEY_keygen(3)>,
Packit c4476c
L<EVP_DigestSignInit(3)>,
Packit c4476c
L<EVP_DigestVerifyInit(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