📄 misc_8h-source.html
字号:
<a name="l00552"></a>00552 {<a name="l00553"></a>00553 <span class="keywordflow">return</span> _rotl16(x, y);<a name="l00554"></a>00554 }<a name="l00555"></a>00555 <a name="l00556"></a>00556 <span class="keyword">template</span><> <span class="keyword">inline</span> word16 rotrMod<word16>(word16 x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y)<a name="l00557"></a>00557 {<a name="l00558"></a>00558 <span class="keywordflow">return</span> _rotr16(x, y);<a name="l00559"></a>00559 }<a name="l00560"></a>00560 <a name="l00561"></a>00561 <span class="keyword">template</span><> <span class="keyword">inline</span> byte rotlFixed<byte>(byte x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y)<a name="l00562"></a>00562 {<a name="l00563"></a>00563 assert(y < 8*<span class="keyword">sizeof</span>(x));<a name="l00564"></a>00564 <span class="keywordflow">return</span> y ? _rotl8(x, y) : x;<a name="l00565"></a>00565 }<a name="l00566"></a>00566 <a name="l00567"></a>00567 <span class="keyword">template</span><> <span class="keyword">inline</span> byte rotrFixed<byte>(byte x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y)<a name="l00568"></a>00568 {<a name="l00569"></a>00569 assert(y < 8*<span class="keyword">sizeof</span>(x));<a name="l00570"></a>00570 <span class="keywordflow">return</span> y ? _rotr8(x, y) : x;<a name="l00571"></a>00571 }<a name="l00572"></a>00572 <a name="l00573"></a>00573 <span class="keyword">template</span><> <span class="keyword">inline</span> byte rotlVariable<byte>(byte x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y)<a name="l00574"></a>00574 {<a name="l00575"></a>00575 assert(y < 8*<span class="keyword">sizeof</span>(x));<a name="l00576"></a>00576 <span class="keywordflow">return</span> _rotl8(x, y);<a name="l00577"></a>00577 }<a name="l00578"></a>00578 <a name="l00579"></a>00579 <span class="keyword">template</span><> <span class="keyword">inline</span> byte rotrVariable<byte>(byte x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y)<a name="l00580"></a>00580 {<a name="l00581"></a>00581 assert(y < 8*<span class="keyword">sizeof</span>(x));<a name="l00582"></a>00582 <span class="keywordflow">return</span> _rotr8(x, y);<a name="l00583"></a>00583 }<a name="l00584"></a>00584 <a name="l00585"></a>00585 <span class="keyword">template</span><> <span class="keyword">inline</span> byte rotlMod<byte>(byte x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y)<a name="l00586"></a>00586 {<a name="l00587"></a>00587 <span class="keywordflow">return</span> _rotl8(x, y);<a name="l00588"></a>00588 }<a name="l00589"></a>00589 <a name="l00590"></a>00590 <span class="keyword">template</span><> <span class="keyword">inline</span> byte rotrMod<byte>(byte x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y)<a name="l00591"></a>00591 {<a name="l00592"></a>00592 <span class="keywordflow">return</span> _rotr8(x, y);<a name="l00593"></a>00593 }<a name="l00594"></a>00594 <a name="l00595"></a>00595 <span class="preprocessor">#endif // #if _MSC_VER >= 1400</span><a name="l00596"></a>00596 <span class="preprocessor"></span><a name="l00597"></a>00597 <span class="preprocessor">#endif // #ifdef _MSC_VER</span><a name="l00598"></a>00598 <span class="preprocessor"></span><a name="l00599"></a>00599 <span class="preprocessor">#if (defined(__MWERKS__) && TARGET_CPU_PPC)</span><a name="l00600"></a>00600 <span class="preprocessor"></span><a name="l00601"></a>00601 <span class="keyword">template</span><> <span class="keyword">inline</span> word32 rotlFixed<word32>(word32 x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y)<a name="l00602"></a>00602 {<a name="l00603"></a>00603 assert(y < 32);<a name="l00604"></a>00604 <span class="keywordflow">return</span> y ? __rlwinm(x,y,0,31) : x;<a name="l00605"></a>00605 }<a name="l00606"></a>00606 <a name="l00607"></a>00607 <span class="keyword">template</span><> <span class="keyword">inline</span> word32 rotrFixed<word32>(word32 x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y)<a name="l00608"></a>00608 {<a name="l00609"></a>00609 assert(y < 32);<a name="l00610"></a>00610 <span class="keywordflow">return</span> y ? __rlwinm(x,32-y,0,31) : x;<a name="l00611"></a>00611 }<a name="l00612"></a>00612 <a name="l00613"></a>00613 <span class="keyword">template</span><> <span class="keyword">inline</span> word32 rotlVariable<word32>(word32 x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y)<a name="l00614"></a>00614 {<a name="l00615"></a>00615 assert(y < 32);<a name="l00616"></a>00616 <span class="keywordflow">return</span> (__rlwnm(x,y,0,31));<a name="l00617"></a>00617 }<a name="l00618"></a>00618 <a name="l00619"></a>00619 <span class="keyword">template</span><> <span class="keyword">inline</span> word32 rotrVariable<word32>(word32 x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y)<a name="l00620"></a>00620 {<a name="l00621"></a>00621 assert(y < 32);<a name="l00622"></a>00622 <span class="keywordflow">return</span> (__rlwnm(x,32-y,0,31));<a name="l00623"></a>00623 }<a name="l00624"></a>00624 <a name="l00625"></a>00625 <span class="keyword">template</span><> <span class="keyword">inline</span> word32 rotlMod<word32>(word32 x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y)<a name="l00626"></a>00626 {<a name="l00627"></a>00627 <span class="keywordflow">return</span> (__rlwnm(x,y,0,31));<a name="l00628"></a>00628 }<a name="l00629"></a>00629 <a name="l00630"></a>00630 <span class="keyword">template</span><> <span class="keyword">inline</span> word32 rotrMod<word32>(word32 x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y)<a name="l00631"></a>00631 {<a name="l00632"></a>00632 <span class="keywordflow">return</span> (__rlwnm(x,32-y,0,31));<a name="l00633"></a>00633 }<a name="l00634"></a>00634 <a name="l00635"></a>00635 <span class="preprocessor">#endif // #if (defined(__MWERKS__) && TARGET_CPU_PPC)</span><a name="l00636"></a>00636 <span class="preprocessor"></span><a name="l00637"></a>00637 <span class="comment">// ************** endian reversal ***************</span><a name="l00638"></a>00638 <a name="l00639"></a>00639 <span class="keyword">template</span> <<span class="keyword">class</span> T><a name="l00640"></a>00640 <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetByte(<a class="code" href="cryptlib_8h.html#aeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a> order, T value, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index)<a name="l00641"></a>00641 {<a name="l00642"></a>00642 <span class="keywordflow">if</span> (order == <a class="code" href="cryptlib_8h.html#aeb92d42f5a6e27b8ba19f18d69d142bccd5b3585bd07d6bdae383aa8271b9d2">LITTLE_ENDIAN_ORDER</a>)<a name="l00643"></a>00643 <span class="keywordflow">return</span> GETBYTE(value, index);<a name="l00644"></a>00644 <span class="keywordflow">else</span><a name="l00645"></a>00645 <span class="keywordflow">return</span> GETBYTE(value, <span class="keyword">sizeof</span>(T)-index-1);<a name="l00646"></a>00646 }<a name="l00647"></a>00647 <a name="l00648"></a>00648 <span class="keyword">inline</span> byte ByteReverse(byte value)<a name="l00649"></a>00649 {<a name="l00650"></a>00650 <span class="keywordflow">return</span> value;<a name="l00651"></a>00651 }<a name="l00652"></a>00652 <a name="l00653"></a>00653 <span class="keyword">inline</span> word16 ByteReverse(word16 value)<a name="l00654"></a>00654 {<a name="l00655"></a>00655 <span class="preprocessor">#ifdef CRYPTOPP_BYTESWAP_AVAILABLE</span><a name="l00656"></a>00656 <span class="preprocessor"></span> <span class="keywordflow">return</span> bswap_16(value);<a name="l00657"></a>00657 <span class="preprocessor">#elif defined(_MSC_VER) && _MSC_VER >= 1300</span><a name="l00658"></a>00658 <span class="preprocessor"></span> <span class="keywordflow">return</span> _byteswap_ushort(value);<a name="l00659"></a>00659 <span class="preprocessor">#else</span><a name="l00660"></a>00660 <span class="preprocessor"></span> <span class="keywordflow">return</span> rotlFixed(value, 8U);<a name="l00661"></a>00661 <span class="preprocessor">#endif</span><a name="l00662"></a>00662 <span class="preprocessor"></span>}<a name="l00663"></a>00663 <a name="l00664"></a>00664 <span class="keyword">inline</span> word32 ByteReverse(word32 value)<a name="l00665"></a>00665 {<a name="l00666"></a>00666 <span class="preprocessor">#if defined(__GNUC__) && defined(CRYPTOPP_X86_ASM_AVAILABLE)</span><a name="l00667"></a>00667 <span class="preprocessor"></span> __asm__ (<span class="stringliteral">"bswap %0"</span> : <span class="stringliteral">"=r"</span> (value) : <span class="stringliteral">"0"</span> (value));<a name="l00668"></a>00668 <span class="keywordflow">return</span> value;<a name="l00669"></a>00669 <span class="preprocessor">#elif defined(CRYPTOPP_BYTESWAP_AVAILABLE)</span><a name="l00670"></a>00670 <span class="preprocessor"></span> <span class="keywordflow">return</span> bswap_32(value);<a name="l00671"></a>00671 <span class="preprocessor">#elif defined(__MWERKS__) && TARGET_CPU_PPC</span><a name="l00672"></a>00672 <span class="preprocessor"></span> <span class="keywordflow">return</span> (word32)__lwbrx(&value,0);<a name="l00673"></a>00673 <span class="preprocessor">#elif defined(_MSC_VER) && _MSC_VER >= 1300</span><a name="l00674"></a>00674 <span class="preprocessor"></span> <span class="keywordflow">return</span> _byteswap_ulong(value);<a name="l00675"></a>00675 <span class="preprocessor">#elif CRYPTOPP_FAST_ROTATE(32)</span><a name="l00676"></a>00676 <span class="preprocessor"></span> <span class="comment">// 5 instructions with rotate instruction, 9 without</span><a name="l00677"></a>00677 <span class="keywordflow">return</span> (rotrFixed(value, 8U) & 0xff00ff00) | (rotlFixed(value, 8U) & 0x00ff00ff);<a name="l00678"></a>00678 <span class="preprocessor">#else</span><a name="l00679"></a>00679 <span class="preprocessor"></span> <span class="comment">// 6 instructions with rotate instruction, 8 without</span><a name="l00680"></a>00680 value = ((value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8);<a name="l00681"></a>00681 <span class="keywordflow">return</span> rotlFixed(value, 16U);<a name="l00682"></a>00682 <span class="preprocessor">#endif</span><a name="l00683"></a>00683 <span class="preprocessor"></span>}<a name="l00684"></a>00684 <a name="l00685"></a>00685 <span class="preprocessor">#ifdef WORD64_AVAILABLE</span><a name="l00686"></a>00686 <span class="preprocessor"></span><span class="keyword">inline</span> word64 ByteReverse(word64 value)<a name="l00687"></a>00687 {<a name="l00688"></a>00688 <span class="preprocessor">#if defined(__GNUC__) && defined(CRYPTOPP_X86_ASM_AVAILABLE) && defined(__x86_64__)</span><a name="l00689"></a>00689 <span class="preprocessor"></span> __asm__ (<span class="stringliteral">"bswap %0"</span> : <span class="stringliteral">"=r"</span> (value) : <span class="stringliteral">"0"</span> (value));<a name="l00690"></a>00690 <span class="keywordflow">return</span> value;<a name="l00691"></a>00691 <span class="preprocessor">#elif defined(CRYPTOPP_BYTESWAP_AVAILABLE)</span><a name="l00692"></a>00692 <span class="preprocessor"></span> <span class="keywordflow">return</span> bswap_64(value);<a name="l00693"></a>00693 <span class="preprocessor">#elif defined(_MSC_VER) && _MSC_VER >= 1300</span><a name="l00694"></a>00694 <span class="preprocessor"></span> <span clas
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -