<!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++: words.h 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 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">Class 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">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div> <h1>words.h</h1><pre class="fragment"><div>00001 <span class="preprocessor">#ifndef CRYPTOPP_WORDS_H</span> 00002 <span class="preprocessor"></span><span class="preprocessor">#define CRYPTOPP_WORDS_H</span> 00003 <span class="preprocessor"></span> 00004 <span class="preprocessor">#include "misc.h"</span> 00005 00006 NAMESPACE_BEGIN(CryptoPP) 00007 00008 inline <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> CountWords(const word *X, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> N) 00009 { 00010 <span class="keywordflow">while</span> (N && X[N-1]==0) 00011 N--; 00012 <span class="keywordflow">return</span> N; 00013 } 00014 00015 <span class="keyword">inline</span> <span class="keywordtype">void</span> SetWords(word *r, word a, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n) 00016 { 00017 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<n; i++) 00018 r[i] = a; 00019 } 00020 00021 <span class="keyword">inline</span> <span class="keywordtype">void</span> CopyWords(word *r, <span class="keyword">const</span> word *a, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n) 00022 { 00023 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<n; i++) 00024 r[i] = a[i]; 00025 } 00026 00027 <span class="keyword">inline</span> <span class="keywordtype">void</span> XorWords(word *r, <span class="keyword">const</span> word *a, <span class="keyword">const</span> word *b, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n) 00028 { 00029 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<n; i++) 00030 r[i] = a[i] ^ b[i]; 00031 } 00032 00033 <span class="keyword">inline</span> <span class="keywordtype">void</span> XorWords(word *r, <span class="keyword">const</span> word *a, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n) 00034 { 00035 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<n; i++) 00036 r[i] ^= a[i]; 00037 } 00038 00039 <span class="keyword">inline</span> <span class="keywordtype">void</span> AndWords(word *r, <span class="keyword">const</span> word *a, <span class="keyword">const</span> word *b, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n) 00040 { 00041 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<n; i++) 00042 r[i] = a[i] & b[i]; 00043 } 00044 00045 <span class="keyword">inline</span> <span class="keywordtype">void</span> AndWords(word *r, <span class="keyword">const</span> word *a, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n) 00046 { 00047 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<n; i++) 00048 r[i] &= a[i]; 00049 } 00050 00051 <span class="keyword">inline</span> word ShiftWordsLeftByBits(word *r, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> shiftBits) 00052 { 00053 assert (shiftBits<WORD_BITS); 00054 word u, carry=0; 00055 <span class="keywordflow">if</span> (shiftBits) 00056 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<n; i++) 00057 { 00058 u = r[i]; 00059 r[i] = (u << shiftBits) | carry; 00060 carry = u >> (WORD_BITS-shiftBits); 00061 } 00062 <span class="keywordflow">return</span> carry; 00063 } 00064 00065 <span class="keyword">inline</span> word ShiftWordsRightByBits(word *r, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> shiftBits) 00066 { 00067 assert (shiftBits<WORD_BITS); 00068 word u, carry=0; 00069 <span class="keywordflow">if</span> (shiftBits) 00070 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=n-1; i>=0; i--) 00071 { 00072 u = r[i]; 00073 r[i] = (u >> shiftBits) | carry; 00074 carry = u << (WORD_BITS-shiftBits); 00075 } 00076 <span class="keywordflow">return</span> carry; 00077 } 00078 00079 <span class="keyword">inline</span> <span class="keywordtype">void</span> ShiftWordsLeftByWords(word *r, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> shiftWords) 00080 { 00081 shiftWords = STDMIN(shiftWords, n); 00082 <span class="keywordflow">if</span> (shiftWords) 00083 { 00084 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=n-1; i>=shiftWords; i--) 00085 r[i] = r[i-shiftWords]; 00086 SetWords(r, 0, shiftWords); 00087 } 00088 } 00089 00090 <span class="keyword">inline</span> <span class="keywordtype">void</span> ShiftWordsRightByWords(word *r, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> shiftWords) 00091 { 00092 shiftWords = STDMIN(shiftWords, n); 00093 <span class="keywordflow">if</span> (shiftWords) 00094 { 00095 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i+shiftWords<n; i++) 00096 r[i] = r[i+shiftWords]; 00097 SetWords(r+n-shiftWords, 0, shiftWords); 00098 } 00099 } 00100 00101 NAMESPACE_END 00102 00103 <span class="preprocessor">#endif</span> </div></pre><hr size="1"><address style="align: right;"><small>Generated on Sun Nov 7 08:23:59 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>