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

📄 sha_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>Crypto++: sha.cpp Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"><link href="tabs.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.5.2 --><div class="tabs">  <ul>    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>    <li><a href="namespaces.html"><span>Namespaces</span></a></li>    <li><a href="classes.html"><span>Classes</span></a></li>    <li class="current"><a href="files.html"><span>Files</span></a></li>  </ul></div><div class="tabs">  <ul>    <li><a href="files.html"><span>File&nbsp;List</span></a></li>    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>  </ul></div><h1>sha.cpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// sha.cpp - modified by Wei Dai from Steve Reid's public domain sha1.c</span><a name="l00002"></a>00002 <a name="l00003"></a>00003 <span class="comment">// Steve Reid implemented SHA-1. Wei Dai implemented SHA-2.</span><a name="l00004"></a>00004 <span class="comment">// Both are in the public domain.</span><a name="l00005"></a>00005 <a name="l00006"></a>00006 <span class="preprocessor">#include "pch.h"</span><a name="l00007"></a>00007 <a name="l00008"></a>00008 <span class="preprocessor">#ifndef CRYPTOPP_IMPORTS</span><a name="l00009"></a>00009 <span class="preprocessor"></span><a name="l00010"></a>00010 <span class="preprocessor">#include "sha.h"</span><a name="l00011"></a>00011 <span class="preprocessor">#include "misc.h"</span><a name="l00012"></a>00012 <span class="preprocessor">#include "cpu.h"</span><a name="l00013"></a>00013 <a name="l00014"></a>00014 NAMESPACE_BEGIN(CryptoPP)<a name="l00015"></a>00015 <a name="l00016"></a>00016 <span class="comment">// start of Steve Reid's code</span><a name="l00017"></a>00017 <a name="l00018"></a>00018 <span class="preprocessor">#define blk0(i) (W[i] = data[i])</span><a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define blk1(i) (W[i&amp;15] = rotlFixed(W[(i+13)&amp;15]^W[(i+8)&amp;15]^W[(i+2)&amp;15]^W[i&amp;15],1))</span><a name="l00020"></a>00020 <span class="preprocessor"></span><a name="l00021"></a><a class="code" href="class_s_h_a1.html#cc1ae4d89d0c726f274c6b75ea6e4908">00021</a> <span class="keywordtype">void</span> <a class="code" href="class_s_h_a1.html#cc1ae4d89d0c726f274c6b75ea6e4908">SHA1::InitState</a>(HashWordType *state)<a name="l00022"></a>00022 {<a name="l00023"></a>00023         state[0] = 0x67452301L;<a name="l00024"></a>00024         state[1] = 0xEFCDAB89L;<a name="l00025"></a>00025         state[2] = 0x98BADCFEL;<a name="l00026"></a>00026         state[3] = 0x10325476L;<a name="l00027"></a>00027         state[4] = 0xC3D2E1F0L;<a name="l00028"></a>00028 }<a name="l00029"></a>00029 <a name="l00030"></a>00030 <span class="preprocessor">#define f1(x,y,z) (z^(x&amp;(y^z)))</span><a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define f2(x,y,z) (x^y^z)</span><a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#define f3(x,y,z) ((x&amp;y)|(z&amp;(x|y)))</span><a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define f4(x,y,z) (x^y^z)</span><a name="l00034"></a>00034 <span class="preprocessor"></span><a name="l00035"></a>00035 <span class="comment">/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */</span><a name="l00036"></a>00036 <span class="preprocessor">#define R0(v,w,x,y,z,i) z+=f1(w,x,y)+blk0(i)+0x5A827999+rotlFixed(v,5);w=rotlFixed(w,30);</span><a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define R1(v,w,x,y,z,i) z+=f1(w,x,y)+blk1(i)+0x5A827999+rotlFixed(v,5);w=rotlFixed(w,30);</span><a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define R2(v,w,x,y,z,i) z+=f2(w,x,y)+blk1(i)+0x6ED9EBA1+rotlFixed(v,5);w=rotlFixed(w,30);</span><a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define R3(v,w,x,y,z,i) z+=f3(w,x,y)+blk1(i)+0x8F1BBCDC+rotlFixed(v,5);w=rotlFixed(w,30);</span><a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define R4(v,w,x,y,z,i) z+=f4(w,x,y)+blk1(i)+0xCA62C1D6+rotlFixed(v,5);w=rotlFixed(w,30);</span><a name="l00041"></a>00041 <span class="preprocessor"></span><a name="l00042"></a><a class="code" href="class_s_h_a1.html#b8d330e8b8fdc39a5429ef3f056645da">00042</a> <span class="keywordtype">void</span> <a class="code" href="class_s_h_a1.html#b8d330e8b8fdc39a5429ef3f056645da">SHA1::Transform</a>(word32 *state, <span class="keyword">const</span> word32 *data)<a name="l00043"></a>00043 {<a name="l00044"></a>00044         word32 W[16];<a name="l00045"></a>00045     <span class="comment">/* Copy context-&gt;state[] to working vars */</span><a name="l00046"></a>00046     word32 a = state[0];<a name="l00047"></a>00047     word32 b = state[1];<a name="l00048"></a>00048     word32 c = state[2];<a name="l00049"></a>00049     word32 d = state[3];<a name="l00050"></a>00050     word32 e = state[4];<a name="l00051"></a>00051     <span class="comment">/* 4 rounds of 20 operations each. Loop unrolled. */</span><a name="l00052"></a>00052     R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);<a name="l00053"></a>00053     R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);<a name="l00054"></a>00054     R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);<a name="l00055"></a>00055     R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);<a name="l00056"></a>00056     R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);<a name="l00057"></a>00057     R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);<a name="l00058"></a>00058     R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);<a name="l00059"></a>00059     R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);<a name="l00060"></a>00060     R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);<a name="l00061"></a>00061     R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);<a name="l00062"></a>00062     R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);<a name="l00063"></a>00063     R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);<a name="l00064"></a>00064     R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);<a name="l00065"></a>00065     R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);<a name="l00066"></a>00066     R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);<a name="l00067"></a>00067     R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);<a name="l00068"></a>00068     R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);<a name="l00069"></a>00069     R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);<a name="l00070"></a>00070     R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);<a name="l00071"></a>00071     R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);<a name="l00072"></a>00072     <span class="comment">/* Add the working vars back into context.state[] */</span><a name="l00073"></a>00073     state[0] += a;<a name="l00074"></a>00074     state[1] += b;<a name="l00075"></a>00075     state[2] += c;<a name="l00076"></a>00076     state[3] += d;<a name="l00077"></a>00077     state[4] += e;<a name="l00078"></a>00078 }<a name="l00079"></a>00079 <a name="l00080"></a>00080 <span class="comment">// end of Steve Reid's code</span><a name="l00081"></a>00081 <a name="l00082"></a>00082 <span class="comment">// *************************************************************</span><a name="l00083"></a>00083 <a name="l00084"></a><a class="code" href="class_s_h_a224.html#41935106cc970f7cf5344765b2bc732c">00084</a> <span class="keywordtype">void</span> <a class="code" href="class_s_h_a224.html#41935106cc970f7cf5344765b2bc732c">SHA224::InitState</a>(<a class="code" href="class_iterated_hash.html#ce0350088eea8679cbe23668d2498c07">HashWordType</a> *state)<a name="l00085"></a>00085 {<a name="l00086"></a>00086         <span class="keyword">static</span> <span class="keyword">const</span> word32 s[8] = {0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4};<a name="l00087"></a>00087         memcpy(state, s, <span class="keyword">sizeof</span>(s));<a name="l00088"></a>00088 }<a name="l00089"></a>00089 <a name="l00090"></a><a class="code" href="class_s_h_a256.html#10038115312a04ab87f043355d421a35">00090</a> <span class="keywordtype">void</span> <a class="code" href="class_s_h_a256.html#10038115312a04ab87f043355d421a35">SHA256::InitState</a>(<a class="code" href="class_iterated_hash.html#ce0350088eea8679cbe23668d2498c07">HashWordType</a> *state)<a name="l00091"></a>00091 {<a name="l00092"></a>00092         <span class="keyword">static</span> <span class="keyword">const</span> word32 s[8] = {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};<a name="l00093"></a>00093         memcpy(state, s, <span class="keyword">sizeof</span>(s));<a name="l00094"></a>00094 }<a name="l00095"></a>00095 <a name="l00096"></a>00096 <span class="keyword">static</span> <span class="keyword">const</span> word32 SHA256_K[64] = {<a name="l00097"></a>00097         0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,<a name="l00098"></a>00098         0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,<a name="l00099"></a>00099         0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,<a name="l00100"></a>00100         0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,<a name="l00101"></a>00101         0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,<a name="l00102"></a>00102         0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,<a name="l00103"></a>00103         0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,<a name="l00104"></a>00104         0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,<a name="l00105"></a>00105         0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,<a name="l00106"></a>00106         0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,<a name="l00107"></a>00107         0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,<a name="l00108"></a>00108         0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,<a name="l00109"></a>00109         0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,<a name="l00110"></a>00110         0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,<a name="l00111"></a>00111         0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,<a name="l00112"></a>00112         0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2<a name="l00113"></a>00113 };<a name="l00114"></a>00114 <a name="l00115"></a>00115 <span class="preprocessor">#define blk2(i) (W[i&amp;15]+=s1(W[(i-2)&amp;15])+W[(i-7)&amp;15]+s0(W[(i-15)&amp;15]))</span><a name="l00116"></a>00116 <span class="preprocessor"></span><a name="l00117"></a>00117 <span class="preprocessor">#define Ch(x,y,z) (z^(x&amp;(y^z)))</span><a name="l00118"></a>00118 <span class="preprocessor"></span><span class="preprocessor">#define Maj(x,y,z) ((x&amp;y)|(z&amp;(x|y)))</span><a name="l00119"></a>00119 <span class="preprocessor"></span><a name="l00120"></a>00120 <span class="preprocessor">#define a(i) T[(0-i)&amp;7]</span><a name="l00121"></a>00121 <span class="preprocessor"></span><span class="preprocessor">#define b(i) T[(1-i)&amp;7]</span><a name="l00122"></a>00122 <span class="preprocessor"></span><span class="preprocessor">#define c(i) T[(2-i)&amp;7]</span><a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">#define d(i) T[(3-i)&amp;7]</span><a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor">#define e(i) T[(4-i)&amp;7]</span>

⌨️ 快捷键说明

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