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

📄 panama_8h-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<a name="l00066"></a>00066         }<a name="l00067"></a>00067 <a name="l00068"></a><a class="code" href="class_hermetic_hash_function_m_a_c.html#e7fb80814d9ed73148a63a9f33890422">00068</a>         <span class="keywordtype">void</span> <a class="code" href="class_hermetic_hash_function_m_a_c.html#e7fb80814d9ed73148a63a9f33890422" title="truncated version of Final()">TruncatedFinal</a>(byte *digest, <span class="keywordtype">size_t</span> digestSize)<a name="l00069"></a>00069         {<a name="l00070"></a>00070                 <span class="keywordflow">if</span> (!<a class="code" href="class_hermetic_hash_function_m_a_c.html#ba3c91a972c541ca6f52055ba3dc8bc7">m_keyed</a>)<a name="l00071"></a>00071                         <a class="code" href="class_hermetic_hash_function_m_a_c.html#c3a4c6ed165fbf4e322e49fcaa7d4677">KeyHash</a>();<a name="l00072"></a>00072                 <a class="code" href="class_hermetic_hash_function_m_a_c.html#8dca76be12b470fb334a1367903e95bd">m_hash</a>.TruncatedFinal(digest, digestSize);<a name="l00073"></a>00073                 <a class="code" href="class_hermetic_hash_function_m_a_c.html#ba3c91a972c541ca6f52055ba3dc8bc7">m_keyed</a> = <span class="keyword">false</span>;<a name="l00074"></a>00074         }<a name="l00075"></a>00075 <a name="l00076"></a><a class="code" href="class_hermetic_hash_function_m_a_c.html#e8c812d4bac3859f70b74c8469ff6146">00076</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_hermetic_hash_function_m_a_c.html#e8c812d4bac3859f70b74c8469ff6146" title="size of the hash returned by Final()">DigestSize</a>()<span class="keyword"> const</span><a name="l00077"></a>00077 <span class="keyword">                </span>{<span class="keywordflow">return</span> <a class="code" href="class_hermetic_hash_function_m_a_c.html#8dca76be12b470fb334a1367903e95bd">m_hash</a>.DigestSize();}<a name="l00078"></a><a class="code" href="class_hermetic_hash_function_m_a_c.html#86a13522e7194874d0354ef84fac9d95">00078</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_hermetic_hash_function_m_a_c.html#86a13522e7194874d0354ef84fac9d95" title="block size of underlying compression function, or 0 if not block based">BlockSize</a>()<span class="keyword"> const</span><a name="l00079"></a>00079 <span class="keyword">                </span>{<span class="keywordflow">return</span> <a class="code" href="class_hermetic_hash_function_m_a_c.html#8dca76be12b470fb334a1367903e95bd">m_hash</a>.BlockSize();}<a name="l00080"></a><a class="code" href="class_hermetic_hash_function_m_a_c.html#2fb1317388d67876ef0ba5615227fbb0">00080</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_hermetic_hash_function_m_a_c.html#2fb1317388d67876ef0ba5615227fbb0" title="input to Update() should have length a multiple of this for optimal speed">OptimalBlockSize</a>()<span class="keyword"> const</span><a name="l00081"></a>00081 <span class="keyword">                </span>{<span class="keywordflow">return</span> <a class="code" href="class_hermetic_hash_function_m_a_c.html#8dca76be12b470fb334a1367903e95bd">m_hash</a>.OptimalBlockSize();}<a name="l00082"></a><a class="code" href="class_hermetic_hash_function_m_a_c.html#668649081fd3f9953a64c2605683f40c">00082</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_hermetic_hash_function_m_a_c.html#668649081fd3f9953a64c2605683f40c" title="returns how input should be aligned for optimal performance">OptimalDataAlignment</a>()<span class="keyword"> const</span><a name="l00083"></a>00083 <span class="keyword">                </span>{<span class="keywordflow">return</span> <a class="code" href="class_hermetic_hash_function_m_a_c.html#8dca76be12b470fb334a1367903e95bd">m_hash</a>.OptimalDataAlignment();}<a name="l00084"></a>00084 <a name="l00085"></a>00085 <span class="keyword">protected</span>:<a name="l00086"></a><a class="code" href="class_hermetic_hash_function_m_a_c.html#c3a4c6ed165fbf4e322e49fcaa7d4677">00086</a>         <span class="keywordtype">void</span> <a class="code" href="class_hermetic_hash_function_m_a_c.html#c3a4c6ed165fbf4e322e49fcaa7d4677">KeyHash</a>()<a name="l00087"></a>00087         {<a name="l00088"></a>00088                 <a class="code" href="class_hermetic_hash_function_m_a_c.html#8dca76be12b470fb334a1367903e95bd">m_hash</a>.Update(<a class="code" href="class_hermetic_hash_function_m_a_c.html#cc54bdc381eb96b75a8a30c99ef338dd">m_key</a>, <a class="code" href="class_hermetic_hash_function_m_a_c.html#cc54bdc381eb96b75a8a30c99ef338dd">m_key</a>.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00089"></a>00089                 <a class="code" href="class_hermetic_hash_function_m_a_c.html#ba3c91a972c541ca6f52055ba3dc8bc7">m_keyed</a> = <span class="keyword">true</span>;<a name="l00090"></a>00090         }<a name="l00091"></a>00091 <a name="l00092"></a><a class="code" href="class_hermetic_hash_function_m_a_c.html#8dca76be12b470fb334a1367903e95bd">00092</a>         T_Hash <a class="code" href="class_hermetic_hash_function_m_a_c.html#8dca76be12b470fb334a1367903e95bd">m_hash</a>;<a name="l00093"></a><a class="code" href="class_hermetic_hash_function_m_a_c.html#ba3c91a972c541ca6f52055ba3dc8bc7">00093</a>         <span class="keywordtype">bool</span> <a class="code" href="class_hermetic_hash_function_m_a_c.html#ba3c91a972c541ca6f52055ba3dc8bc7">m_keyed</a>;<a name="l00094"></a><a class="code" href="class_hermetic_hash_function_m_a_c.html#cc54bdc381eb96b75a8a30c99ef338dd">00094</a>         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> <a class="code" href="class_hermetic_hash_function_m_a_c.html#cc54bdc381eb96b75a8a30c99ef338dd">m_key</a>;<a name="l00095"></a>00095 };<a name="l00096"></a>00096 <a name="l00097"></a>00097 <span class="keyword">namespace </span>Weak {<span class="comment"></span><a name="l00098"></a>00098 <span class="comment">/// Panama MAC</span><a name="l00099"></a>00099 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> B = LittleEndian&gt;<a name="l00100"></a><a class="code" href="class_weak_1_1_panama_m_a_c.html">00100</a> <span class="keyword">class </span><a class="code" href="class_weak_1_1_panama_m_a_c.html" title="Panama MAC.">PanamaMAC</a> : <span class="keyword">public</span> <a class="code" href="class_hermetic_hash_function_m_a_c.html" title="MAC construction using a hermetic hash function.">HermeticHashFunctionMAC</a>&lt;PanamaHash&lt;B&gt; &gt;<a name="l00101"></a>00101 {<a name="l00102"></a>00102 <span class="keyword">public</span>:<a name="l00103"></a><a class="code" href="class_weak_1_1_panama_m_a_c.html#a87c3d142f3b1fb838e64b8e79dd3e84">00103</a>         <a class="code" href="class_weak_1_1_panama_m_a_c.html#a87c3d142f3b1fb838e64b8e79dd3e84">PanamaMAC</a>() {}<a name="l00104"></a><a class="code" href="class_weak_1_1_panama_m_a_c.html#09c1617d0494817574c6ed6fffb3392d">00104</a>         <a class="code" href="class_weak_1_1_panama_m_a_c.html#a87c3d142f3b1fb838e64b8e79dd3e84">PanamaMAC</a>(<span class="keyword">const</span> byte *key, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length)<a name="l00105"></a>00105                 {this-&gt;<a class="code" href="class_simple_keying_interface.html#df3c29b3ef3af74788a58c7c49887fd7" title="set or reset the key of this object">SetKey</a>(key, length);}<a name="l00106"></a>00106 };<a name="l00107"></a>00107 }<a name="l00108"></a>00108 <span class="comment"></span><a name="l00109"></a>00109 <span class="comment">//! algorithm info</span><a name="l00110"></a>00110 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> B&gt;<a name="l00111"></a><a class="code" href="struct_panama_cipher_info.html">00111</a> <span class="keyword">struct </span><a class="code" href="struct_panama_cipher_info.html" title="algorithm info">PanamaCipherInfo</a> : <span class="keyword">public</span> <a class="code" href="class_fixed_key_length.html" title="to be inherited by keyed algorithms with fixed key length">FixedKeyLength</a>&lt;32, SimpleKeyingInterface::UNIQUE_IV, 32&gt;<a name="l00112"></a>00112 {<a name="l00113"></a><a class="code" href="struct_panama_cipher_info.html#7ff466d377ac96b5d82a1a417af980b1">00113</a>         <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="struct_panama_cipher_info.html#7ff466d377ac96b5d82a1a417af980b1">StaticAlgorithmName</a>() {<span class="keywordflow">return</span> B::ToEnum() == <a class="code" href="cryptlib_8h.html#aeb92d42f5a6e27b8ba19f18d69d142bf0c3bb6c718cc7ff0bffef4e8f178c57">BIG_ENDIAN_ORDER</a> ? <span class="stringliteral">"Panama-BE"</span> : <span class="stringliteral">"Panama-LE"</span>;}<a name="l00114"></a>00114 };<a name="l00115"></a>00115 <span class="comment"></span><a name="l00116"></a>00116 <span class="comment">//! _</span><a name="l00117"></a>00117 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> B&gt;<a name="l00118"></a><a class="code" href="class_panama_cipher_policy.html">00118</a> <span class="keyword">class </span><a class="code" href="class_panama_cipher_policy.html" title="_">PanamaCipherPolicy</a> : <span class="keyword">public</span> <a class="code" href="struct_additive_cipher_concrete_policy.html">AdditiveCipherConcretePolicy</a>&lt;word32, 8&gt;, <a name="l00119"></a>00119                                                         <span class="keyword">public</span> <a class="code" href="struct_panama_cipher_info.html" title="algorithm info">PanamaCipherInfo</a>&lt;B&gt;,<a name="l00120"></a>00120                                                         <span class="keyword">protected</span> Panama&lt;B&gt;<a name="l00121"></a>00121 {<a name="l00122"></a>00122 <span class="keyword">protected</span>:<a name="l00123"></a>00123         <span class="keywordtype">void</span> <a class="code" href="class_panama_cipher_policy.html#ea7436592ce7365bc45a9ef48315bd0d">CipherSetKey</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html" title="interface for retrieving values given their names">NameValuePairs</a> &amp;params, <span class="keyword">const</span> byte *key, <span class="keywordtype">size_t</span> length);<a name="l00124"></a>00124         <span class="keywordtype">void</span> <a class="code" href="class_panama_cipher_policy.html#8adab47e2a854cb711a1abf2a54c21f8">OperateKeystream</a>(<a class="code" href="strciphr_8h.html#b4a226527d2bd01ff19bfa14d0974227">KeystreamOperation</a> operation, byte *output, <span class="keyword">const</span> byte *input, <span class="keywordtype">size_t</span> iterationCount);<a name="l00125"></a><a class="code" href="class_panama_cipher_policy.html#200189db99fd94f3fdf28b8443b7a19f">00125</a>         <span class="keywordtype">bool</span> <a class="code" href="class_panama_cipher_policy.html#200189db99fd94f3fdf28b8443b7a19f">IsRandomAccess</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}<a name="l00126"></a>00126         <span class="keywordtype">void</span> <a class="code" href="class_panama_cipher_policy.html#052ca8e1f62725bc9e32da410d3d3405">CipherResynchronize</a>(byte *keystreamBuffer, <span class="keyword">const</span> byte *iv);<a name="l00127"></a>00127 <span class="preprocessor">#if CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X64</span><a name="l00128"></a>00128 <span class="preprocessor"></span>        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="struct_additive_cipher_concrete_policy.html#5bdc1cb44b0ddc8df0fb6953aec93602">GetAlignment</a>() <span class="keyword">const</span>;<a name="l00129"></a>00129 <span class="preprocessor">#endif</span><a name="l00130"></a>00130 <span class="preprocessor"></span><a name="l00131"></a><a class="code" href="class_panama_cipher_policy.html#fd9ede3c795cfa401173bece1d20e51a">00131</a>         <a class="code" href="class_fixed_size_sec_block.html" title="a SecBlock with fixed size, allocated statically">FixedSizeSecBlock&lt;word32, 8&gt;</a> <a class="code" href="class_panama_cipher_policy.html#fd9ede3c795cfa401173bece1d20e51a">m_key</a>;<a name="l00132"></a>00132 };<a name="l00133"></a>00133 <span class="comment"></span><a name="l00134"></a>00134 <span class="comment">//! &lt;a href="http://www.cryptolounge.org/wiki/PANAMA"&gt;Panama Stream Cipher&lt;/a&gt;</span><a name="l00135"></a>00135 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> B = LittleEndian&gt;<a name="l00136"></a><a class="code" href="struct_panama_cipher.html">00136</a> <span class="keyword">struct </span><a class="code" href="struct_panama_cipher.html" title="Panama Stream Cipher">PanamaCipher</a> : <span class="keyword">public</span> <a class="code" href="struct_panama_cipher_info.html" title="algorithm info">PanamaCipherInfo</a>&lt;B&gt;, <span class="keyword">public</span> <a class="code" href="struct_symmetric_cipher_documentation.html" title="Each class derived from this one defines two types, Encryption and Decryption, both...">SymmetricCipherDocumentation</a><a name="l00137"></a>00137 {<a name="l00138"></a><a class="code" href="struct_panama_cipher.html#dbc52f2d09bbd059b9a50823afa0576a">00138</a>         <span class="keyword">typedef</span> <a class="code" href="class_symmetric_cipher_final.html" title="_">SymmetricCipherFinal&lt;ConcretePolicyHolder&lt;PanamaCipherPolicy&lt;B&gt;</a>, <a class="code" href="class_additive_cipher_template.html">AdditiveCipherTemplate&lt;&gt;</a> &gt;, <a class="code" href="struct_panama_cipher_info.html" title="algorithm info">PanamaCipherInfo&lt;B&gt;</a> &gt; <a class="code" href="class_symmetric_cipher_final.html" title="_">Encryption</a>;<a name="l00139"></a><a class="code" href="struct_panama_cipher.html#701cae4cf59e1b12e701ecf71e61a6cb">00139</a>         <span class="keyword">typedef</span> <a class="code" href="class_symmetric_cipher_final.html" title="_">Encryption</a> <a class="code" href="class_symmetric_cipher_final.html" title="_">Decryption</a>;<a name="l00140"></a>00140 };<a name="l00141"></a>00141 <a name="l00142"></a>00142 NAMESPACE_END<a name="l00143"></a>00143 <a name="l00144"></a>00144 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Fri Jun 1 11:11:23 2007 for Crypto++ by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.2 </small></address></body></html>

⌨️ 快捷键说明

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