]>
Commit | Line | Data |
---|---|---|
74e78361 DSH |
1 | =pod |
2 | ||
3 | =head1 NAME | |
4 | ||
a2eecb5d MC |
5 | Ed25519, |
6 | Ed448 | |
7 | - EVP_PKEY Ed25519 and Ed448 support | |
74e78361 DSH |
8 | |
9 | =head1 DESCRIPTION | |
10 | ||
a2eecb5d MC |
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 | |
74e78361 DSH |
14 | draft-ietf-curdle-pkix-04. |
15 | ||
a2eecb5d | 16 | No additional parameters can be set during key generation one-shot signing or |
74e78361 DSH |
17 | verification. In particular, because PureEdDSA is used, when signing or |
18 | verifying a digest must B<NOT> be specified. | |
19 | ||
20 | =head1 NOTES | |
21 | ||
a970b14f | 22 | The PureEdDSA algorithm does not support the streaming mechanism |
74e78361 | 23 | of other signature algorithms using, for example, EVP_DigestUpdate(). |
a2eecb5d | 24 | The message to sign or verify must be passed using the one-shot |
74e78361 DSH |
25 | EVP_DigestSign() asn EVP_DigestVerify() functions. |
26 | ||
27 | When calling EVP_DigestSignInit() or EVP_DigestSignUpdate() the | |
28 | digest parameter B<MUST> be set to B<NULL>. | |
29 | ||
30 | Applications wishing to sign certificates (or other structures such as | |
a2eecb5d | 31 | CRLs or certificate requests) using Ed25519 or Ed448 can either use X509_sign() |
74e78361 DSH |
32 | or X509_sign_ctx() in the usual way. |
33 | ||
34 | A context for the B<Ed25519> algorithm can be obtained by calling: | |
35 | ||
d2916a5b | 36 | EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519, NULL); |
74e78361 | 37 | |
a2eecb5d MC |
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 | ||
82dd65a2 | 42 | Ed25519 or Ed448 private keys can be set directly using |
f929439f MC |
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. | |
82dd65a2 MC |
47 | |
48 | Ed25519 or Ed448 public keys can be set directly using | |
f929439f MC |
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). | |
82dd65a2 | 51 | |
74e78361 DSH |
52 | =head1 EXAMPLE |
53 | ||
54 | This example generates an B<ED25519> private key and writes it to standard | |
55 | output in PEM format: | |
56 | ||
57 | #include <openssl/evp.h> | |
58 | #include <openssl/pem.h> | |
59 | ... | |
60 | EVP_PKEY *pkey = NULL; | |
d2916a5b | 61 | EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519, NULL); |
74e78361 DSH |
62 | EVP_PKEY_keygen_init(pctx); |
63 | EVP_PKEY_keygen(pctx, &pkey); | |
64 | EVP_PKEY_CTX_free(pctx); | |
65 | PEM_write_PrivateKey(stdout, pkey, NULL, NULL, 0, NULL, NULL); | |
66 | ||
67 | =head1 SEE ALSO | |
68 | ||
69 | L<EVP_PKEY_CTX_new(3)>, | |
70 | L<EVP_PKEY_keygen(3)>, | |
71 | L<EVP_DigestSignInit(3)>, | |
72 | L<EVP_DigestVerifyInit(3)>, | |
73 | ||
74 | =head1 COPYRIGHT | |
75 | ||
a2eecb5d | 76 | Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. |
74e78361 DSH |
77 | |
78 | Licensed under the OpenSSL license (the "License"). You may not use | |
79 | this file except in compliance with the License. You can obtain a copy | |
80 | in the file LICENSE in the source distribution or at | |
81 | L<https://www.openssl.org/source/license.html>. | |
82 | ||
83 | =cut |