Sophie

Sophie

distrib > Mandriva > 10.2 > i586 > media > contrib > by-pkgid > 7457b841ac8136d3a1a9d3d960c5252e > files > 1317

libcryptopp-doc-5.2.1-2mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Crypto++: misc.cpp Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.7 -->
<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">Class&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">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a></div>
<h1>misc.cpp</h1><pre class="fragment"><div>00001 <span class="comment">// misc.cpp - written and placed in the public domain by Wei Dai</span>
00002 
00003 <span class="preprocessor">#include "pch.h"</span>
00004 
00005 <span class="preprocessor">#ifndef CRYPTOPP_IMPORTS</span>
00006 <span class="preprocessor"></span>
00007 <span class="preprocessor">#include "misc.h"</span>
00008 <span class="preprocessor">#include "words.h"</span>
00009 <span class="preprocessor">#include &lt;new&gt;</span>
00010 
00011 NAMESPACE_BEGIN(CryptoPP)
00012 
00013 void xorbuf(byte *buf, const byte *mask, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count)
00014 {
00015         <span class="keywordflow">if</span> (((size_t)buf | (size_t)mask | count) % WORD_SIZE == 0)
00016                 XorWords((word *)buf, (<span class="keyword">const</span> word *)mask, count/WORD_SIZE);
00017         <span class="keywordflow">else</span>
00018         {
00019                 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;count; i++)
00020                         buf[i] ^= mask[i];
00021         }
00022 }
00023 
00024 <span class="keywordtype">void</span> xorbuf(byte *output, <span class="keyword">const</span> byte *input, <span class="keyword">const</span> byte *mask, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count)
00025 {
00026         <span class="keywordflow">if</span> (((size_t)output | (size_t)input | (size_t)mask | count) % WORD_SIZE == 0)
00027                 XorWords((word *)output, (<span class="keyword">const</span> word *)input, (<span class="keyword">const</span> word *)mask, count/WORD_SIZE);
00028         <span class="keywordflow">else</span>
00029         {
00030                 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;count; i++)
00031                         output[i] = input[i] ^ mask[i];
00032         }
00033 }
00034 
00035 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Parity(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> value)
00036 {
00037         <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=8*<span class="keyword">sizeof</span>(value)/2; i&gt;0; i/=2)
00038                 value ^= value &gt;&gt; i;
00039         <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)value&amp;1;
00040 }
00041 
00042 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> BytePrecision(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> value)
00043 {
00044         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;
00045         <span class="keywordflow">for</span> (i=<span class="keyword">sizeof</span>(value); i; --i)
00046                 <span class="keywordflow">if</span> (value &gt;&gt; (i-1)*8)
00047                         <span class="keywordflow">break</span>;
00048 
00049         <span class="keywordflow">return</span> i;
00050 }
00051 
00052 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> BitPrecision(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> value)
00053 {
00054         <span class="keywordflow">if</span> (!value)
00055                 <span class="keywordflow">return</span> 0;
00056 
00057         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> l=0, h=8*<span class="keyword">sizeof</span>(value);
00058 
00059         <span class="keywordflow">while</span> (h-l &gt; 1)
00060         {
00061                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t = (l+h)/2;
00062                 <span class="keywordflow">if</span> (value &gt;&gt; t)
00063                         l = t;
00064                 <span class="keywordflow">else</span>
00065                         h = t;
00066         }
00067 
00068         <span class="keywordflow">return</span> h;
00069 }
00070 
00071 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Crop(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> value, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size)
00072 {
00073         <span class="keywordflow">if</span> (size &lt; 8*<span class="keyword">sizeof</span>(value))
00074         <span class="keywordflow">return</span> (value &amp; ((1L &lt;&lt; size) - 1));
00075         <span class="keywordflow">else</span>
00076                 <span class="keywordflow">return</span> value;
00077 }
00078 
00079 <span class="preprocessor">#if !(defined(_MSC_VER) &amp;&amp; (_MSC_VER &lt; 1300))</span>
00080 <span class="preprocessor"></span><span class="keyword">using</span> std::new_handler;
00081 <span class="keyword">using</span> std::set_new_handler;
00082 <span class="preprocessor">#endif</span>
00083 <span class="preprocessor"></span>
00084 <span class="keywordtype">void</span> CallNewHandler()
00085 {
00086         new_handler newHandler = set_new_handler(NULL);
00087         <span class="keywordflow">if</span> (newHandler)
00088                 set_new_handler(newHandler);
00089 
00090         <span class="keywordflow">if</span> (newHandler)
00091                 newHandler();
00092         <span class="keywordflow">else</span>
00093                 <span class="keywordflow">throw</span> std::bad_alloc();
00094 }
00095 
00096 NAMESPACE_END
00097 
00098 <span class="preprocessor">#endif</span>
</div></pre><hr size="1"><address style="align: right;"><small>Generated on Sun Nov 7 08:23:58 2004 for Crypto++ by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 ></a> 1.3.7 </small></address>
</body>
</html>