=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)>, L<cast(3)>, L<des(3)>,
L<idea(3)>, L<rc2(3)>, L<rc4(3)>, L<rc5(3)> 

=item PUBLIC KEY CRYPTOGRAPHY AND KEY AGREEMENT

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

=item CERTIFICATES

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

=item AUTHENTICATION CODES, HASH FUNCTIONS

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

=item AUXILIARY FUNCTIONS

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

=item INPUT/OUTPUT, DATA ENCODING

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

=item UTILITY FUNCTIONS

L<bn(3)>, L<buffer(3)>, L<lhash(3)>,
L<stack(3)>,
L<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)>, L<ssl(3)>

=cut
