Blame doc/man7/evp.pod

Packit c4476c
=pod
Packit c4476c
Packit c4476c
=head1 NAME
Packit c4476c
Packit c4476c
evp - high-level cryptographic functions
Packit c4476c
Packit c4476c
=head1 SYNOPSIS
Packit c4476c
Packit c4476c
 #include <openssl/evp.h>
Packit c4476c
Packit c4476c
=head1 DESCRIPTION
Packit c4476c
Packit c4476c
The EVP library provides a high-level interface to cryptographic
Packit c4476c
functions.
Packit c4476c
Packit c4476c
The L<B<EVP_Seal>I<XXX>|EVP_SealInit(3)> and L<B<EVP_Open>I<XXX>|EVP_OpenInit(3)>
Packit c4476c
functions provide public key encryption and decryption to implement digital "envelopes".
Packit c4476c
Packit c4476c
The L<B<EVP_DigestSign>I<XXX>|EVP_DigestSignInit(3)> and
Packit c4476c
L<B<EVP_DigestVerify>I<XXX>|EVP_DigestVerifyInit(3)> functions implement
Packit c4476c
digital signatures and Message Authentication Codes (MACs). Also see the older
Packit c4476c
L<B<EVP_Sign>I<XXX>|EVP_SignInit(3)> and L<B<EVP_Verify>I<XXX>|EVP_VerifyInit(3)>
Packit c4476c
functions.
Packit c4476c
Packit c4476c
Symmetric encryption is available with the L<B<EVP_Encrypt>I<XXX>|EVP_EncryptInit(3)>
Packit c4476c
functions.  The L<B<EVP_Digest>I<XXX>|EVP_DigestInit(3)> functions provide message digests.
Packit c4476c
Packit c4476c
The B<EVP_PKEY>I<XXX> functions provide a high level interface to
Packit c4476c
asymmetric algorithms. To create a new EVP_PKEY see
Packit c4476c
L<EVP_PKEY_new(3)>. EVP_PKEYs can be associated
Packit c4476c
with a private key of a particular algorithm by using the functions
Packit c4476c
described on the L<EVP_PKEY_set1_RSA(3)> page, or
Packit c4476c
new keys can be generated using L<EVP_PKEY_keygen(3)>.
Packit c4476c
EVP_PKEYs can be compared using L<EVP_PKEY_cmp(3)>, or printed using
Packit c4476c
L<EVP_PKEY_print_private(3)>.
Packit c4476c
Packit c4476c
The EVP_PKEY functions support the full range of asymmetric algorithm operations:
Packit c4476c
Packit c4476c
=over 4
Packit c4476c
Packit c4476c
=item For key agreement see L<EVP_PKEY_derive(3)>
Packit c4476c
Packit c4476c
=item For signing and verifying see L<EVP_PKEY_sign(3)>,
Packit c4476c
L<EVP_PKEY_verify(3)> and L<EVP_PKEY_verify_recover(3)>.
Packit c4476c
However, note that
Packit c4476c
these functions do not perform a digest of the data to be signed. Therefore
Packit c4476c
normally you would use the L<EVP_DigestSignInit(3)>
Packit c4476c
functions for this purpose.
Packit c4476c
Packit c4476c
=item For encryption and decryption see L<EVP_PKEY_encrypt(3)>
Packit c4476c
and L<EVP_PKEY_decrypt(3)> respectively. However, note that
Packit c4476c
these functions perform encryption and decryption only. As public key
Packit c4476c
encryption is an expensive operation, normally you would wrap
Packit c4476c
an encrypted message in a "digital envelope" using the L<EVP_SealInit(3)> and
Packit c4476c
L<EVP_OpenInit(3)> functions.
Packit c4476c
Packit c4476c
=back
Packit c4476c
Packit c4476c
The L<EVP_BytesToKey(3)> function provides some limited support for password
Packit c4476c
based encryption. Careful selection of the parameters will provide a PKCS#5 PBKDF1 compatible
Packit c4476c
implementation. However, new applications should not typically use this (preferring, for example,
Packit c4476c
PBKDF2 from PCKS#5).
Packit c4476c
Packit c4476c
The L<B<EVP_Encode>I<XXX>|EVP_EncodeInit(3)> and
Packit c4476c
L<B<EVP_Decode>I<XXX>|EVP_EncodeInit(3)> functions implement base 64 encoding
Packit c4476c
and decoding.
Packit c4476c
Packit c4476c
All the symmetric algorithms (ciphers), digests and asymmetric algorithms
Packit c4476c
(public key algorithms) can be replaced by ENGINE modules providing alternative
Packit c4476c
implementations. If ENGINE implementations of ciphers or digests are registered
Packit c4476c
as defaults, then the various EVP functions will automatically use those
Packit c4476c
implementations automatically in preference to built in software
Packit c4476c
implementations. For more information, consult the engine(3) man page.
Packit c4476c
Packit c4476c
Although low level algorithm specific functions exist for many algorithms
Packit c4476c
their use is discouraged. They cannot be used with an ENGINE and ENGINE
Packit c4476c
versions of new algorithms cannot be accessed using the low level functions.
Packit c4476c
Also makes code harder to adapt to new algorithms and some options are not
Packit c4476c
cleanly supported at the low level and some operations are more efficient
Packit c4476c
using the high level interface.
Packit c4476c
Packit c4476c
=head1 SEE ALSO
Packit c4476c
Packit c4476c
L<EVP_DigestInit(3)>,
Packit c4476c
L<EVP_EncryptInit(3)>,
Packit c4476c
L<EVP_OpenInit(3)>,
Packit c4476c
L<EVP_SealInit(3)>,
Packit c4476c
L<EVP_DigestSignInit(3)>,
Packit c4476c
L<EVP_SignInit(3)>,
Packit c4476c
L<EVP_VerifyInit(3)>,
Packit c4476c
L<EVP_EncodeInit(3)>,
Packit c4476c
L<EVP_PKEY_new(3)>,
Packit c4476c
L<EVP_PKEY_set1_RSA(3)>,
Packit c4476c
L<EVP_PKEY_keygen(3)>,
Packit c4476c
L<EVP_PKEY_print_private(3)>,
Packit c4476c
L<EVP_PKEY_decrypt(3)>,
Packit c4476c
L<EVP_PKEY_encrypt(3)>,
Packit c4476c
L<EVP_PKEY_sign(3)>,
Packit c4476c
L<EVP_PKEY_verify(3)>,
Packit c4476c
L<EVP_PKEY_verify_recover(3)>,
Packit c4476c
L<EVP_PKEY_derive(3)>,
Packit c4476c
L<EVP_BytesToKey(3)>,
Packit c4476c
L<ENGINE_by_id(3)>
Packit c4476c
Packit c4476c
=head1 COPYRIGHT
Packit c4476c
Packit c4476c
Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
Packit c4476c
Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
this file except in compliance with the License.  You can obtain a copy
Packit c4476c
in the file LICENSE in the source distribution or at
Packit c4476c
L<https://www.openssl.org/source/license.html>.
Packit c4476c
Packit c4476c
=cut