📄 simple_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++: simple.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>simple.h</h1><a href="simple_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">// simple.h - written and placed in the public domain by Wei Dai</span><span class="comment"></span>00002 <span class="comment">/*! \file</span>00003 <span class="comment"> Simple non-interface classes derived from classes in cryptlib.h.</span>00004 <span class="comment">*/</span>00005 00006 <span class="preprocessor">#ifndef CRYPTOPP_SIMPLE_H</span>00007 <span class="preprocessor"></span><span class="preprocessor">#define CRYPTOPP_SIMPLE_H</span>00008 <span class="preprocessor"></span>00009 <span class="preprocessor">#include "<a class="code" href="cryptlib_8h.html">cryptlib.h</a>"</span>00010 <span class="preprocessor">#include "misc.h"</span>00011 00012 NAMESPACE_BEGIN(CryptoPP)00013 00014 <span class="keyword">template</span> <<span class="keyword">class</span> BASE, <span class="keyword">class</span> ALGORITHM_INFO = BASE>00015 <span class="keyword">class </span>AlgorithmImpl : <span class="keyword">public</span> BASE00016 {00017 <span class="keyword">public</span>:00018 std::string AlgorithmName()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ALGORITHM_INFO::StaticAlgorithmName();}00019 };00020 <span class="comment"></span>00021 <span class="comment">//! .</span><a name="l00022"></a><a class="code" href="class_invalid_key_length.html">00022</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL InvalidKeyLength : <span class="keyword">public</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>00023 {00024 <span class="keyword">public</span>:00025 <span class="keyword">explicit</span> InvalidKeyLength(<span class="keyword">const</span> std::string &algorithm, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length) : <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(algorithm + <span class="stringliteral">": "</span> + IntToString(length) + <span class="stringliteral">" is not a valid key length"</span>) {}00026 };00027 <span class="comment"></span>00028 <span class="comment">//! .</span><a name="l00029"></a><a class="code" href="class_invalid_rounds.html">00029</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL InvalidRounds : <span class="keyword">public</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>00030 {00031 <span class="keyword">public</span>:00032 <span class="keyword">explicit</span> InvalidRounds(<span class="keyword">const</span> std::string &algorithm, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rounds) : <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(algorithm + <span class="stringliteral">": "</span> + IntToString(rounds) + <span class="stringliteral">" is not a valid number of rounds"</span>) {}00033 };00034 00035 <span class="keyword">class </span>CRYPTOPP_DLL HashTransformationWithDefaultTruncation : <span class="keyword">public</span> <a class="code" href="class_hash_transformation.html">HashTransformation</a>00036 {00037 <span class="keyword">public</span>:00038 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_hash_transformation.html#_x_m_a_c_c___basea13">Final</a>(byte *digest) =0;00039 <span class="keywordtype">void</span> <a class="code" href="class_hash_transformation.html#_x_m_a_c_ca15">TruncatedFinal</a>(byte *digest, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> digestSize);00040 };00041 <span class="comment"></span>00042 <span class="comment">//! .</span>00043 <span class="comment"></span><span class="comment">// TODO: look into this virtual inheritance</span><a name="l00044"></a><a class="code" href="class_a_s_n1_crypto_material.html">00044</a> <span class="keyword">class </span>CRYPTOPP_DLL ASN1CryptoMaterial : <span class="keyword">virtual</span> <span class="keyword">public</span> <a class="code" href="class_a_s_n1_object.html">ASN1Object</a>, <span class="keyword">virtual</span> <span class="keyword">public</span> <a class="code" href="class_crypto_material.html">CryptoMaterial</a>00045 {00046 <span class="keyword">public</span>:<a name="l00047"></a><a class="code" href="class_a_s_n1_crypto_material.html#_x509_public_keya8">00047</a> <span class="keywordtype">void</span> <a class="code" href="class_crypto_material.html#_x_t_r___d_ha30">Save</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)<span class="keyword"> const</span>00048 <span class="keyword"> </span>{<a class="code" href="class_a_s_n1_object.html#_x509_public_keya10">BEREncode</a>(bt);}<a name="l00049"></a><a class="code" href="class_a_s_n1_crypto_material.html#_x509_public_keya9">00049</a> <span class="keywordtype">void</span> <a class="code" href="class_crypto_material.html#_x_t_r___d_ha31">Load</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)00050 {<a class="code" href="class_a_s_n1_object.html#_a_s_n1_objecta1">BERDecode</a>(bt);}00051 };00052 00053 <span class="comment">// *****************************</span>00054 00055 <span class="keyword">template</span> <<span class="keyword">class</span> T>00056 <span class="keyword">class </span>Bufferless : <span class="keyword">public</span> T00057 {00058 <span class="keyword">public</span>:00059 Bufferless() {}00060 Bufferless(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *q) : T(q) {}00061 <span class="keywordtype">bool</span> IsolatedFlush(<span class="keywordtype">bool</span> hardFlush, <span class="keywordtype">bool</span> blocking) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}00062 };00063 00064 <span class="keyword">template</span> <<span class="keyword">class</span> T>00065 <span class="keyword">class </span>Unflushable : <span class="keyword">public</span> T00066 {00067 <span class="keyword">public</span>:00068 Unflushable() {}00069 Unflushable(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *q) : T(q) {}00070 <span class="keywordtype">bool</span> Flush(<span class="keywordtype">bool</span> completeFlush, <span class="keywordtype">int</span> propagation=-1, <span class="keywordtype">bool</span> blocking=<span class="keyword">true</span>)00071 {<span class="keywordflow">return</span> ChannelFlush(NULL_CHANNEL, completeFlush, propagation);}00072 <span class="keywordtype">bool</span> IsolatedFlush(<span class="keywordtype">bool</span> hardFlush, <span class="keywordtype">bool</span> blocking)00073 {assert(<span class="keyword">false</span>); <span class="keywordflow">return</span> <span class="keyword">false</span>;}00074 <span class="keywordtype">bool</span> ChannelFlush(<span class="keyword">const</span> std::string &channel, <span class="keywordtype">bool</span> hardFlush, <span class="keywordtype">int</span> propagation=-1, <span class="keywordtype">bool</span> blocking=<span class="keyword">true</span>)00075 {00076 <span class="keywordflow">if</span> (hardFlush && !InputBufferIsEmpty())00077 <span class="keywordflow">throw</span> <a class="code" href="class_cannot_flush.html">CannotFlush</a>(<span class="stringliteral">"Unflushable<T>: this object has buffered input that cannot be flushed"</span>);00078 <span class="keywordflow">else</span> 00079 {00080 <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attached = AttachedTransformation();00081 <span class="keywordflow">return</span> attached && propagation ? attached-><a class="code" href="class_buffered_transformation.html#_zlib_decompressorz13_11">ChannelFlush</a>(channel, hardFlush, propagation-1, blocking) : false;00082 }00083 }00084 00085 <span class="keyword">protected</span>:00086 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> InputBufferIsEmpty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}00087 };00088 00089 <span class="keyword">template</span> <<span class="keyword">class</span> T>00090 <span class="keyword">class </span>InputRejecting : <span class="keyword">public</span> T00091 {00092 <span class="keyword">public</span>:00093 InputRejecting() {}00094 InputRejecting(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *q) : T(q) {}00095 00096 <span class="keyword">protected</span>:00097 <span class="keyword">struct </span>InputRejected : <span class="keyword">public</span> <a class="code" href="class_not_implemented.html">NotImplemented</a>00098 {InputRejected() : <a class="code" href="class_not_implemented.html">NotImplemented</a>("<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a>: this object doesn't allow input") {}};00099 00100 <span class="comment">// shouldn't be calling these functions on this class</span>00101 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Put2(<span class="keyword">const</span> byte *begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)00102 {<span class="keywordflow">throw</span> InputRejected();}00103 <span class="keywordtype">bool</span> IsolatedFlush(<span class="keywordtype">bool</span>, <span class="keywordtype">bool</span>) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}00104 <span class="keywordtype">bool</span> IsolatedMessageSeriesEnd(<span class="keywordtype">bool</span>) {<span class="keywordflow">throw</span> InputRejected();}00105 00106 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ChannelPut2(<span class="keyword">const</span> std::string &channel, <span class="keyword">const</span> byte *begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)00107 {<span class="keywordflow">throw</span> InputRejected();}00108 <span class="keywordtype">bool</span> ChannelMessageSeriesEnd(<span class="keyword">const</span> std::string &, <span class="keywordtype">int</span>, <span class="keywordtype">bool</span>) {<span class="keywordflow">throw</span> InputRejected();}00109 };00110 00111 <span class="keyword">template</span> <<span class="keyword">class</span> T>00112 <span class="keyword">class </span>CustomSignalPropagation : <span class="keyword">public</span> T00113 {00114 <span class="keyword">public</span>:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -