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

📄 panama_8h-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 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++: panama.h Source File</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>panama.h</h1><div class="fragment"><pre>00001 <span class="preprocessor">#ifndef CRYPTOPP_PANAMA_H</span>00002 <span class="preprocessor"></span><span class="preprocessor">#define CRYPTOPP_PANAMA_H</span>00003 <span class="preprocessor"></span>00004 <span class="preprocessor">#include "seckey.h"</span>00005 <span class="preprocessor">#include "secblock.h"</span>00006 <span class="preprocessor">#include "iterhash.h"</span>00007 <span class="preprocessor">#include "<a class="code" href="strciphr_8h.html">strciphr.h</a>"</span>00008 00009 NAMESPACE_BEGIN(CryptoPP)00010 00011 <span class="comment">/// base class, do not use directly</span>00012 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> B&gt;<a name="l00013"></a><a class="code" href="class_panama.html">00013</a> <span class="keyword">class </span><a class="code" href="class_panama.html">Panama</a>00014 {00015 <span class="keyword">public</span>:00016         <span class="keywordtype">void</span> Reset();00017         <span class="keywordtype">void</span> Iterate(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count, <span class="keyword">const</span> word32 *p=NULL, word32 *z=NULL, <span class="keyword">const</span> word32 *y=NULL);00018 00019 <span class="keyword">protected</span>:00020         <span class="keyword">typedef</span> word32 Stage[8];00021         <span class="keyword">enum</span> {STAGES = 32};00022 00023         FixedSizeSecBlock&lt;word32, 17*2 + STAGES*sizeof(Stage)&gt; m_state;00024         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_bstart;00025 };00026 <span class="comment"></span>00027 <span class="comment">/// &lt;a href="http://www.weidai.com/scan-mirror/md.html#Panama"&gt;Panama Hash&lt;/a&gt;</span>00028 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> B = LittleEndian&gt;<a name="l00029"></a><a class="code" href="class_panama_hash.html">00029</a> <span class="keyword">class </span><a class="code" href="class_panama_hash.html">PanamaHash</a> : <span class="keyword">protected</span> <a class="code" href="class_panama.html">Panama</a>&lt;B&gt;, <span class="keyword">public</span> <a class="code" href="class_iterated_hash.html">IteratedHash</a>&lt;word32, NativeByteOrder, 32&gt;00030 {00031 <span class="keyword">public</span>:00032         <span class="keyword">enum</span> {DIGESTSIZE = 32};00033         <a class="code" href="class_panama_hash.html">PanamaHash</a>() : <a class="code" href="class_iterated_hash.html">IteratedHash&lt;word32, NativeByteOrder, 32&gt;</a>(0) {<a class="code" href="class_panama.html">Panama&lt;B&gt;::Reset</a>();}<a name="l00034"></a><a class="code" href="class_panama_hash.html#_panama_m_a_c___basea1">00034</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_panama_hash.html#_panama_m_a_c___basea1">DigestSize</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> DIGESTSIZE;}00035         <span class="keywordtype">void</span> <a class="code" href="class_panama_hash.html#_panama_m_a_c___basea2">TruncatedFinal</a>(byte *hash, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size);00036 00037 <span class="keyword">protected</span>:00038         <span class="keywordtype">void</span> Init() {<a class="code" href="class_panama.html">Panama&lt;B&gt;::Reset</a>();}00039         <span class="keywordtype">void</span> vTransform(<span class="keyword">const</span> word32 *data) {Iterate(1, data);} <span class="comment">// push</span>00040         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> HashMultipleBlocks(<span class="keyword">const</span> word32 *input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length);00041 };00042 <span class="comment"></span>00043 <span class="comment">//! .</span>00044 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> B = LittleEndian&gt;<a name="l00045"></a><a class="code" href="class_panama_m_a_c___base.html">00045</a> <span class="keyword">class </span><a class="code" href="class_panama_m_a_c___base.html">PanamaMAC_Base</a> : <span class="keyword">public</span> <a class="code" href="class_panama_hash.html">PanamaHash</a>&lt;B&gt;, <span class="keyword">public</span> <a class="code" href="class_variable_key_length.html">VariableKeyLength</a>&lt;32, 0, UINT_MAX&gt;, <span class="keyword">public</span> <a class="code" href="class_message_authentication_code.html">MessageAuthenticationCode</a>00046 {00047 <span class="keyword">public</span>:00048         <span class="keywordtype">void</span> UncheckedSetKey(<span class="keyword">const</span> byte *userKey, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> keylength)00049         {00050                 m_key.<a class="code" href="class_sec_block.html#_sec_block_with_hinta15">Assign</a>(userKey, keylength);00051                 <a class="code" href="class_hash_transformation.html#_x_m_a_c_ca8">Restart</a>();00052         }00053 00054         <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * StaticAlgorithmName() {<span class="keywordflow">return</span> B::ToEnum() == BIG_ENDIAN ? <span class="stringliteral">"Panama-BE"</span> : <span class="stringliteral">"Panama-LE"</span>;}00055 00056 <span class="keyword">protected</span>:00057         <span class="keywordtype">void</span> Init()00058         {00059                 <a class="code" href="class_panama_hash.html">PanamaHash&lt;B&gt;::Init</a>();00060                 <a class="code" href="class_hash_transformation.html#_x_m_a_c_ca5">Update</a>(m_key, m_key.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>());00061         }00062 00063         <a class="code" href="class_sec_block.html">SecByteBlock</a> m_key;00064 };00065 <span class="comment"></span>00066 <span class="comment">/// Panama MAC</span>00067 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> B = LittleEndian&gt;<a name="l00068"></a><a class="code" href="class_panama_m_a_c.html">00068</a> <span class="keyword">class </span><a class="code" href="class_panama_m_a_c.html">PanamaMAC</a> : <span class="keyword">public</span> <a class="code" href="class_message_authentication_code_final_template.html">MessageAuthenticationCodeFinalTemplate</a>&lt;PanamaMAC_Base&lt;B&gt; &gt;00069 {00070 <span class="keyword">public</span>:00071         <a class="code" href="class_panama_m_a_c.html">PanamaMAC</a>() {}00072         <a class="code" href="class_panama_m_a_c.html">PanamaMAC</a>(<span class="keyword">const</span> byte *key, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length=<a class="code" href="class_panama_m_a_c___base.html">PanamaMAC_Base&lt;B&gt;</a>::DEFAULT_KEYLENGTH)00073                 {<a class="code" href="class_message_authentication_code_final_template.html#_message_authentication_code_final_templatea3">SetKey</a>(key, length);}00074 };00075 <span class="comment"></span>00076 <span class="comment">//! .</span>00077 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> B&gt;<a name="l00078"></a><a class="code" href="struct_panama_cipher_info.html">00078</a> <span class="keyword">struct </span><a class="code" href="struct_panama_cipher_info.html">PanamaCipherInfo</a> : <span class="keyword">public</span> <a class="code" href="class_variable_key_length.html">VariableKeyLength</a>&lt;32, 32, 64, 32, SimpleKeyingInterface::NOT_RESYNCHRONIZABLE&gt;00079 {00080         <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * StaticAlgorithmName() {<span class="keywordflow">return</span> B::ToEnum() == BIG_ENDIAN_ORDER ? <span class="stringliteral">"Panama-BE"</span> : <span class="stringliteral">"Panama-LE"</span>;}00081 };00082 <span class="comment"></span>00083 <span class="comment">//! .</span>00084 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> B&gt;<a name="l00085"></a><a class="code" href="class_panama_cipher_policy.html">00085</a> <span class="keyword">class </span><a class="code" href="class_panama_cipher_policy.html">PanamaCipherPolicy</a> : <span class="keyword">public</span> AdditiveCipherConcretePolicy&lt;word32, 32&gt;, 00086                                                         <span class="keyword">public</span> <a class="code" href="struct_panama_cipher_info.html">PanamaCipherInfo</a>&lt;B&gt;,00087                                                         <span class="keyword">protected</span> <a class="code" href="class_panama.html">Panama</a>&lt;B&gt;00088 {00089 <span class="keyword">protected</span>:00090         <span class="keywordtype">void</span> CipherSetKey(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;params, <span class="keyword">const</span> byte *key, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length);00091         <span class="keywordtype">void</span> OperateKeystream(KeystreamOperation operation, byte *output, <span class="keyword">const</span> byte *input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iterationCount);00092         <span class="keywordtype">bool</span> IsRandomAccess()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}00093 };00094 <span class="comment"></span>00095 <span class="comment">//! &lt;a href="http://www.weidai.com/scan-mirror/cs.html#Panama"&gt;Panama Stream Cipher&lt;/a&gt;</span>00096 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> B = LittleEndian&gt;<a name="l00097"></a><a class="code" href="struct_panama_cipher.html">00097</a> <span class="keyword">struct </span><a class="code" href="struct_panama_cipher.html">PanamaCipher</a> : <span class="keyword">public</span> <a class="code" href="struct_panama_cipher_info.html">PanamaCipherInfo</a>&lt;B&gt;, <span class="keyword">public</span> <a class="code" href="struct_symmetric_cipher_documentation.html">SymmetricCipherDocumentation</a>00098 {<a name="l00099"></a><a class="code" href="struct_panama_cipher.html#_panama_cipherw0">00099</a>         <span class="keyword">typedef</span> SymmetricCipherFinalTemplate&lt;ConcretePolicyHolder&lt;PanamaCipherPolicy&lt;B&gt;, AdditiveCipherTemplate&lt;&gt; &gt; &gt; Encryption;<a name="l00100"></a><a class="code" href="struct_panama_cipher.html#_panama_cipherw1">00100</a>         <span class="keyword">typedef</span> Encryption Decryption;00101 };00102 00103 NAMESPACE_END00104 00105 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:21 2003 for Crypto++ by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>

⌨️ 快捷键说明

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