=pod

=head1 NAME

EVP_cast5_cbc,
EVP_cast5_cfb,
EVP_cast5_cfb64,
EVP_cast5_ecb,
EVP_cast5_ofb
- EVP CAST cipher

=head1 SYNOPSIS

 #include <openssl/evp.h>

 const EVP_CIPHER *EVP_cast5_cbc(void)
 const EVP_CIPHER *EVP_cast5_cfb(void)
 const EVP_CIPHER *EVP_cast5_cfb64(void)
 const EVP_CIPHER *EVP_cast5_ecb(void)
 const EVP_CIPHER *EVP_cast5_ofb(void)

=head1 DESCRIPTION

The CAST encryption algorithm for EVP.

This is a variable key length cipher.

=over 4

=item EVP_cast5_cbc(),
EVP_cast5_ecb(),
EVP_cast5_cfb(),
EVP_cast5_cfb64(),
EVP_cast5_ofb()

CAST encryption algorithm in CBC, ECB, CFB and OFB modes respectively.

=back

=head1 RETURN VALUES

These functions return an B<EVP_CIPHER> structure that contains the
implementation of the symmetric cipher. See L<EVP_CIPHER_meth_new(3)> for
details of the B<EVP_CIPHER> structure.

=head1 SEE ALSO

L<evp(7)>,
L<EVP_EncryptInit(3)>,
L<EVP_CIPHER_meth_new(3)>

=head1 COPYRIGHT

Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (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

