📄 panama_8h-source.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 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>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> <<span class="keyword">class</span> B><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<word32, 17*2 + STAGES*sizeof(Stage)> 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">/// <a href="http://www.weidai.com/scan-mirror/md.html#Panama">Panama Hash</a></span>00028 <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">class</span> B = LittleEndian><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><B>, <span class="keyword">public</span> <a class="code" href="class_iterated_hash.html">IteratedHash</a><word32, NativeByteOrder, 32>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<word32, NativeByteOrder, 32></a>(0) {<a class="code" href="class_panama.html">Panama<B>::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<B>::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> <<span class="keyword">class</span> B = LittleEndian><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><B>, <span class="keyword">public</span> <a class="code" href="class_variable_key_length.html">VariableKeyLength</a><32, 0, UINT_MAX>, <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<B>::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> <<span class="keyword">class</span> B = LittleEndian><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><PanamaMAC_Base<B> >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<B></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> <<span class="keyword">class</span> B><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><32, 32, 64, 32, SimpleKeyingInterface::NOT_RESYNCHRONIZABLE>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> <<span class="keyword">class</span> B><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<word32, 32>, 00086 <span class="keyword">public</span> <a class="code" href="struct_panama_cipher_info.html">PanamaCipherInfo</a><B>,00087 <span class="keyword">protected</span> <a class="code" href="class_panama.html">Panama</a><B>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> &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">//! <a href="http://www.weidai.com/scan-mirror/cs.html#Panama">Panama Stream Cipher</a></span>00096 <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">class</span> B = LittleEndian><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><B>, <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<ConcretePolicyHolder<PanamaCipherPolicy<B>, AdditiveCipherTemplate<> > > 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 + -