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

📄 serpent.cpp

📁 含有多种公开密钥算法、多种块加密、多种数据流加密、多种HASH函数、多种CheckSum校验、多种MAC校验等几十种加密算法的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/************************************************** Serpent Source File                            ** (C) 1999-2002 The Botan Project                **************************************************/#include <botan/serpent.h>namespace Botan {/************************************************** Serpent Encryption                             **************************************************/void Serpent::enc(const byte in[], byte out[]) const   {   u32bit B0 = make_u32bit(in[ 3], in[ 2], in[ 1], in[ 0]),          B1 = make_u32bit(in[ 7], in[ 6], in[ 5], in[ 4]),          B2 = make_u32bit(in[11], in[10], in[ 9], in[ 8]),          B3 = make_u32bit(in[15], in[14], in[13], in[12]);   key_xor( 0,B0,B1,B2,B3); SBoxE1(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor( 1,B0,B1,B2,B3); SBoxE2(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor( 2,B0,B1,B2,B3); SBoxE3(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor( 3,B0,B1,B2,B3); SBoxE4(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor( 4,B0,B1,B2,B3); SBoxE5(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor( 5,B0,B1,B2,B3); SBoxE6(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor( 6,B0,B1,B2,B3); SBoxE7(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor( 7,B0,B1,B2,B3); SBoxE8(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor( 8,B0,B1,B2,B3); SBoxE1(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor( 9,B0,B1,B2,B3); SBoxE2(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(10,B0,B1,B2,B3); SBoxE3(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(11,B0,B1,B2,B3); SBoxE4(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(12,B0,B1,B2,B3); SBoxE5(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(13,B0,B1,B2,B3); SBoxE6(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(14,B0,B1,B2,B3); SBoxE7(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(15,B0,B1,B2,B3); SBoxE8(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(16,B0,B1,B2,B3); SBoxE1(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(17,B0,B1,B2,B3); SBoxE2(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(18,B0,B1,B2,B3); SBoxE3(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(19,B0,B1,B2,B3); SBoxE4(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(20,B0,B1,B2,B3); SBoxE5(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(21,B0,B1,B2,B3); SBoxE6(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(22,B0,B1,B2,B3); SBoxE7(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(23,B0,B1,B2,B3); SBoxE8(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(24,B0,B1,B2,B3); SBoxE1(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(25,B0,B1,B2,B3); SBoxE2(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(26,B0,B1,B2,B3); SBoxE3(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(27,B0,B1,B2,B3); SBoxE4(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(28,B0,B1,B2,B3); SBoxE5(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(29,B0,B1,B2,B3); SBoxE6(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(30,B0,B1,B2,B3); SBoxE7(B0,B1,B2,B3); transform(B0,B1,B2,B3);   key_xor(31,B0,B1,B2,B3); SBoxE8(B0,B1,B2,B3); key_xor(32,B0,B1,B2,B3);   out[ 0] = get_byte(3, B0); out[ 1] = get_byte(2, B0);   out[ 2] = get_byte(1, B0); out[ 3] = get_byte(0, B0);   out[ 4] = get_byte(3, B1); out[ 5] = get_byte(2, B1);   out[ 6] = get_byte(1, B1); out[ 7] = get_byte(0, B1);   out[ 8] = get_byte(3, B2); out[ 9] = get_byte(2, B2);   out[10] = get_byte(1, B2); out[11] = get_byte(0, B2);   out[12] = get_byte(3, B3); out[13] = get_byte(2, B3);   out[14] = get_byte(1, B3); out[15] = get_byte(0, B3);   }/************************************************** Serpent Decryption                             **************************************************/void Serpent::dec(const byte in[], byte out[]) const   {   u32bit B0 = make_u32bit(in[ 3], in[ 2], in[ 1], in[ 0]),          B1 = make_u32bit(in[ 7], in[ 6], in[ 5], in[ 4]),          B2 = make_u32bit(in[11], in[10], in[ 9], in[ 8]),          B3 = make_u32bit(in[15], in[14], in[13], in[12]);   key_xor(32,B0,B1,B2,B3);  SBoxD8(B0,B1,B2,B3); key_xor(31,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD7(B0,B1,B2,B3); key_xor(30,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD6(B0,B1,B2,B3); key_xor(29,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD5(B0,B1,B2,B3); key_xor(28,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD4(B0,B1,B2,B3); key_xor(27,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD3(B0,B1,B2,B3); key_xor(26,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD2(B0,B1,B2,B3); key_xor(25,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD1(B0,B1,B2,B3); key_xor(24,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD8(B0,B1,B2,B3); key_xor(23,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD7(B0,B1,B2,B3); key_xor(22,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD6(B0,B1,B2,B3); key_xor(21,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD5(B0,B1,B2,B3); key_xor(20,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD4(B0,B1,B2,B3); key_xor(19,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD3(B0,B1,B2,B3); key_xor(18,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD2(B0,B1,B2,B3); key_xor(17,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD1(B0,B1,B2,B3); key_xor(16,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD8(B0,B1,B2,B3); key_xor(15,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD7(B0,B1,B2,B3); key_xor(14,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD6(B0,B1,B2,B3); key_xor(13,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD5(B0,B1,B2,B3); key_xor(12,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD4(B0,B1,B2,B3); key_xor(11,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD3(B0,B1,B2,B3); key_xor(10,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD2(B0,B1,B2,B3); key_xor( 9,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD1(B0,B1,B2,B3); key_xor( 8,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD8(B0,B1,B2,B3); key_xor( 7,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD7(B0,B1,B2,B3); key_xor( 6,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD6(B0,B1,B2,B3); key_xor( 5,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD5(B0,B1,B2,B3); key_xor( 4,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD4(B0,B1,B2,B3); key_xor( 3,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD3(B0,B1,B2,B3); key_xor( 2,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD2(B0,B1,B2,B3); key_xor( 1,B0,B1,B2,B3);   i_transform(B0,B1,B2,B3); SBoxD1(B0,B1,B2,B3); key_xor( 0,B0,B1,B2,B3);   out[ 0] = get_byte(3, B0); out[ 1] = get_byte(2, B0);   out[ 2] = get_byte(1, B0); out[ 3] = get_byte(0, B0);   out[ 4] = get_byte(3, B1); out[ 5] = get_byte(2, B1);   out[ 6] = get_byte(1, B1); out[ 7] = get_byte(0, B1);   out[ 8] = get_byte(3, B2); out[ 9] = get_byte(2, B2);   out[10] = get_byte(1, B2); out[11] = get_byte(0, B2);   out[12] = get_byte(3, B3); out[13] = get_byte(2, B3);   out[14] = get_byte(1, B3); out[15] = get_byte(0, B3);   }/************************************************** Serpent Encryption S-Box 1                     **************************************************/void Serpent::SBoxE1(u32bit& B0, u32bit& B1, u32bit& B2, u32bit& B3)   {   u32bit T0 = B0, T1 = B1, T2 = B2, T3 = B3, T4;   T3 ^= T0; T4  = T1; T1 &= T3; T4 ^= T2; T1 ^= T0; T0 |= T3; T0 ^= T4;   T4 ^= T3; T3 ^= T2; T2 |= T1; T2 ^= T4; T4 = ~T4; T4 |= T1; T1 ^= T3;   T1 ^= T4; T3 |= T0; T1 ^= T3; T4 ^= T3;   B0 = T1; B1 = T4; B2 = T2; B3 = T0;   }/************************************************** Serpent Encryption S-Box 2                     **************************************************/void Serpent::SBoxE2(u32bit& B0, u32bit& B1, u32bit& B2, u32bit& B3)   {   u32bit T0 = B0, T1 = B1, T2 = B2, T3 = B3, T4;   T0 = ~T0; T2 = ~T2; T4  = T0; T0 &= T1; T2 ^= T0; T0 |= T3; T3 ^= T2;   T1 ^= T0; T0 ^= T4; T4 |= T1; T1 ^= T3; T2 |= T0; T2 &= T4; T0 ^= T1;   T1 &= T2; T1 ^= T0; T0 &= T2; T0 ^= T4;   B0 = T2; B1 = T0; B2 = T3; B3 = T1;   }/************************************************** Serpent Encryption S-Box 3                     **************************************************/void Serpent::SBoxE3(u32bit& B0, u32bit& B1, u32bit& B2, u32bit& B3)   {   u32bit T0 = B0, T1 = B1, T2 = B2, T3 = B3, T4;   T4  = T0; T0 &= T2; T0 ^= T3; T2 ^= T1; T2 ^= T0; T3 |= T4; T3 ^= T1;   T4 ^= T2; T1  = T3; T3 |= T4; T3 ^= T0; T0 &= T1; T4 ^= T0; T1 ^= T3;   T1 ^= T4; T4 = ~T4;   B0 = T2; B1 = T3; B2 = T1; B3 = T4;   }/************************************************** Serpent Encryption S-Box 4                     **************************************************/void Serpent::SBoxE4(u32bit& B0, u32bit& B1, u32bit& B2, u32bit& B3)   {   u32bit T0 = B0, T1 = B1, T2 = B2, T3 = B3, T4;   T4  = T0; T0 |= T3; T3 ^= T1; T1 &= T4; T4 ^= T2; T2 ^= T3; T3 &= T0;   T4 |= T1; T3 ^= T4; T0 ^= T1; T4 &= T0; T1 ^= T3; T4 ^= T2; T1 |= T0;   T1 ^= T2; T0 ^= T3; T2  = T1; T1 |= T3; T1 ^= T0;   B0 = T1; B1 = T2; B2 = T3; B3 = T4;   }/************************************************** Serpent Encryption S-Box 5                     **************************************************/void Serpent::SBoxE5(u32bit& B0, u32bit& B1, u32bit& B2, u32bit& B3)   {   u32bit T0 = B0, T1 = B1, T2 = B2, T3 = B3, T4;   T1 ^= T3; T3 = ~T3; T2 ^= T3; T3 ^= T0; T4  = T1; T1 &= T3; T1 ^= T2;   T4 ^= T3; T0 ^= T4; T2 &= T4; T2 ^= T0; T0 &= T1; T3 ^= T0; T4 |= T1;   T4 ^= T0; T0 |= T3; T0 ^= T2; T2 &= T3; T0 = ~T0; T4 ^= T2;   B0 = T1; B1 = T4; B2 = T0; B3 = T3;   }/************************************************** Serpent Encryption S-Box 6                     **************************************************/void Serpent::SBoxE6(u32bit& B0, u32bit& B1, u32bit& B2, u32bit& B3)   {   u32bit T0 = B0, T1 = B1, T2 = B2, T3 = B3, T4;   T0 ^= T1; T1 ^= T3; T3 = ~T3; T4  = T1; T1 &= T0; T2 ^= T3; T1 ^= T2;   T2 |= T4; T4 ^= T3; T3 &= T1; T3 ^= T0; T4 ^= T1; T4 ^= T2; T2 ^= T0;   T0 &= T3; T2 = ~T2; T0 ^= T4; T4 |= T3; T2 ^= T4;   B0 = T1; B1 = T3; B2 = T0; B3 = T2;   }/************************************************** Serpent Encryption S-Box 7                     **************************************************/

⌨️ 快捷键说明

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