1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
5 | EVP_SealInit, EVP_SealUpdate, EVP_SealFinal - EVP envelope encryption
|
---|
6 |
|
---|
7 | =head1 SYNOPSIS
|
---|
8 |
|
---|
9 | #include <openssl/evp.h>
|
---|
10 |
|
---|
11 | int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
|
---|
12 | unsigned char **ek, int *ekl, unsigned char *iv,
|
---|
13 | EVP_PKEY **pubk, int npubk);
|
---|
14 | int EVP_SealUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
---|
15 | int *outl, unsigned char *in, int inl);
|
---|
16 | int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
|
---|
17 |
|
---|
18 | =head1 DESCRIPTION
|
---|
19 |
|
---|
20 | The EVP envelope routines are a high-level interface to envelope
|
---|
21 | encryption. They generate a random key and IV (if required) then
|
---|
22 | "envelope" it by using public key encryption. Data can then be
|
---|
23 | encrypted using this key.
|
---|
24 |
|
---|
25 | EVP_SealInit() initializes a cipher context B<ctx> for encryption
|
---|
26 | with cipher B<type> using a random secret key and IV. B<type> is normally
|
---|
27 | supplied by a function such as EVP_aes_256_cbc(). The secret key is encrypted
|
---|
28 | using one or more public keys, this allows the same encrypted data to be
|
---|
29 | decrypted using any of the corresponding private keys. B<ek> is an array of
|
---|
30 | buffers where the public key encrypted secret key will be written, each buffer
|
---|
31 | must contain enough room for the corresponding encrypted key: that is
|
---|
32 | B<ek[i]> must have room for B<EVP_PKEY_size(pubk[i])> bytes. The actual
|
---|
33 | size of each encrypted secret key is written to the array B<ekl>. B<pubk> is
|
---|
34 | an array of B<npubk> public keys.
|
---|
35 |
|
---|
36 | The B<iv> parameter is a buffer where the generated IV is written to. It must
|
---|
37 | contain enough room for the corresponding cipher's IV, as determined by (for
|
---|
38 | example) EVP_CIPHER_iv_length(type).
|
---|
39 |
|
---|
40 | If the cipher does not require an IV then the B<iv> parameter is ignored
|
---|
41 | and can be B<NULL>.
|
---|
42 |
|
---|
43 | EVP_SealUpdate() and EVP_SealFinal() have exactly the same properties
|
---|
44 | as the EVP_EncryptUpdate() and EVP_EncryptFinal() routines, as
|
---|
45 | documented on the L<EVP_EncryptInit(3)> manual
|
---|
46 | page.
|
---|
47 |
|
---|
48 | =head1 RETURN VALUES
|
---|
49 |
|
---|
50 | EVP_SealInit() returns 0 on error or B<npubk> if successful.
|
---|
51 |
|
---|
52 | EVP_SealUpdate() and EVP_SealFinal() return 1 for success and 0 for
|
---|
53 | failure.
|
---|
54 |
|
---|
55 | =head1 NOTES
|
---|
56 |
|
---|
57 | Because a random secret key is generated the random number generator
|
---|
58 | must be seeded when EVP_SealInit() is called.
|
---|
59 | If the automatic seeding or reseeding of the OpenSSL CSPRNG fails due to
|
---|
60 | external circumstances (see L<RAND(7)>), the operation will fail.
|
---|
61 |
|
---|
62 | The public key must be RSA because it is the only OpenSSL public key
|
---|
63 | algorithm that supports key transport.
|
---|
64 |
|
---|
65 | Envelope encryption is the usual method of using public key encryption
|
---|
66 | on large amounts of data, this is because public key encryption is slow
|
---|
67 | but symmetric encryption is fast. So symmetric encryption is used for
|
---|
68 | bulk encryption and the small random symmetric key used is transferred
|
---|
69 | using public key encryption.
|
---|
70 |
|
---|
71 | It is possible to call EVP_SealInit() twice in the same way as
|
---|
72 | EVP_EncryptInit(). The first call should have B<npubk> set to 0
|
---|
73 | and (after setting any cipher parameters) it should be called again
|
---|
74 | with B<type> set to NULL.
|
---|
75 |
|
---|
76 | =head1 SEE ALSO
|
---|
77 |
|
---|
78 | L<evp(7)>, L<RAND_bytes(3)>,
|
---|
79 | L<EVP_EncryptInit(3)>,
|
---|
80 | L<EVP_OpenInit(3)>,
|
---|
81 | L<RAND(7)>
|
---|
82 |
|
---|
83 | =head1 COPYRIGHT
|
---|
84 |
|
---|
85 | Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
|
---|
86 |
|
---|
87 | Licensed under the OpenSSL license (the "License"). You may not use
|
---|
88 | this file except in compliance with the License. You can obtain a copy
|
---|
89 | in the file LICENSE in the source distribution or at
|
---|
90 | L<https://www.openssl.org/source/license.html>.
|
---|
91 |
|
---|
92 | =cut
|
---|