]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man7/Ed25519.pod
Rename EVP_PKEY_new_private_key()/EVP_PKEY_new_public_key()
[thirdparty/openssl.git] / doc / man7 / Ed25519.pod
CommitLineData
74e78361
DSH
1=pod
2
3=head1 NAME
4
a2eecb5d
MC
5Ed25519,
6Ed448
7- EVP_PKEY Ed25519 and Ed448 support
74e78361
DSH
8
9=head1 DESCRIPTION
10
a2eecb5d
MC
11The B<Ed25519> and B<Ed448> EVP_PKEY implementation supports key generation,
12one-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
14draft-ietf-curdle-pkix-04.
15
a2eecb5d 16No additional parameters can be set during key generation one-shot signing or
74e78361
DSH
17verification. In particular, because PureEdDSA is used, when signing or
18verifying a digest must B<NOT> be specified.
19
20=head1 NOTES
21
a970b14f 22The PureEdDSA algorithm does not support the streaming mechanism
74e78361 23of other signature algorithms using, for example, EVP_DigestUpdate().
a2eecb5d 24The message to sign or verify must be passed using the one-shot
74e78361
DSH
25EVP_DigestSign() asn EVP_DigestVerify() functions.
26
27When calling EVP_DigestSignInit() or EVP_DigestSignUpdate() the
28digest parameter B<MUST> be set to B<NULL>.
29
30Applications wishing to sign certificates (or other structures such as
a2eecb5d 31CRLs or certificate requests) using Ed25519 or Ed448 can either use X509_sign()
74e78361
DSH
32or X509_sign_ctx() in the usual way.
33
34A 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
38For 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 42Ed25519 or Ed448 private keys can be set directly using
f929439f
MC
43L<EVP_PKEY_new_raw_private_key(3)> or loaded from a PKCS#8 private key file
44using L<PEM_read_bio_PrivateKey(3)> (or similar function). Completely new keys
45can also be generated (see the example below). Setting a private key also sets
46the associated public key.
82dd65a2
MC
47
48Ed25519 or Ed448 public keys can be set directly using
f929439f
MC
49L<EVP_PKEY_new_raw_public_key(3)> or loaded from a SubjectPublicKeyInfo
50structure in a PEM file using L<PEM_read_bio_PUBKEY(3)> (or similar function).
82dd65a2 51
74e78361
DSH
52=head1 EXAMPLE
53
54This example generates an B<ED25519> private key and writes it to standard
55output 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
69L<EVP_PKEY_CTX_new(3)>,
70L<EVP_PKEY_keygen(3)>,
71L<EVP_DigestSignInit(3)>,
72L<EVP_DigestVerifyInit(3)>,
73
74=head1 COPYRIGHT
75
a2eecb5d 76Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved.
74e78361
DSH
77
78Licensed under the OpenSSL license (the "License"). You may not use
79this file except in compliance with the License. You can obtain a copy
80in the file LICENSE in the source distribution or at
81L<https://www.openssl.org/source/license.html>.
82
83=cut