?? cipher-3des.c
字號:
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 + -