X25519.pod 2.2 KB
Newer Older
D
Dr. Stephen Henson 已提交
1 2 3 4
=pod

=head1 NAME

5 6 7
X25519,
X448
- EVP_PKEY X25519 and X448 support
D
Dr. Stephen Henson 已提交
8 9 10

=head1 DESCRIPTION

11 12 13
The B<X25519> and B<X448> EVP_PKEY implementation supports key generation and
key derivation using B<X25519> and B<X448>. It has associated private and public
key formats compatible with draft-ietf-curdle-pkix-03.
D
Dr. Stephen Henson 已提交
14 15 16 17 18 19 20 21 22 23

No additional parameters can be set during key generation.

The peer public key must be set using EVP_PKEY_derive_set_peer() when
performing key derivation.

=head1 NOTES

A context for the B<X25519> algorithm can be obtained by calling:

24
 EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X25519, NULL);
D
Dr. Stephen Henson 已提交
25

26 27 28 29
For the B<X448> algorithm a context can be obtained by calling:

 EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X448, NULL);

30
X25519 or X448 private keys can be set directly using
31 32 33 34
L<EVP_PKEY_new_raw_private_key(3)> or loaded from a PKCS#8 private key file
using L<PEM_read_bio_PrivateKey(3)> (or similar function). Completely new keys
can also be generated (see the example below). Setting a private key also sets
the associated public key.
35 36

X25519 or X448 public keys can be set directly using
37 38
L<EVP_PKEY_new_raw_public_key(3)> or loaded from a SubjectPublicKeyInfo
structure in a PEM file using L<PEM_read_bio_PUBKEY(3)> (or similar function).
39

D
Dr. Stephen Henson 已提交
40 41 42 43 44 45 46 47 48
=head1 EXAMPLE

This example generates an B<X25519> private key and writes it to standard
output in PEM format:

 #include <openssl/evp.h>
 #include <openssl/pem.h>
 ...
 EVP_PKEY *pkey = NULL;
49
 EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X25519, NULL);
D
Dr. Stephen Henson 已提交
50 51 52 53 54
 EVP_PKEY_keygen_init(pctx);
 EVP_PKEY_keygen(pctx, &pkey);
 EVP_PKEY_CTX_free(pctx);
 PEM_write_PrivateKey(stdout, pkey, NULL, NULL, 0, NULL, NULL);

F
FdaSilvaYY 已提交
55
The key derivation example in L<EVP_PKEY_derive(3)> can be used with
56
B<X25519> and B<X448>.
D
Dr. Stephen Henson 已提交
57 58 59 60 61 62 63 64 65 66

=head1 SEE ALSO

L<EVP_PKEY_CTX_new(3)>,
L<EVP_PKEY_keygen(3)>,
L<EVP_PKEY_derive(3)>,
L<EVP_PKEY_derive_set_peer(3)>

=head1 COPYRIGHT

67
Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved.
D
Dr. Stephen Henson 已提交
68 69 70 71 72 73 74

Licensed under the OpenSSL license (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut