2000-03-08 01:48:12 +00:00
|
|
|
=pod
|
|
|
|
|
|
|
|
=head1 NAME
|
|
|
|
|
|
|
|
EVP_SealInit, EVP_SealUpdate, EVP_SealFinal - EVP envelope encryption
|
|
|
|
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
|
|
|
|
#include <openssl/evp.h>
|
|
|
|
|
|
|
|
int EVP_SealInit(EVP_CIPHER_CTX *ctx, EVP_CIPHER *type, unsigned char **ek,
|
|
|
|
int *ekl, unsigned char *iv,EVP_PKEY **pubk, int npubk);
|
2000-06-11 15:43:17 +00:00
|
|
|
int EVP_SealUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
2000-03-08 01:48:12 +00:00
|
|
|
int *outl, unsigned char *in, int inl);
|
2000-06-11 15:43:17 +00:00
|
|
|
int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
2000-03-08 01:48:12 +00:00
|
|
|
int *outl);
|
|
|
|
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
|
|
|
|
The EVP envelope routines are a high level interface to envelope
|
|
|
|
encryption. They generate a random key and then "envelope" it by
|
|
|
|
using public key encryption. Data can then be encrypted using this
|
|
|
|
key.
|
|
|
|
|
2000-09-20 03:24:36 +00:00
|
|
|
EVP_SealInit() initializes a cipher context B<ctx> for encryption
|
2000-03-08 01:48:12 +00:00
|
|
|
with cipher B<type> using a random secret key and IV supplied in
|
|
|
|
the B<iv> parameter. B<type> is normally supplied by a function such
|
|
|
|
as EVP_des_cbc(). The secret key is encrypted using one or more public
|
|
|
|
keys, this allows the same encrypted data to be decrypted using any
|
|
|
|
of the corresponding private keys. B<ek> is an array of buffers where
|
|
|
|
the public key encrypted secret key will be written, each buffer must
|
|
|
|
contain enough room for the corresponding encrypted key: that is
|
|
|
|
B<ek[i]> must have room for B<EVP_PKEY_size(pubk[i])> bytes. The actual
|
|
|
|
size of each encrypted secret key is written to the array B<ekl>. B<pubk> is
|
|
|
|
an array of B<npubk> public keys.
|
|
|
|
|
|
|
|
EVP_SealUpdate() and EVP_SealFinal() have exactly the same properties
|
|
|
|
as the EVP_EncryptUpdate() and EVP_EncryptFinal() routines, as
|
|
|
|
documented on the L<EVP_EncryptInit(3)|EVP_EncryptInit(3)> manual
|
|
|
|
page.
|
|
|
|
|
|
|
|
=head1 RETURN VALUES
|
|
|
|
|
2000-06-11 15:43:17 +00:00
|
|
|
EVP_SealInit() returns 0 on error or B<npubk> if successful.
|
2000-03-08 01:48:12 +00:00
|
|
|
|
2000-06-11 12:27:58 +00:00
|
|
|
EVP_SealUpdate() and EVP_SealFinal() return 1 for success and 0 for
|
|
|
|
failure.
|
2000-03-08 01:48:12 +00:00
|
|
|
|
|
|
|
=head1 NOTES
|
|
|
|
|
|
|
|
Because a random secret key is generated the random number generator
|
|
|
|
must be seeded before calling EVP_SealInit().
|
|
|
|
|
|
|
|
The public key must be RSA because it is the only OpenSSL public key
|
|
|
|
algorithm that supports key transport.
|
|
|
|
|
|
|
|
Envelope encryption is the usual method of using public key encryption
|
|
|
|
on large amounts of data, this is because public key encryption is slow
|
|
|
|
but symmetric encryption is fast. So symmetric encryption is used for
|
|
|
|
bulk encryption and the small random symmetric key used is transferred
|
|
|
|
using public key encryption.
|
|
|
|
|
2000-06-11 12:18:15 +00:00
|
|
|
It is possible to call EVP_SealInit() twice in the same way as
|
|
|
|
EVP_EncryptInit(). The first call should have B<npubk> set to 0
|
2000-09-20 03:24:36 +00:00
|
|
|
and (after setting any cipher parameters) it should be called again
|
2000-06-11 12:18:15 +00:00
|
|
|
with B<type> set to NULL.
|
|
|
|
|
2000-03-08 01:48:12 +00:00
|
|
|
=head1 SEE ALSO
|
|
|
|
|
2000-09-23 07:16:17 +00:00
|
|
|
L<evp(3)|evp(3)>, L<rand(3)|rand(3)>,
|
2000-03-08 01:48:12 +00:00
|
|
|
L<EVP_EncryptInit(3)|EVP_EncryptInit(3)>,
|
|
|
|
L<EVP_OpenInit(3)|EVP_OpenInit(3)>
|
|
|
|
|
|
|
|
=head1 HISTORY
|
|
|
|
|
2002-08-15 14:23:23 +00:00
|
|
|
EVP_SealFinal() did not return a value before OpenSSL 0.9.7.
|
|
|
|
|
2000-03-08 01:48:12 +00:00
|
|
|
=cut
|