⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 class_h_m_a_c.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!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++:  TemplateHMAC&lt; T &gt; 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&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Compound&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Compound&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a></div><h1>HMAC&lt; T &gt; Class Template Reference</h1><code>#include &lt;<a class="el" href="hmac_8h-source.html">hmac.h</a>&gt;</code><p><p>Inheritance diagram for HMAC&lt; T &gt;:<p><center><img src="class_h_m_a_c.png" usemap="#HMAC< T >_map" border="0" alt=""></center><map name="HMAC< T >_map"><area href="class_message_authentication_code_final_template.html" alt="MessageAuthenticationCodeFinalTemplate< HMAC_Base, HMAC< T > >" shape="rect" coords="218,224,644,248"><area href="class_message_authentication_code.html" alt="MessageAuthenticationCode" shape="rect" coords="218,168,644,192"><area href="class_hash_transformation.html" alt="HashTransformation" shape="rect" coords="0,112,426,136"><area href="class_simple_keying_interface.html" alt="SimpleKeyingInterface" shape="rect" coords="436,112,862,136"><area href="class_algorithm.html" alt="Algorithm" shape="rect" coords="0,56,426,80"><area href="class_clonable.html" alt="Clonable" shape="rect" coords="0,0,426,24"></map><a href="class_h_m_a_c-members.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2><h3>template&lt;class T&gt;<br> class HMAC&lt; T &gt;</h3><a href="http://www.weidai.com/scan-mirror/mac.html#HMAC">HMAC</a> <p>HMAC(K, text) = H(K XOR opad, H(K XOR ipad, text)) <p><p>Definition at line <a class="el" href="hmac_8h-source.html#l00040">40</a> of file <a class="el" href="hmac_8h-source.html">hmac.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 &nbsp;</td><td class="memItemRight" valign=bottom>{ <b>DIGESTSIZE</b> = T::DIGESTSIZE, <b>BLOCKSIZE</b> = T::BLOCKSIZE }</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><b>IV_Requirement</b> { <br>&nbsp;&nbsp;<b>STRUCTURED_IV</b> =  0, <b>RANDOM_IV</b>, <b>UNPREDICTABLE_RANDOM_IV</b>, <b>INTERNALLY_GENERATED_IV</b>, <br>&nbsp;&nbsp;<b>NOT_RESYNCHRONIZABLE</b><br> }</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_m_a_ca1" doxytag="HMAC::HMAC"></a>&nbsp;</td><td class="memItemRight" valign=bottom><b>HMAC</b> (const byte *key, unsigned int length=HMAC_Base::DEFAULT_KEYLENGTH)</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_message_authentication_code_final_templatea3">SetKey</a> (const byte *key, unsigned int length, const <a class="el" href="class_name_value_pairs.html">NameValuePairs</a> &amp;param=<a class="el" href="cryptlib_8h.html#a3">g_nullNameValuePairs</a>)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">set or reset the key of this object </em> <a href="#_message_authentication_code_final_templatea3"></a><em><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_message_authentication_code_final_templatea4" doxytag="HMAC::Clone"></a><a class="el" href="class_clonable.html">Clonable</a> *&nbsp;</td><td class="memItemRight" valign=bottom><b>Clone</b> ()</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_zlib_decompressora18" doxytag="HMAC::Clone"></a>virtual <a class="el" href="class_clonable.html">Clonable</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_zlib_decompressora18">Clone</a> () const</td></tr><tr><td class="mdescLeft">&nbsp;</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 name="_x_m_a_c_ca5" doxytag="HMAC::Update"></a>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_ca5">Update</a> (const byte *input, unsigned int length)=0</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">process more input <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_ca6" doxytag="HMAC::CreateUpdateSpace"></a>virtual byte *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_ca6">CreateUpdateSpace</a> (unsigned int &amp;size)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">request space to write input into <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea13">Final</a> (byte *digest)</td></tr><tr><td class="mdescLeft">&nbsp;</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_ca8" doxytag="HMAC::Restart"></a>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_ca8">Restart</a> ()</td></tr><tr><td class="mdescLeft">&nbsp;</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><a name="_x_m_a_c_ca9" doxytag="HMAC::DigestSize"></a>virtual unsigned int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_ca9">DigestSize</a> () const=0</td></tr><tr><td class="mdescLeft">&nbsp;</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="_x_m_a_c_ca10" doxytag="HMAC::BlockSize"></a>virtual unsigned int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_ca10">BlockSize</a> () const</td></tr><tr><td class="mdescLeft">&nbsp;</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="_x_m_a_c_ca11" doxytag="HMAC::OptimalBlockSize"></a>virtual unsigned int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_ca11">OptimalBlockSize</a> () const</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">input to <a class="el" href="class_hash_transformation.html#_x_m_a_c_ca5">Update()</a> should have length a multiple of this for optimal speed <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea14" doxytag="HMAC::CalculateDigest"></a>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea14">CalculateDigest</a> (byte *digest, const byte *input, unsigned int length)</td></tr><tr><td class="mdescLeft">&nbsp;</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&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea15">Verify</a> (const byte *digest)</td></tr><tr><td class="mdescLeft">&nbsp;</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="HMAC::VerifyDigest"></a>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea16">VerifyDigest</a> (const byte *digest, const byte *input, unsigned int length)</td></tr><tr><td class="mdescLeft">&nbsp;</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_ca15" doxytag="HMAC::TruncatedFinal"></a>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_ca15">TruncatedFinal</a> (byte *digest, unsigned int digestSize)=0</td></tr><tr><td class="mdescLeft">&nbsp;</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="_x_m_a_c_c___basea17" doxytag="HMAC::CalculateTruncatedDigest"></a>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.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">&nbsp;</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="HMAC::TruncatedVerify"></a>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_ca17">TruncatedVerify</a> (const byte *digest, unsigned int digestLength)</td></tr><tr><td class="mdescLeft">&nbsp;</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="HMAC::VerifyTruncatedDigest"></a>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.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">&nbsp;</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="HMAC::AlgorithmName"></a>virtual std::string&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_zlib_decompressora17">AlgorithmName</a> () const</td></tr><tr><td class="mdescLeft">&nbsp;</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="_x_m_a_c_c___basea21" doxytag="HMAC::MinKeyLength"></a>virtual unsigned int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea21">MinKeyLength</a> () const=0</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">returns smallest valid key length in bytes */ <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea22" doxytag="HMAC::MaxKeyLength"></a>virtual unsigned int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea22">MaxKeyLength</a> () const=0</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">returns largest valid key length in bytes */ <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea23" doxytag="HMAC::DefaultKeyLength"></a>virtual unsigned int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea23">DefaultKeyLength</a> () const=0</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">returns default (recommended) key length in bytes */ <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea24" doxytag="HMAC::GetValidKeyLength"></a>virtual unsigned int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea24">GetValidKeyLength</a> (unsigned int n) const=0</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">returns the smallest valid key length in bytes that is &gt;= min(n, GetMaxKeyLength()) <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea25" doxytag="HMAC::IsValidKeyLength"></a>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea25">IsValidKeyLength</a> (unsigned int n) const</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">returns whether n is a valid key length <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea27" doxytag="HMAC::SetKeyWithRounds"></a>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea27">SetKeyWithRounds</a> (const byte *key, unsigned int length, int rounds)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">calls <a class="el" href="class_simple_keying_interface.html#_x_m_a_c_c___basea26">SetKey()</a> with an <a class="el" href="class_name_value_pairs.html">NameValuePairs</a> object that just specifies "Rounds" <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea28" doxytag="HMAC::SetKeyWithIV"></a>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea28">SetKeyWithIV</a> (const byte *key, unsigned int length, const byte *iv)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">calls <a class="el" href="class_simple_keying_interface.html#_x_m_a_c_c___basea26">SetKey()</a> with an <a class="el" href="class_name_value_pairs.html">NameValuePairs</a> object that just specifies "IV" <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea29" doxytag="HMAC::IVRequirement"></a>virtual IV_Requirement&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea29">IVRequirement</a> () const=0</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">returns the minimal requirement for secure IVs <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea30">IsResynchronizable</a> () const</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">returns whether this object can be resynchronized (i.e. supports initialization vectors) </em> <a href="#_x_m_a_c_c___basea30"></a><em><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea31" doxytag="HMAC::CanUseRandomIVs"></a>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea31">CanUseRandomIVs</a> () const</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">returns whether this object can use random IVs (in addition to ones returned by GetNextIV) <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea32" doxytag="HMAC::CanUsePredictableIVs"></a>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea32">CanUsePredictableIVs</a> () const</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">returns whether this object can use random but possibly predictable IVs (in addition to ones returned by GetNextIV) <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___basea33" doxytag="HMAC::CanUseStructuredIVs"></a>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_c___basea33">CanUseStructuredIVs</a> () const</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">returns whether this object can use structured IVs, for example a counter (in addition to ones returned by GetNextIV) <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_ca32" doxytag="HMAC::IVSize"></a>virtual unsigned int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_ca32">IVSize</a> () const</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">returns size of IVs used by this object <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_ca33" doxytag="HMAC::Resynchronize"></a>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_ca33">Resynchronize</a> (const byte *IV)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">resynchronize with an IV <br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="class_h_m_a_c.html#_x_m_a_c_ca34">GetNextIV</a> (byte *IV)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get a secure IV for the next message </em> <a href="#_x_m_a_c_ca34"></a><em><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_m_a_ce0" doxytag="HMAC::StaticAlgorithmName"></a>std::string&nbsp;</td><td class="memItemRight" valign=bottom><b>StaticAlgorithmName</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 name="_x_m_a_c_c___baseb7" doxytag="HMAC::ThrowIfInvalidTruncatedSize"></a>void&nbsp;</td><td class="memItemRight" valign=bottom><b>ThrowIfInvalidTruncatedSize</b> (unsigned int size) const</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___baseb8" doxytag="HMAC::ThrowIfInvalidKeyLength"></a>void&nbsp;</td><td class="memItemRight" valign=bottom><b>ThrowIfInvalidKeyLength</b> (const <a class="el" href="class_algorithm.html">Algorithm</a> &amp;algorithm, unsigned int length)</td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a name="_x_m_a_c_c___baseb9" doxytag="HMAC::AssertValidKeyLength"></a>void&nbsp;</td><td class="memItemRight" valign=bottom><b>AssertValidKeyLength</b> (unsigned int length) const</td></tr></table><hr><h2>Member Function Documentation</h2><a name="_message_authentication_code_final_templatea3" doxytag="HMAC::SetKey"></a><p><table class="mdTable" width="100%" cellpadding="2" cellspacing="0">  <tr>    <td class="mdRow">      <table cellpadding="0" cellspacing="0" border="0">        <tr>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -