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

📄 vmac_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00367"></a>00367         );<a name="l00368"></a>00368 <span class="preprocessor">#endif</span><a name="l00369"></a>00369 <span class="preprocessor"></span>}<a name="l00370"></a>00370 <span class="preprocessor">#endif</span><a name="l00371"></a>00371 <span class="preprocessor"></span><a name="l00372"></a>00372 <span class="preprocessor">#if VMAC_BOOL_WORD128</span><a name="l00373"></a>00373 <span class="preprocessor"></span><span class="preprocessor">        #define DeclareNH(a) word128 a=0</span><a name="l00374"></a>00374 <span class="preprocessor"></span><span class="preprocessor">        #define MUL64(rh,rl,i1,i2) {word128 p = word128(i1)*(i2); rh = word64(p&gt;&gt;64); rl = word64(p);}</span><a name="l00375"></a>00375 <span class="preprocessor"></span><span class="preprocessor">        #define AccumulateNH(a, b, c) a += word128(b)*(c)</span><a name="l00376"></a>00376 <span class="preprocessor"></span><span class="preprocessor">        #define Multiply128(r, i1, i2) r = word128(word64(i1)) * word64(i2)</span><a name="l00377"></a>00377 <span class="preprocessor"></span><span class="preprocessor">#else</span><a name="l00378"></a>00378 <span class="preprocessor"></span><span class="preprocessor">        #if _MSC_VER &gt;= 1400 &amp;&amp; !defined(__INTEL_COMPILER)</span><a name="l00379"></a>00379 <span class="preprocessor"></span><span class="preprocessor">                #define MUL32(a, b) __emulu(word32(a), word32(b))</span><a name="l00380"></a>00380 <span class="preprocessor"></span><span class="preprocessor">        #else</span><a name="l00381"></a>00381 <span class="preprocessor"></span><span class="preprocessor">                #define MUL32(a, b) ((word64)((word32)(a)) * (word32)(b))</span><a name="l00382"></a>00382 <span class="preprocessor"></span><span class="preprocessor">        #endif</span><a name="l00383"></a>00383 <span class="preprocessor"></span><span class="preprocessor">        #if defined(CRYPTOPP_X64_ASM_AVAILABLE)</span><a name="l00384"></a>00384 <span class="preprocessor"></span><span class="preprocessor">                #define DeclareNH(a)                    word64 a##0=0, a##1=0</span><a name="l00385"></a>00385 <span class="preprocessor"></span><span class="preprocessor">                #define MUL64(rh,rl,i1,i2)              asm ("mulq %3" : "=a"(rl), "=d"(rh) : "a"(i1), "g"(i2) : "cc");</span><a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">                #define AccumulateNH(a, b, c)   asm ("mulq %3; addq %%rax, %0; adcq %%rdx, %1" : "+r"(a##0), "+r"(a##1) : "a"(b), "g"(c) : "%rdx", "cc");</span><a name="l00387"></a>00387 <span class="preprocessor"></span><span class="preprocessor">                #define ADD128(rh,rl,ih,il)     asm ("addq %3, %1; adcq %2, %0" : "+r"(rh),"+r"(rl) : "r"(ih),"r"(il) : "cc");</span><a name="l00388"></a>00388 <span class="preprocessor"></span><span class="preprocessor">        #elif defined(_MSC_VER) &amp;&amp; !defined(CRYPTOPP_SLOW_WORD64)</span><a name="l00389"></a>00389 <span class="preprocessor"></span><span class="preprocessor">                #define DeclareNH(a) word64 a##0=0, a##1=0</span><a name="l00390"></a>00390 <span class="preprocessor"></span><span class="preprocessor">                #define MUL64(rh,rl,i1,i2)   (rl) = _umul128(i1,i2,&amp;(rh));</span><a name="l00391"></a>00391 <span class="preprocessor"></span><span class="preprocessor">                #define AccumulateNH(a, b, c)   {\</span><a name="l00392"></a>00392 <span class="preprocessor">                        word64 ph, pl;\</span><a name="l00393"></a>00393 <span class="preprocessor">                        pl = _umul128(b,c,&amp;ph);\</span><a name="l00394"></a>00394 <span class="preprocessor">                        a##0 += pl;\</span><a name="l00395"></a>00395 <span class="preprocessor">                        a##1 += ph + (a##0 &lt; pl);}</span><a name="l00396"></a>00396 <span class="preprocessor"></span><span class="preprocessor">        #else</span><a name="l00397"></a>00397 <span class="preprocessor"></span><span class="preprocessor">                #define VMAC_BOOL_32BIT 1</span><a name="l00398"></a>00398 <span class="preprocessor"></span><span class="preprocessor">                #define DeclareNH(a) word64 a##0=0, a##1=0, a##2=0</span><a name="l00399"></a>00399 <span class="preprocessor"></span><span class="preprocessor">                #define MUL64(rh,rl,i1,i2)                                               \</span><a name="l00400"></a>00400 <span class="preprocessor">                        {   word64 _i1 = (i1), _i2 = (i2);                                 \</span><a name="l00401"></a>00401 <span class="preprocessor">                                word64 m1= MUL32(_i1,_i2&gt;&gt;32);                                 \</span><a name="l00402"></a>00402 <span class="preprocessor">                                word64 m2= MUL32(_i1&gt;&gt;32,_i2);                                 \</span><a name="l00403"></a>00403 <span class="preprocessor">                                rh         = MUL32(_i1&gt;&gt;32,_i2&gt;&gt;32);                             \</span><a name="l00404"></a>00404 <span class="preprocessor">                                rl         = MUL32(_i1,_i2);                                     \</span><a name="l00405"></a>00405 <span class="preprocessor">                                ADD128(rh,rl,(m1 &gt;&gt; 32),(m1 &lt;&lt; 32));                             \</span><a name="l00406"></a>00406 <span class="preprocessor">                                ADD128(rh,rl,(m2 &gt;&gt; 32),(m2 &lt;&lt; 32));                             \</span><a name="l00407"></a>00407 <span class="preprocessor">                        }</span><a name="l00408"></a>00408 <span class="preprocessor"></span><span class="preprocessor">                #define AccumulateNH(a, b, c)   {\</span><a name="l00409"></a>00409 <span class="preprocessor">                        word64 p = MUL32(b, c);\</span><a name="l00410"></a>00410 <span class="preprocessor">                        a##1 += word32((p)&gt;&gt;32);\</span><a name="l00411"></a>00411 <span class="preprocessor">                        a##0 += word32(p);\</span><a name="l00412"></a>00412 <span class="preprocessor">                        p = MUL32((b)&gt;&gt;32, c);\</span><a name="l00413"></a>00413 <span class="preprocessor">                        a##2 += word32((p)&gt;&gt;32);\</span><a name="l00414"></a>00414 <span class="preprocessor">                        a##1 += word32(p);\</span><a name="l00415"></a>00415 <span class="preprocessor">                        p = MUL32((b)&gt;&gt;32, (c)&gt;&gt;32);\</span><a name="l00416"></a>00416 <span class="preprocessor">                        a##2 += p;\</span><a name="l00417"></a>00417 <span class="preprocessor">                        p = MUL32(b, (c)&gt;&gt;32);\</span><a name="l00418"></a>00418 <span class="preprocessor">                        a##1 += word32(p);\</span><a name="l00419"></a>00419 <span class="preprocessor">                        a##2 += word32(p&gt;&gt;32);}</span><a name="l00420"></a>00420 <span class="preprocessor"></span><span class="preprocessor">        #endif</span><a name="l00421"></a>00421 <span class="preprocessor"></span><span class="preprocessor">#endif</span><a name="l00422"></a>00422 <span class="preprocessor"></span><span class="preprocessor">#ifndef VMAC_BOOL_32BIT</span><a name="l00423"></a>00423 <span class="preprocessor"></span><span class="preprocessor">        #define VMAC_BOOL_32BIT 0</span><a name="l00424"></a>00424 <span class="preprocessor"></span><span class="preprocessor">#endif</span><a name="l00425"></a>00425 <span class="preprocessor"></span><span class="preprocessor">#ifndef ADD128</span><a name="l00426"></a>00426 <span class="preprocessor"></span><span class="preprocessor">        #define ADD128(rh,rl,ih,il)                                          \</span><a name="l00427"></a>00427 <span class="preprocessor">                {   word64 _il = (il);                                         \</span><a name="l00428"></a>00428 <span class="preprocessor">                        (rl) += (_il);                                               \</span><a name="l00429"></a>00429 <span class="preprocessor">                        (rh) += (ih) + ((rl) &lt; (_il));                               \</span><a name="l00430"></a>00430 <span class="preprocessor">                }</span><a name="l00431"></a>00431 <span class="preprocessor"></span><span class="preprocessor">#endif</span><a name="l00432"></a>00432 <span class="preprocessor"></span><a name="l00433"></a>00433 <span class="preprocessor">#if !(defined(_MSC_VER) &amp;&amp; _MSC_VER &lt; 1300)</span><a name="l00434"></a>00434 <span class="preprocessor"></span><span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> T_128BitTag&gt;<a name="l00435"></a>00435 <span class="preprocessor">#endif</span><a name="l00436"></a><a class="code" href="class_v_m_a_c___base.html#ee86826a7402cba3406a279c8973e454">00436</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="class_v_m_a_c___base.html#ee86826a7402cba3406a279c8973e454">VMAC_Base::VHASH_Update_Template</a>(<span class="keyword">const</span> word64 *data, <span class="keywordtype">size_t</span> blocksRemainingInWord64)<a name="l00437"></a>00437 {<a name="l00438"></a>00438 <span class="preprocessor">        #define INNER_LOOP_ITERATION(j) {\</span><a name="l00439"></a>00439 <span class="preprocessor">                word64 d0 = ConditionalByteReverse(LITTLE_ENDIAN_ORDER, data[i+2*j+0]);\</span><a name="l00440"></a>00440 <span class="preprocessor">                word64 d1 = ConditionalByteReverse(LITTLE_ENDIAN_ORDER, data[i+2*j+1]);\</span><a name="l00441"></a>00441 <span class="preprocessor">                AccumulateNH(nhA, d0+nhK[i+2*j+0], d1+nhK[i+2*j+1]);\</span><a name="l00442"></a>00442 <span class="preprocessor">                if (T_128BitTag)\</span><a name="l00443"></a>00443 <span class="preprocessor">                        AccumulateNH(nhB, d0+nhK[i+2*j+2], d1+nhK[i+2*j+3]);\</span><a name="l00444"></a>00444 <span class="preprocessor">                }</span><a name="l00445"></a>00445 <span class="preprocessor"></span><a name="l00446"></a>00446 <span class="preprocessor">#if (defined(_MSC_VER) &amp;&amp; _MSC_VER &lt; 1300)</span><a name="l00447"></a>00447 <span class="preprocessor"></span>        <span class="keywordtype">bool</span> T_128BitTag = <a class="code" href="class_v_m_a_c___base.html#1da3fa5eb3c7e7346a4d2f4ff16c881b">m_is128</a>;<a name="l00448"></a>00448 <span class="preprocessor">#endif</span><a name="l00449"></a>00449 <span class="preprocessor"></span>        <span class="keywordtype">size_t</span> L1KeyLengthInWord64 = <a class="code" href="class_v_m_a_c___base.html#59b7e6dadc750dd324db269c8a5f59b9">m_L1KeyLength</a> / 8;<a name="l00450"></a>00450         <span class="keywordtype">size_t</span> innerLoopEnd = L1KeyLengthInWord64;<a name="l00451"></a>00451         <span class="keyword">const</span> word64 *nhK = <a class="code" href="class_v_m_a_c___base.html#fd452fbdfcf6b297b27249e6788ecbec">m_nhKey</a>();<a name="l00452"></a>00452         word64 *polyS = <a class="code" href="class_v_m_a_c___base.html#674767bdfe5ba30deaf057b0750f11a5">m_polyState</a>();<a name="l00453"></a>00453         <span class="keywordtype">bool</span> isFirstBlock = <span class="keyword">true</span>;<a name="l00454"></a>00454         <span class="keywordtype">size_t</span> i;<a name="l00455"></a>00455 <a name="l00456"></a>00456 <span class="preprocessor">        #if !VMAC_BOOL_32BIT</span><a name="l00457"></a>00457 <span class="preprocessor"></span><span class="preprocessor">                #if VMAC_BOOL_WORD128</span><a name="l00458"></a>00458 <span class="preprocessor"></span>                        word128 a1, a2;<a name="l00459"></a>00459 <span class="preprocessor">                #else</span><a name="l00460"></a>00460 <span class="preprocessor"></span>                        word64 ah1, al1, ah2, al2;<a name="l00461"></a>00461 <span class="preprocessor">                #endif</span><a name="l00462"></a>00462 <span class="preprocessor"></span>                word64 kh1, kl1, kh2, kl2;<a name="l00463"></a>00463                 kh1=(polyS+0*4+2)[0]; kl1=(polyS+0*4+2)[1];<a name="l00464"></a>00464                 <span class="keywordflow">if</span> (T_128BitTag)<a name="l00465"></a>00465                 {<a name="l00466"></a>00466                         kh2=(polyS+1*4+2)[0]; kl2=(polyS+1*4+2)[1];<a name="l00467"></a>00467                 }<a name="l00468"></a>00468 <span class="preprocessor">        #endif</span><a name="l00469"></a>00469 <span class="preprocessor"></span><a name="l00470"></a>00470         <span class="keywordflow">do</span><a name="l00471"></a>00471         {<a name="l00472"></a>00472                 DeclareNH(nhA);<a name="l00473"></a>00473                 DeclareNH(nhB);<a name="l00474"></a>00474 <a name="l00475"></a>00475                 <span class="keywordflow">if</span> (blocksRemainingInWord64 &lt; L1KeyLengthInWord64)<a name="l00476"></a>00476                 {<a name="l00477"></a>00477                         <span class="keywordflow">if</span> (blocksRemainingInWord64 % 8)<a name="l00478"></a>00478                         {<a name="l00479"></a>00479                                 innerLoopEnd = blocksRemainingInWord64 % 8;<a name="l00480"></a>00480                                 <span class="keywordflow">for</span> (i=0; i&lt;innerLoopEnd; i+=2)<a name="l00481"></a>00481                                         INNER_LOOP_ITERATION(0);<a name="l00482"></a>00482                                 blocksRemainingInWord64 -= innerLoopEnd;<a name="l00483"></a>00483                                 data += innerLoopEnd;<a name="l00484"></a>00484                         }<a name="l00485"></a>00485                         innerLoopEnd = blocksRemainingInWord64;<a name="l00486"></a>00486                 }<a name="l00487"></a>00487 <a name="l00488"></a>00488                 <span class="keywordflow">for</span> (i=0; i&lt;innerLoopEnd; i+=8)<a name="l00489"></a>00489                 {<a name="l00490"></a>00490                         INNER_LOOP_ITERATION(0);<a name="l00491"></a>00491                         INNER_LOOP_ITERATION(1);<a name="l00492"></a>00492                         INNER_LOOP_ITERATION(2);<a name="l00493"></a>00493                         INNER_LOOP_ITERATION(3);<a name="l00494"></a>00494                 }<a name="l00495"></a>00495                 blocksRemainingInWord64 -= innerLoopEnd;

⌨️ 快捷键说明

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