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

📄 cipher-3des.c

📁 海思KEY驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
    do {        w = (256 | *key++) << 2;        do {            --n;            b1[n] = 8 & w;            w >>= 1;            b0[n] = 4 & w;        } while ( w >= 16 );    } while ( n );    /* put the bits in the correct places */    n = 16;    key = rotors;    do {        w   = (b1[key[ 0   ]] | b0[key[ 1   ]]) << 4;        w  |= (b1[key[ 2   ]] | b0[key[ 3   ]]) << 2;        w  |=  b1[key[ 4   ]] | b0[key[ 5   ]];        w <<= 8;        w  |= (b1[key[ 6   ]] | b0[key[ 7   ]]) << 4;        w  |= (b1[key[ 8   ]] | b0[key[ 9   ]]) << 2;        w  |=  b1[key[10   ]] | b0[key[11   ]];        w <<= 8;        w  |= (b1[key[12   ]] | b0[key[13   ]]) << 4;        w  |= (b1[key[14   ]] | b0[key[15   ]]) << 2;        w  |=  b1[key[16   ]] | b0[key[17   ]];        w <<= 8;        w  |= (b1[key[18   ]] | b0[key[19   ]]) << 4;        w  |= (b1[key[20   ]] | b0[key[21   ]]) << 2;        w  |=  b1[key[22   ]] | b0[key[23   ]];        method[0] = w;        w   = (b1[key[ 0+24]] | b0[key[ 1+24]]) << 4;        w  |= (b1[key[ 2+24]] | b0[key[ 3+24]]) << 2;        w  |=  b1[key[ 4+24]] | b0[key[ 5+24]];        w <<= 8;        w  |= (b1[key[ 6+24]] | b0[key[ 7+24]]) << 4;        w  |= (b1[key[ 8+24]] | b0[key[ 9+24]]) << 2;        w  |=  b1[key[10+24]] | b0[key[11+24]];        w <<= 8;        w  |= (b1[key[12+24]] | b0[key[13+24]]) << 4;        w  |= (b1[key[14+24]] | b0[key[15+24]]) << 2;        w  |=  b1[key[16+24]] | b0[key[17+24]];        w <<= 8;        w  |= (b1[key[18+24]] | b0[key[19+24]]) << 4;        w  |= (b1[key[20+24]] | b0[key[21+24]]) << 2;        w  |=  b1[key[22+24]] | b0[key[23+24]];        ROR(w, 4, 28);      /* could be eliminated */        method[1] = w;        key += 48;        method  += 2;    } while ( --n );    return 0;}static void DesSmallFipsEncrypt (DesData d, DesKeys r, DesData s){    register u32 x, y, z;    x  = s [7];    x <<= 8;    x |= s [6];    x <<= 8;    x |= s [5];    x <<= 8;    x |= s [4];    y  = s [3];    y <<= 8;    y |= s [2];    y <<= 8;    y |= s [1];    y <<= 8;    y |= s [0];    z  = ((x >> 004) ^ y) & 0X0F0F0F0FL;    x ^= z << 004;    y ^= z;    z  = ((y >> 020) ^ x) & 0X0000FFFFL;    y ^= z << 020;    x ^= z;    z  = ((x >> 002) ^ y) & 0X33333333L;    x ^= z << 002;    y ^= z;    z  = ((y >> 010) ^ x) & 0X00FF00FFL;    y ^= z << 010;    x ^= z;    x  = x >> 1 | x << 31;    z  = (x ^ y) & 0X55555555L;    y ^= z;    x ^= z;    y  = y >> 1 | y << 31;    z  = r [0];    z ^= y;    x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [1];    z ^= y;    z  = z << 4 | z >> 28;    x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [2];    z ^= x;    y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [3];    z ^= x;    z  = z << 4 | z >> 28;    y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [4];    z ^= y;    x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [5];    z ^= y;    z  = z << 4 | z >> 28;    x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [6];    z ^= x;    y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [7];    z ^= x;    z  = z << 4 | z >> 28;    y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [8];    z ^= y;    x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [9];    z ^= y;    z  = z << 4 | z >> 28;    x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [10];    z ^= x;    y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [11];    z ^= x;    z  = z << 4 | z >> 28;    y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [12];    z ^= y;    x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [13];    z ^= y;    z  = z << 4 | z >> 28;    x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [14];    z ^= x;    y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [15];    z ^= x;    z  = z << 4 | z >> 28;    y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [16];    z ^= y;    x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [17];    z ^= y;    z  = z << 4 | z >> 28;    x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [18];    z ^= x;    y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [19];    z ^= x;    z  = z << 4 | z >> 28;    y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [20];    z ^= y;    x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [21];    z ^= y;    z  = z << 4 | z >> 28;    x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [22];    z ^= x;    y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [23];    z ^= x;    z  = z << 4 | z >> 28;    y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [24];    z ^= y;    x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [25];    z ^= y;    z  = z << 4 | z >> 28;    x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [26];    z ^= x;    y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [27];    z ^= x;    z  = z << 4 | z >> 28;    y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [28];    z ^= y;    x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [29];    z ^= y;    z  = z << 4 | z >> 28;    x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    z  = r [30];    z ^= x;    y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z));    z  = r [31];    z ^= x;    z  = z << 4 | z >> 28;    y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z));    z >>= 8;    y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z));    x  = x << 1 | x >> 31;    z  = (x ^ y) & 0X55555555L;    y ^= z;    x ^= z;    y  = y << 1 | y >> 31;    z  = ((x >> 010) ^ y) & 0X00FF00FFL;    x ^= z << 010;    y ^= z;    z  = ((y >> 002) ^ x) & 0X33333333L;    y ^= z << 002;    x ^= z;    z  = ((x >> 020) ^ y) & 0X0000FFFFL;    x ^= z << 020;    y ^= z;    z  = ((y >> 004) ^ x) & 0X0F0F0F0FL;    y ^= z << 004;    x ^= z;    d [0] = x;    x >>= 8;    d [1] = x;    x >>= 8;    d [2] = x;    x >>= 8;    d [3] = x;    d [4] = y;    y >>= 8;    d [5] = y;    y >>= 8;    d [6] = y;    y >>= 8;    d [7] = y;    return;}

⌨️ 快捷键说明

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