
#use wml::openssl-macros area=docs page=crypto

<title>Documents, crypto(3)</title>

<h1>crypto(3)</h1>

#use wml::imp::generic

{:
## What's this? [[s|(<STRONG>[^<].+?)</A>(</STRONG><DD>)|$1$2|sg]]
[[s|<P>\s+<P>|<P>|sg]]
[[s|<P>\s+</|</|sg]]
[[s|<DD>\s*<DT>|<DD>&nbsp;<DT>|sg]]
[[s|<DD>\s*</DL>|<DD>&nbsp;</DL>|sg]]
[[s|\[|&#91;|sg]]
[[s|\]|&#93;|sg]]

<!-- INDEX BEGIN -->

<UL>

	<LI><A HREF="#NAME">NAME</A>
	<LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
	<LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
	<LI><A HREF="#OVERVIEW">OVERVIEW</A>
	<LI><A HREF="#NOTES">NOTES</A>
	<LI><A HREF="#SEE_ALSO">SEE ALSO</A>
</UL>
<!-- INDEX END -->

<HR>
<P>
<HR>
<H1><A NAME="NAME">NAME</A></H1>
<P>
crypto - OpenSSL cryptographic library

</P>
<P>
<HR>
<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
<P>
<HR>
<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
<P>
The OpenSSL <STRONG>crypto</STRONG> 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.

</P>
<P>
<HR>
<H1><A NAME="OVERVIEW">OVERVIEW</A></H1>
<P>
<STRONG>libcrypto</STRONG> consists of a number of sub-libraries that implement the individual
algorithms.

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

</P>
<DL>
<DT><STRONG><A NAME="item_SYMMETRIC">SYMMETRIC CIPHERS</A></STRONG><DD>
<P>
<A HREF="../crypto/blowfish.html#">blowfish(3)</A>, <EM>cast(3)</EM>, <A HREF="../crypto/des.html#">des(3)</A>,
<EM>idea(3)</EM>, <EM>rc2(3)</EM>, <A HREF="../crypto/rc4.html#">rc4(3)</A>, <EM>rc5(3)</EM> 

 

</P>
<DT><STRONG><A NAME="item_PUBLIC">PUBLIC KEY CRYPTOGRAPHY AND KEY AGREEMENT</A></STRONG><DD>
<P>
<A HREF="../crypto/dsa.html#">dsa(3)</A>, <A HREF="../crypto/dh.html#">dh(3)</A>, <A HREF="../crypto/rsa.html#">rsa(3)</A>



</P>
<DT><STRONG><A NAME="item_CERTIFICATES">CERTIFICATES</A></STRONG><DD>
<P>
<A HREF="../crypto/x509.html#">x509(3)</A>, <EM>x509v3(3)</EM>



</P>
<DT><STRONG><A NAME="item_AUTHENTICATION">AUTHENTICATION CODES, HASH FUNCTIONS</A></STRONG><DD>
<P>
<A HREF="../crypto/hmac.html#">hmac(3)</A>, <A HREF="../crypto/md5.html#">md2(3)</A>, <A HREF="../crypto/md5.html#">md4(3)</A>,
<A HREF="../crypto/md5.html#">md5(3)</A>, <A HREF="../crypto/mdc2.html#">mdc2(3)</A>, <A HREF="../crypto/ripemd.html#">ripemd(3)</A>,
<A HREF="../crypto/sha.html#">sha(3)</A>



</P>
<DT><STRONG><A NAME="item_AUXILIARY">AUXILIARY FUNCTIONS</A></STRONG><DD>
<P>
<A HREF="../crypto/err.html#">err(3)</A>, <A HREF="../crypto/threads.html#">threads(3)</A>, <A HREF="../crypto/rand.html#">rand(3)</A>,
<A HREF="../crypto/OPENSSL_VERSION_NUMBER.html#">OPENSSL_VERSION_NUMBER(3)</A>



</P>
<DT><STRONG><A NAME="item_INPUT">INPUT/OUTPUT, DATA ENCODING</A></STRONG><DD>
<P>
<EM>asn1(3)</EM>, <A HREF="../crypto/bio.html#">bio(3)</A>, <A HREF="../crypto/evp.html#">evp(3)</A>, <A HREF="../crypto/pem.html#">pem(3)</A>,
<EM>pkcs7(3)</EM>, <EM>pkcs12(3)</EM> 

 

</P>
<DT><STRONG><A NAME="item_INTERNAL">INTERNAL FUNCTIONS</A></STRONG><DD>
<P>
<A HREF="../crypto/bn.html#">bn(3)</A>, <A HREF="../crypto/buffer.html#">buffer(3)</A>, <A HREF="../crypto/ec.html#">ec(3)</A>, <A HREF="../crypto/lhash.html#">lhash(3)</A>,
<EM>objects(3)</EM>, <EM>stack(3)</EM>,
<EM>txt_db(3)</EM> 

 

</P>
</DL>
<P>
<HR>
<H1><A NAME="NOTES">NOTES</A></H1>
<P>
Some of the newer functions follow a naming convention using the numbers
<STRONG>0</STRONG> and <STRONG>1</STRONG>. For example the functions:

</P>
<PRE> int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
 int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj);
</PRE>
<P>
The <STRONG>0</STRONG> 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 <STRONG>crl</STRONG> would be freed but <STRONG>rev</STRONG> would not.

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

</P>
<P>
<HR>
<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
<P>
<A HREF="../apps/openssl.html#">openssl(1)</A>, <A HREF="../ssl/ssl.html#">ssl(3)</A>



</P>
:}

