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

📄 cipher-3des.c

📁 海思KEY驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
static void DesSmallFipsDecrypt (u8 *d, u32 *r, u8 *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 [31];    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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 ^= 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 [0];    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));    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;}static int des_ede3_encrypt(struct cipher_context *cx,			    const u8 *in, u8 *out, int size, int atomic){	u8 input_buffer[8], trans_buffer1[8];	u8 trans_buffer2[8], output_buffer[8];	u32 *key_sched;	key_sched = cx->keyinfo;	for (; size >= 8; size -= 8) {		memcpy(&input_buffer, in, 8);		in += 8;		DesSmallFipsEncrypt(trans_buffer1,key_sched,input_buffer);		DesSmallFipsDecrypt(trans_buffer2,key_sched+32,trans_buffer1);		DesSmallFipsEncrypt(output_buffer,key_sched+64,trans_buffer2);		memcpy(out, &output_buffer, 8);		out += 8;	}	return 0;}static int des_ede3_decrypt(struct cipher_context *cx,			    const u8 *in, u8 *out, int size, int atomic){  	u8 input_buffer[8], trans_buffer1[8];	u8 trans_buffer2[8], output_buffer[8];	u32 *key_sched;	key_sched = cx->keyinfo;	for (; size >= 8; size -= 8) {		memcpy(&input_buffer, in, 8);		in += 8;		DesSmallFipsDecrypt(trans_buffer1,key_sched+64,input_buffer);		DesSmallFipsEncrypt(trans_buffer2,key_sched+32,trans_buffer1);		DesSmallFipsDecrypt(output_buffer,key_sched,trans_buffer2);				memcpy(out, &output_buffer, 8);		out += 8;	}	return 0;}#define CIPHER_ID                des_ede3#define CIPHER_STR               "3des"#define CIPHER_BLOCKSIZE         64#define CIPHER_KEY_SIZE_MASK     CIPHER_KEYSIZE_64 | CIPHER_KEYSIZE_128 \	| CIPHER_KEYSIZE_192#define CIPHER_KEY_SCHEDULE_SIZE (3*32*sizeof(u32))#include "gen-cipher.h"EXPORT_NO_SYMBOLS;/* eof */

⌨️ 快捷键说明

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