=pod

=head1 NAME

crypto - OpenSSL cryptographic library

=head1 SYNOPSIS

=head1 DESCRIPTION

The OpenSSL B<crypto> library implements a wide range of cryptographic
algorithms used in various Internet standards. The services provided
by this library are used by the OpenSSL implementations of SSL, TLS
and S/MIME, and they have also been used to implement SSH, OpenPGP, and
other cryptographic standards.

=head1 OVERVIEW

B<libcrypto> consists of a number of sub-libraries that implement the
individual algorithms.

The functionality includes symmetric encryption, public key
cryptography and key agreement, certificate handling, cryptographic
hash functions and a cryptographic pseudo-random number generator.

=over 4

=item SYMMETRIC CIPHERS

L<blowfish(3)|blowfish(3)>, L<cast(3)|cast(3)>, L<des(3)|des(3)>,
L<idea(3)|idea(3)>, L<rc2(3)|rc2(3)>, L<rc4(3)|rc4(3)>, L<rc5(3)|rc5(3)> 

=item PUBLIC KEY CRYPTOGRAPHY AND KEY AGREEMENT

L<dsa(3)|dsa(3)>, L<dh(3)|dh(3)>, L<rsa(3)|rsa(3)>

=item CERTIFICATES

L<x509(3)|x509(3)>, L<x509v3(3)|x509v3(3)>

=item AUTHENTICATION CODES, HASH FUNCTIONS

L<hmac(3)|hmac(3)>, L<md2(3)|md2(3)>, L<md4(3)|md4(3)>,
L<md5(3)|md5(3)>, L<mdc2(3)|mdc2(3)>, L<ripemd(3)|ripemd(3)>,
L<sha(3)|sha(3)>

=item AUXILIARY FUNCTIONS

L<err(3)|err(3)>, L<threads(3)|threads(3)>, L<rand(3)|rand(3)>,
L<OPENSSL_VERSION_NUMBER(3)|OPENSSL_VERSION_NUMBER(3)>

=item INPUT/OUTPUT, DATA ENCODING

L<asn1(3)|asn1(3)>, L<bio(3)|bio(3)>, L<evp(3)|evp(3)>, L<pem(3)|pem(3)>,
L<pkcs7(3)|pkcs7(3)>, L<pkcs12(3)|pkcs12(3)> 

=item INTERNAL FUNCTIONS

L<bn(3)|bn(3)>, L<buffer(3)|buffer(3)>, L<lhash(3)|lhash(3)>,
L<objects(3)|objects(3)>, L<stack(3)|stack(3)>,
L<txt_db(3)|txt_db(3)> 

=back

=head1 NOTES

Some of the newer functions follow a naming convention using the numbers
B<0> and B<1>. For example the functions:

 int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
 int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj);

The B<0> version uses the supplied structure pointer directly
in the parent and it will be freed up when the parent is freed.
In the above example B<crl> would be freed but B<rev> would not.

The B<1> function uses a copy of the supplied structure pointer
(or in some cases increases its link count) in the parent and
so both (B<x> and B<obj> above) should be freed up.

=head1 SEE ALSO

L<openssl(1)|openssl(1)>, L<ssl(3)|ssl(3)>

=cut
