<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>Crypto++: RIPEMD128 class Reference</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.3.7 --> <div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div> <h1>RIPEMD128 Class Reference</h1><code>#include <<a class="el" href="ripemd_8h-source.html">ripemd.h</a>></code> <p> <p>Inheritance diagram for RIPEMD128: <p><center><img src="class_r_i_p_e_m_d128.png" usemap="#RIPEMD128_map" border="0" alt=""></center> <map name="RIPEMD128_map"> <area href="class_iterated_hash_with_static_transform.html" alt="IteratedHashWithStaticTransform< word32, LittleEndian, 64, 16, RIPEMD128 >" shape="rect" coords="0,448,650,472"> <area href="class_clonable_impl.html" alt="ClonableImpl< RIPEMD128, AlgorithmImpl< IteratedHash< word32, LittleEndian, T_BlockSize >, RIPEMD128 > >" shape="rect" coords="0,392,650,416"> <area href="class_algorithm_impl.html" alt="AlgorithmImpl< IteratedHash< word32, LittleEndian, T_BlockSize >, RIPEMD128 >" shape="rect" coords="0,336,650,360"> <area href="class_iterated_hash.html" alt="IteratedHash< word32, LittleEndian, T_BlockSize >" shape="rect" coords="0,280,650,304"> <area href="class_iterated_hash_base2.html" alt="IteratedHashBase2< word32, LittleEndian, HashTransformation >" shape="rect" coords="0,224,650,248"> <area href="class_iterated_hash_base.html" alt="IteratedHashBase< word32, HashTransformation >" shape="rect" coords="0,168,650,192"> <area href="class_hash_transformation.html" alt="HashTransformation" shape="rect" coords="0,112,650,136"> <area href="class_algorithm.html" alt="Algorithm" shape="rect" coords="0,56,650,80"> <area href="class_clonable.html" alt="Clonable" shape="rect" coords="0,0,650,24"> </map> <a href="class_r_i_p_e_m_d128-members.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2> Digest Length = 128 bits <p> <p> Definition at line <a class="el" href="ripemd_8h-source.html#l00028">28</a> of file <a class="el" href="ripemd_8h-source.html">ripemd.h</a>.<table border=0 cellpadding=0 cellspacing=0> <tr><td></td></tr> <tr><td colspan=2><br><h2>Public Types</h2></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2w0" doxytag="RIPEMD128::ByteOrderClass" ></a> typedef LittleEndian </td><td class="memItemRight" valign=bottom><b>ByteOrderClass</b></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2w1" doxytag="RIPEMD128::HashWordType" ></a> typedef <a class="el" href="class_iterated_hash_base.html">IteratedHashBase</a><<br> word32, <a class="el" href="class_hash_transformation.html">HashTransformation</a> <br> >::HashWordType </td><td class="memItemRight" valign=bottom><b>HashWordType</b></td></tr> <tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_with_static_transforma0" doxytag="RIPEMD128::DigestSize" ></a> unsigned int </td><td class="memItemRight" valign=bottom><a class="el" href="class_iterated_hash_with_static_transform.html#_iterated_hash_with_static_transforma0">DigestSize</a> () const</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">size of the hash returned by Final() <br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_clonable_impla0" doxytag="RIPEMD128::Clone" ></a> <a class="el" href="class_clonable.html">Clonable</a> * </td><td class="memItemRight" valign=bottom><a class="el" href="class_clonable_impl.html#_clonable_impla0">Clone</a> () const</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">this is not implemented by most classes yet <br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_algorithm_impla0" doxytag="RIPEMD128::AlgorithmName" ></a> std::string </td><td class="memItemRight" valign=bottom><a class="el" href="class_algorithm_impl.html#_algorithm_impla0">AlgorithmName</a> () const</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns name of this algorithm, not universally implemented yet <br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2a0" doxytag="RIPEMD128::TruncatedFinal" ></a> void </td><td class="memItemRight" valign=bottom><a class="el" href="class_iterated_hash_base2.html#_iterated_hash_base2a0">TruncatedFinal</a> (byte *digest, unsigned int size)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">truncated version of Final() <br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2a1" doxytag="RIPEMD128::BlockSize" ></a> unsigned int </td><td class="memItemRight" valign=bottom><a class="el" href="class_iterated_hash_base.html#_iterated_hash_base2a1">BlockSize</a> () const</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">block size of underlying compression function, or 0 if not block based <br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2a2" doxytag="RIPEMD128::OptimalBlockSize" ></a> unsigned int </td><td class="memItemRight" valign=bottom><a class="el" href="class_iterated_hash_base.html#_iterated_hash_base2a2">OptimalBlockSize</a> () const</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">input to Update() should have length a multiple of this for optimal speed <br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2a3" doxytag="RIPEMD128::OptimalDataAlignment" ></a> unsigned int </td><td class="memItemRight" valign=bottom><a class="el" href="class_iterated_hash_base.html#_iterated_hash_base2a3">OptimalDataAlignment</a> () const</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns how input should be aligned for optimal performance <br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2a4" doxytag="RIPEMD128::Update" ></a> void </td><td class="memItemRight" valign=bottom><a class="el" href="class_iterated_hash_base.html#_iterated_hash_base2a4">Update</a> (const byte *input, unsigned int length)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">process more input <br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2a5" doxytag="RIPEMD128::CreateUpdateSpace" ></a> byte * </td><td class="memItemRight" valign=bottom><a class="el" href="class_iterated_hash_base.html#_iterated_hash_base2a5">CreateUpdateSpace</a> (unsigned int &size)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">request space to write input into <br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2a6" doxytag="RIPEMD128::Restart" ></a> void </td><td class="memItemRight" valign=bottom><a class="el" href="class_iterated_hash_base.html#_iterated_hash_base2a6">Restart</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">discard the current state, and restart with a new message <br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top>virtual void </td><td class="memItemRight" valign=bottom><a class="el" href="class_hash_transformation.html#_x_m_a_c_c___basea7">Final</a> (byte *digest)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">compute hash for current message, then restart for a new message <a href="#_x_m_a_c_c___basea7"></a><br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_x_m_a_c_c___basea9" doxytag="RIPEMD128::CalculateDigest" ></a> virtual void </td><td class="memItemRight" valign=bottom><a class="el" href="class_hash_transformation.html#_x_m_a_c_c___basea9">CalculateDigest</a> (byte *digest, const byte *input, unsigned int length)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">use this if your input is in one piece and you don't want to call Update() and Final() separately <br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool </td><td class="memItemRight" valign=bottom><a class="el" href="class_hash_transformation.html#_x_m_a_c_c___basea10">Verify</a> (const byte *digest)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">verify that digest is a valid digest for the current message, then reinitialize the object <a href="#_x_m_a_c_c___basea10"></a><br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_x_m_a_c_c___basea11" doxytag="RIPEMD128::VerifyDigest" ></a> virtual bool </td><td class="memItemRight" valign=bottom><a class="el" href="class_hash_transformation.html#_x_m_a_c_c___basea11">VerifyDigest</a> (const byte *digest, const byte *input, unsigned int length)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">use this if your input is in one piece and you don't want to call Update() and Verify() separately <br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_x_m_a_c_c___basea12" doxytag="RIPEMD128::CalculateTruncatedDigest" ></a> virtual void </td><td class="memItemRight" valign=bottom><a class="el" href="class_hash_transformation.html#_x_m_a_c_c___basea12">CalculateTruncatedDigest</a> (byte *digest, unsigned int digestSize, const byte *input, unsigned int length)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">truncated version of CalculateDigest() <br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_x_m_a_c_c___basea13" doxytag="RIPEMD128::TruncatedVerify" ></a> virtual bool </td><td class="memItemRight" valign=bottom><a class="el" href="class_hash_transformation.html#_x_m_a_c_c___basea13">TruncatedVerify</a> (const byte *digest, unsigned int digestLength)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">truncated version of Verify() <br><br></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_x_m_a_c_c___basea14" doxytag="RIPEMD128::VerifyTruncatedDigest" ></a> virtual bool </td><td class="memItemRight" valign=bottom><a class="el" href="class_hash_transformation.html#_x_m_a_c_c___basea14">VerifyTruncatedDigest</a> (const byte *digest, unsigned int digestLength, const byte *input, unsigned int length)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">truncated version of VerifyDigest() <br><br></td></tr> <tr><td colspan=2><br><h2>Static Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_r_i_p_e_m_d128e0" doxytag="RIPEMD128::InitState" ></a> void </td><td class="memItemRight" valign=bottom><b>InitState</b> (HashWordType *state)</td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_r_i_p_e_m_d128e1" doxytag="RIPEMD128::Transform" ></a> void </td><td class="memItemRight" valign=bottom><b>Transform</b> (word32 *digest, const word32 *data)</td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_r_i_p_e_m_d128e2" doxytag="RIPEMD128::StaticAlgorithmName" ></a> const char * </td><td class="memItemRight" valign=bottom><b>StaticAlgorithmName</b> ()</td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2e0" doxytag="RIPEMD128::CorrectEndianess" ></a> void </td><td class="memItemRight" valign=bottom><b>CorrectEndianess</b> (HashWordType *out, const HashWordType *in, unsigned int byteCount)</td></tr> <tr><td colspan=2><br><h2>Static Public Attributes</h2></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hashs0" doxytag="RIPEMD128::cryptopp_assert___LINE__" ></a> CompileAssert<((BLOCKSIZE <br> &(BLOCKSIZE-1))==0) </td><td class="memItemRight" valign=bottom><b>cryptopp_assert___LINE__</b> )</td></tr> <tr><td colspan=2><br><h2>Protected Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_with_static_transformb1" doxytag="RIPEMD128::HashEndianCorrectedBlock" ></a> void </td><td class="memItemRight" valign=bottom><b>HashEndianCorrectedBlock</b> (const word32 *data)</td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2b1" doxytag="RIPEMD128::HashEndianCorrectedBlock" ></a> virtual void </td><td class="memItemRight" valign=bottom><b>HashEndianCorrectedBlock</b> (const HashWordType *data)=0</td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_with_static_transformb2" doxytag="RIPEMD128::Init" ></a> void </td><td class="memItemRight" valign=bottom><b>Init</b> ()</td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2b0" doxytag="RIPEMD128::HashBlock" ></a> void </td><td class="memItemRight" valign=bottom><b>HashBlock</b> (const HashWordType *input)</td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2b9" doxytag="RIPEMD128::HashBlock" ></a> virtual void </td><td class="memItemRight" valign=bottom><b>HashBlock</b> (const word32 *input)=0</td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2b2" doxytag="RIPEMD128::SetBlockSize" ></a> void </td><td class="memItemRight" valign=bottom><b>SetBlockSize</b> (unsigned int blockSize)</td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2b3" doxytag="RIPEMD128::SetStateSize" ></a> void </td><td class="memItemRight" valign=bottom><b>SetStateSize</b> (unsigned int stateSize)</td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2b4" doxytag="RIPEMD128::GetBitCountHi" ></a> word32 </td><td class="memItemRight" valign=bottom><b>GetBitCountHi</b> () const</td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2b5" doxytag="RIPEMD128::GetBitCountLo" ></a> word32 </td><td class="memItemRight" valign=bottom><b>GetBitCountLo</b> () const</td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2b6" doxytag="RIPEMD128::HashMultipleBlocks" ></a> virtual unsigned int </td><td class="memItemRight" valign=bottom><b>HashMultipleBlocks</b> (const word32 *input, unsigned int length)</td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2b7" doxytag="RIPEMD128::PadLastBlock" ></a> void </td><td class="memItemRight" valign=bottom><b>PadLastBlock</b> (unsigned int lastBlockSize, byte padFirst=0x80)</td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_x_m_a_c_c___baseb10" doxytag="RIPEMD128::ThrowIfInvalidTruncatedSize" ></a> void </td><td class="memItemRight" valign=bottom><b>ThrowIfInvalidTruncatedSize</b> (unsigned int size) const</td></tr> <tr><td colspan=2><br><h2>Protected Attributes</h2></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2p0" doxytag="RIPEMD128::m_data" ></a> <a class="el" href="class_sec_block.html">SecBlock</a>< word32 > </td><td class="memItemRight" valign=bottom><b>m_data</b></td></tr> <tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="_iterated_hash_base2p1" doxytag="RIPEMD128::m_digest" ></a> <a class="el" href="class_sec_block.html">SecBlock</a>< word32 > </td><td class="memItemRight" valign=bottom><b>m_digest</b></td></tr> </table> <hr><h2>Member Function Documentation</h2> <a class="anchor" name="_x_m_a_c_c___basea7" doxytag="RIPEMD128::Final" ></a><p> <table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> virtual void HashTransformation::Final </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top">byte * </td> <td class="mdname1" valign="top" nowrap> <em>digest</em> </td> <td class="md" valign="top"> ) </td> <td class="md" nowrap><code> [inline, virtual, inherited]</code></td> </tr> </table> </td> </tr> </table> <table cellspacing=5 cellpadding=0 border=0> <tr> <td> </td> <td> <p> compute hash for current message, then restart for a new message <p> <dl compact><dt><b>Precondition:</b></dt><dd>size of digest == DigestSize(). </dd></dl> <p> Definition at line <a class="el" href="cryptlib_8h-source.html#l00532">532</a> of file <a class="el" href="cryptlib_8h-source.html">cryptlib.h</a>. <p> Referenced by <a class="el" href="pwdbased_8h-source.html#l00085">PKCS5_PBKDF2_HMAC< T >::DeriveKey()</a>, <a class="el" href="filters_8cpp-source.html#l00662">HashFilter::Put2()</a>, and <a class="el" href="hmac_8cpp-source.html#l00065">HMAC_Base::TruncatedFinal()</a>. </td> </tr> </table> <a class="anchor" name="_x_m_a_c_c___basea10" doxytag="RIPEMD128::Verify" ></a><p> <table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> virtual bool HashTransformation::Verify </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top">const byte * </td> <td class="mdname1" valign="top" nowrap> <em>digest</em> </td> <td class="md" valign="top"> ) </td> <td class="md" nowrap><code> [inline, virtual, inherited]</code></td> </tr> </table> </td> </tr> </table> <table cellspacing=5 cellpadding=0 border=0> <tr> <td> </td> <td> <p> verify that digest is a valid digest for the current message, then reinitialize the object <p> Default implementation is to call Final() and do a bitwise comparison between its output and digest. <p> Definition at line <a class="el" href="cryptlib_8h-source.html#l00558">558</a> of file <a class="el" href="cryptlib_8h-source.html">cryptlib.h</a>. </td> </tr> </table> <hr>The documentation for this class was generated from the following files:<ul> <li><a class="el" href="ripemd_8h-source.html">ripemd.h</a><li><a class="el" href="ripemd_8cpp-source.html">ripemd.cpp</a></ul> <hr size="1"><address style="align: right;"><small>Generated on Sun Nov 7 08:24:08 2004 for Crypto++ by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border=0 ></a> 1.3.7 </small></address> </body> </html>