📄 class_h_a_v_a_l5.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>Crypto++: HAVAL5 class Reference</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.2 --><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">Compound 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">Compound Members</a> | <a class="qindex" href="globals.html">File Members</a></div><h1>HAVAL5 Class Reference</h1><code>#include <<a class="el" href="haval_8h-source.html">haval.h</a>></code><p><p>Inheritance diagram for HAVAL5:<p><center><img src="class_h_a_v_a_l5.png" usemap="#HAVAL5_map" border="0" alt=""></center><map name="HAVAL5_map"><area href="class_h_a_v_a_l.html" alt="HAVAL" shape="rect" coords="0,336,380,360"><area href="class_iterated_hash.html" alt="IteratedHash< word32, LittleEndian, 128 >" shape="rect" coords="0,280,380,304"><area href="class_iterated_hash_base2.html" alt="IteratedHashBase2< word32, LittleEndian, HashTransformation >" shape="rect" coords="0,224,380,248"><area href="class_hash_transformation.html" alt="HashTransformation" shape="rect" coords="0,112,380,136"><area href="class_algorithm.html" alt="Algorithm" shape="rect" coords="0,56,380,80"><area href="class_clonable.html" alt="Clonable" shape="rect" coords="0,0,380,24"></map><a href="class_h_a_v_a_l5-members.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2><a href="http://www.weidai.com/scan-mirror/md.html#HAVAL"><a class="el" href="class_h_a_v_a_l.html">HAVAL</a></a> with 5 passes <p><p>Definition at line <a class="el" href="haval_8h-source.html#l00048">48</a> of file <a class="el" href="haval_8h-source.html">haval.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>enum </td><td class="memItemRight" valign=bottom>{ <b>DIGESTSIZE</b> = 32, <b>HAVAL_VERSION</b> = 1 }</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_iterated_hash_base2w0" doxytag="HAVAL5::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 name="_iterated_hash_base2w1" doxytag="HAVAL5::HashWordType"></a>typedef IteratedHashBase<<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 name="_h_a_v_a_l5a0" doxytag="HAVAL5::HAVAL5"></a> </td><td class="memItemRight" valign=bottom><b>HAVAL5</b> (unsigned int digestSize=DIGESTSIZE)</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_h_a_v_a_l5a1" doxytag="HAVAL5::TruncatedFinal"></a>void </td><td class="memItemRight" valign=bottom><a class="el" href="class_h_a_v_a_l5.html#_h_a_v_a_l5a1">TruncatedFinal</a> (byte *hash, unsigned int size)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">truncated version of <a class="el" href="class_hash_transformation.html#_x_m_a_c_c___basea13">Final()</a> <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_h_a_v_a_l5a2" doxytag="HAVAL5::DigestSize"></a>unsigned int </td><td class="memItemRight" valign=bottom><a class="el" href="class_h_a_v_a_l5.html#_h_a_v_a_l5a2">DigestSize</a> () const</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">size of the hash returned by <a class="el" href="class_hash_transformation.html#_x_m_a_c_c___basea13">Final()</a> <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_iterated_hash_base2a3" doxytag="HAVAL5::OptimalBlockSize"></a>unsigned int </td><td class="memItemRight" valign=bottom><b>OptimalBlockSize</b> () const</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_iterated_hash_base2a4" doxytag="HAVAL5::Update"></a>void </td><td class="memItemRight" valign=bottom><b>Update</b> (const byte *input, unsigned int length)</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_iterated_hash_base2a5" doxytag="HAVAL5::CreateUpdateSpace"></a>byte * </td><td class="memItemRight" valign=bottom><b>CreateUpdateSpace</b> (unsigned int &size)</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_iterated_hash_base2a6" doxytag="HAVAL5::Restart"></a>void </td><td class="memItemRight" valign=bottom><b>Restart</b> ()</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>virtual void </td><td class="memItemRight" valign=bottom><a class="el" href="class_h_a_v_a_l5.html#_x_m_a_c_c___basea13">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 </em> <a href="#_x_m_a_c_c___basea13"></a><em><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea14" doxytag="HAVAL5::CalculateDigest"></a>virtual void </td><td class="memItemRight" valign=bottom><a class="el" href="class_h_a_v_a_l5.html#_x_m_a_c_c___basea14">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 <a class="el" href="class_hash_transformation.html#_x_m_a_c_ca5">Update()</a> and <a class="el" href="class_hash_transformation.html#_x_m_a_c_c___basea13">Final()</a> 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_h_a_v_a_l5.html#_x_m_a_c_c___basea15">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 </em> <a href="#_x_m_a_c_c___basea15"></a><em><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea16" doxytag="HAVAL5::VerifyDigest"></a>virtual bool </td><td class="memItemRight" valign=bottom><a class="el" href="class_h_a_v_a_l5.html#_x_m_a_c_c___basea16">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 <a class="el" href="class_hash_transformation.html#_x_m_a_c_ca5">Update()</a> and <a class="el" href="class_hash_transformation.html#_x_m_a_c_c___basea15">Verify()</a> separately <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea17" doxytag="HAVAL5::CalculateTruncatedDigest"></a>virtual void </td><td class="memItemRight" valign=bottom><a class="el" href="class_h_a_v_a_l5.html#_x_m_a_c_c___basea17">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 <a class="el" href="class_hash_transformation.html#_x_m_a_c_c___basea14">CalculateDigest()</a> <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_ca17" doxytag="HAVAL5::TruncatedVerify"></a>virtual bool </td><td class="memItemRight" valign=bottom><a class="el" href="class_h_a_v_a_l5.html#_x_m_a_c_ca17">TruncatedVerify</a> (const byte *digest, unsigned int digestLength)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">truncated version of <a class="el" href="class_hash_transformation.html#_x_m_a_c_c___basea15">Verify()</a> <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea18" doxytag="HAVAL5::VerifyTruncatedDigest"></a>virtual bool </td><td class="memItemRight" valign=bottom><a class="el" href="class_h_a_v_a_l5.html#_x_m_a_c_c___basea18">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 <a class="el" href="class_hash_transformation.html#_x_m_a_c_c___basea16">VerifyDigest()</a> <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_zlib_decompressora17" doxytag="HAVAL5::AlgorithmName"></a>virtual std::string </td><td class="memItemRight" valign=bottom><a class="el" href="class_h_a_v_a_l5.html#_zlib_decompressora17">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 name="_zlib_decompressora18" doxytag="HAVAL5::Clone"></a>virtual <a class="el" href="class_clonable.html">Clonable</a> * </td><td class="memItemRight" valign=bottom><a class="el" href="class_h_a_v_a_l5.html#_zlib_decompressora18">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 colspan=2><br><h2>Static Public Member Functions</h2></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_h_a_v_a_l5e0" doxytag="HAVAL5::Transform"></a>void </td><td class="memItemRight" valign=bottom><b>Transform</b> (word32 *buf, const word32 *in)</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_iterated_hash_base2e0" doxytag="HAVAL5::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>Protected Member Functions</h2></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_h_a_v_a_l5b0" doxytag="HAVAL5::Init"></a>void </td><td class="memItemRight" valign=bottom><b>Init</b> ()</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_h_a_v_a_l5b1" doxytag="HAVAL5::Tailor"></a>void </td><td class="memItemRight" valign=bottom><b>Tailor</b> (unsigned int FPTLEN)</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_h_a_v_a_l5b2" doxytag="HAVAL5::vTransform"></a>void </td><td class="memItemRight" valign=bottom><b>vTransform</b> (const word32 *in)</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_iterated_hash_base2b1" doxytag="HAVAL5::vTransform"></a>virtual void </td><td class="memItemRight" valign=bottom><b>vTransform</b> (const HashWordType *data)=0</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_iterated_hashb1" doxytag="HAVAL5::BlockSize"></a>unsigned int </td><td class="memItemRight" valign=bottom><b>BlockSize</b> () 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 name="_iterated_hash_base2b0" doxytag="HAVAL5::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 name="_iterated_hash_base2b7" doxytag="HAVAL5::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 name="_iterated_hash_base2b2" doxytag="HAVAL5::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 name="_iterated_hash_base2b3" doxytag="HAVAL5::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 name="_iterated_hash_base2b4" doxytag="HAVAL5::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 name="_iterated_hash_base2b5" doxytag="HAVAL5::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 name="_x_m_a_c_c___baseb7" doxytag="HAVAL5::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 name="_h_a_v_a_l5p0" doxytag="HAVAL5::digestSize"></a>const unsigned int </td><td class="memItemRight" valign=bottom><b>digestSize</b></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_h_a_v_a_l5p1" doxytag="HAVAL5::pass"></a>const unsigned int </td><td class="memItemRight" valign=bottom><b>pass</b></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_iterated_hash_base2p0" doxytag="HAVAL5::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 name="_iterated_hash_base2p1" doxytag="HAVAL5::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><tr><td colspan=2><br><h2>Static Protected Attributes</h2></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_h_a_v_a_l5t0" doxytag="HAVAL5::wi2"></a>const unsigned int </td><td class="memItemRight" valign=bottom><b>wi2</b> [32] = { 5,14,26,18,11,28, 7,16, 0,23,20,22, 1,10, 4, 8,30, 3,21, 9,17,24,29, 6,19,12,15,13, 2,25,31,27}</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_h_a_v_a_l5t1" doxytag="HAVAL5::wi3"></a>const unsigned int </td><td class="memItemRight" valign=bottom><b>wi3</b> [32] = {19, 9, 4,20,28,17, 8,22,29,14,25,12,24,30,16,26,31,15, 7, 3, 1, 0,18,27,13, 6,21,10,23,11, 5, 2}</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_h_a_v_a_l5t2" doxytag="HAVAL5::wi4"></a>const unsigned int </td><td class="memItemRight" valign=bottom><b>wi4</b> [32] = {24, 4, 0,14, 2, 7,28,23,26, 6,30,20,18,25,19, 3,22,11,31,21, 8,27,12, 9, 1,29, 5,15,17,10,16,13}</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_h_a_v_a_l5t3" doxytag="HAVAL5::wi5"></a>const unsigned int </td><td class="memItemRight" valign=bottom><b>wi5</b> [32] = {27, 3,21,26,17,11,20,29,19, 0,12, 7,13, 8,31,10, 5, 9,14,30,18, 6,28,24, 2,23,16,22, 4, 1,25,15}</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>const word32 </td><td class="memItemRight" valign=bottom><b>mc2</b> [32]</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>const word32 </td><td class="memItemRight" valign=bottom><b>mc3</b> [32]</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>const word32 </td><td class="memItemRight" valign=bottom><b>mc4</b> [32]</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>const word32 </td><td class="memItemRight" valign=bottom><b>mc5</b> [32]</td></tr></table><hr><h2>Member Function Documentation</h2><a name="_x_m_a_c_c___basea13" doxytag="HAVAL5::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>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -