| lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | =pod | 
|  | 2 |  | 
|  | 3 | =head1 NAME | 
|  | 4 |  | 
|  | 5 | Ed25519, | 
|  | 6 | Ed448 | 
|  | 7 | - EVP_PKEY Ed25519 and Ed448 support | 
|  | 8 |  | 
|  | 9 | =head1 DESCRIPTION | 
|  | 10 |  | 
|  | 11 | The B<Ed25519> and B<Ed448> EVP_PKEY implementation supports key generation, | 
|  | 12 | one-shot digest sign and digest verify using PureEdDSA and B<Ed25519> or B<Ed448> | 
|  | 13 | (see RFC8032). It has associated private and public key formats compatible with | 
|  | 14 | RFC 8410. | 
|  | 15 |  | 
|  | 16 | No additional parameters can be set during key generation, one-shot signing or | 
|  | 17 | verification. In particular, because PureEdDSA is used, a digest must B<NOT> be | 
|  | 18 | specified when signing or verifying. | 
|  | 19 |  | 
|  | 20 | =head1 NOTES | 
|  | 21 |  | 
|  | 22 | The PureEdDSA algorithm does not support the streaming mechanism | 
|  | 23 | of other signature algorithms using, for example, EVP_DigestUpdate(). | 
|  | 24 | The message to sign or verify must be passed using the one-shot | 
|  | 25 | EVP_DigestSign() and EVP_DigestVerify() functions. | 
|  | 26 |  | 
|  | 27 | When calling EVP_DigestSignInit() or EVP_DigestVerifyInit(), the | 
|  | 28 | digest B<type> parameter B<MUST> be set to B<NULL>. | 
|  | 29 |  | 
|  | 30 | Applications wishing to sign certificates (or other structures such as | 
|  | 31 | CRLs or certificate requests) using Ed25519 or Ed448 can either use X509_sign() | 
|  | 32 | or X509_sign_ctx() in the usual way. | 
|  | 33 |  | 
|  | 34 | A context for the B<Ed25519> algorithm can be obtained by calling: | 
|  | 35 |  | 
|  | 36 | EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519, NULL); | 
|  | 37 |  | 
|  | 38 | For the B<Ed448> algorithm a context can be obtained by calling: | 
|  | 39 |  | 
|  | 40 | EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED448, NULL); | 
|  | 41 |  | 
|  | 42 | Ed25519 or Ed448 private keys can be set directly using | 
|  | 43 | L<EVP_PKEY_new_raw_private_key(3)> or loaded from a PKCS#8 private key file | 
|  | 44 | using L<PEM_read_bio_PrivateKey(3)> (or similar function). Completely new keys | 
|  | 45 | can also be generated (see the example below). Setting a private key also sets | 
|  | 46 | the associated public key. | 
|  | 47 |  | 
|  | 48 | Ed25519 or Ed448 public keys can be set directly using | 
|  | 49 | L<EVP_PKEY_new_raw_public_key(3)> or loaded from a SubjectPublicKeyInfo | 
|  | 50 | structure in a PEM file using L<PEM_read_bio_PUBKEY(3)> (or similar function). | 
|  | 51 |  | 
|  | 52 | Ed25519 and Ed448 can be tested within L<speed(1)> application since version 1.1.1. | 
|  | 53 | Valid algorithm names are B<ed25519>, B<ed448> and B<eddsa>. If B<eddsa> is | 
|  | 54 | specified, then both Ed25519 and Ed448 are benchmarked. | 
|  | 55 |  | 
|  | 56 | =head1 EXAMPLES | 
|  | 57 |  | 
|  | 58 | This example generates an B<ED25519> private key and writes it to standard | 
|  | 59 | output in PEM format: | 
|  | 60 |  | 
|  | 61 | #include <openssl/evp.h> | 
|  | 62 | #include <openssl/pem.h> | 
|  | 63 | ... | 
|  | 64 | EVP_PKEY *pkey = NULL; | 
|  | 65 | EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519, NULL); | 
|  | 66 | EVP_PKEY_keygen_init(pctx); | 
|  | 67 | EVP_PKEY_keygen(pctx, &pkey); | 
|  | 68 | EVP_PKEY_CTX_free(pctx); | 
|  | 69 | PEM_write_PrivateKey(stdout, pkey, NULL, NULL, 0, NULL, NULL); | 
|  | 70 |  | 
|  | 71 | =head1 SEE ALSO | 
|  | 72 |  | 
|  | 73 | L<EVP_PKEY_CTX_new(3)>, | 
|  | 74 | L<EVP_PKEY_keygen(3)>, | 
|  | 75 | L<EVP_DigestSignInit(3)>, | 
|  | 76 | L<EVP_DigestVerifyInit(3)>, | 
|  | 77 |  | 
|  | 78 | =head1 COPYRIGHT | 
|  | 79 |  | 
|  | 80 | Copyright 2017-2020 The OpenSSL Project Authors. All Rights Reserved. | 
|  | 81 |  | 
|  | 82 | Licensed under the OpenSSL license (the "License").  You may not use | 
|  | 83 | this file except in compliance with the License.  You can obtain a copy | 
|  | 84 | in the file LICENSE in the source distribution or at | 
|  | 85 | L<https://www.openssl.org/source/license.html>. | 
|  | 86 |  | 
|  | 87 | =cut |