📄 serpent.c
字号:
// Except as noted below copyright in this code is held by Dr B.R. Gladman
// but free direct or derivative use is permitted subject to acknowledgement
// of its origin and subject to any constraints placed on the use of the
// algorithm by its designers (if such constraints may exist, this will be
// indicated below).
//
// Dr. B. R. Gladman ( ). 25th January 2000.
//
// This is an implementation of Serpent, an encryption algorithm designed
// by Anderson, Biham and Knudsen and submitted as a candidate for the
// Advanced Encryption Standard programme of the US National Institute of
// Standards and Technology.
//
// The designers of Serpent have not placed any constraints on the use of
// this algorithm.
//
// The S box expressions used below are Copyright (C) 2000 Dag Arne Osvik.
/* Support for multithreaded operation added by TrueCrypt Foundation */
#include "serpent.h"
//static u4byte serpent_l_key[140];
#define sb0(r0,r1,r2,r3,r4) \
__asm { \
__asm xor r3,r0 \
__asm mov r4,r1 \
__asm and r1,r3 \
__asm xor r4,r2 \
__asm xor r1,r0 \
__asm or r0,r3 \
__asm xor r0,r4 \
__asm xor r4,r3 \
__asm xor r3,r2 \
__asm or r2,r1 \
__asm xor r2,r4 \
__asm not r4 \
__asm or r4,r1 \
__asm xor r1,r3 \
__asm xor r1,r4 \
__asm or r3,r0 \
__asm xor r1,r3 \
__asm xor r4,r3 \
}
#define ib0(r0,r1,r2,r3,r4) \
__asm { \
__asm not r2 \
__asm mov r4,r1 \
__asm or r1,r0 \
__asm not r4 \
__asm xor r1,r2 \
__asm or r2,r4 \
__asm xor r1,r3 \
__asm xor r0,r4 \
__asm xor r2,r0 \
__asm and r0,r3 \
__asm xor r4,r0 \
__asm or r0,r1 \
__asm xor r0,r2 \
__asm xor r3,r4 \
__asm xor r2,r1 \
__asm xor r3,r0 \
__asm xor r3,r1 \
__asm and r2,r3 \
__asm xor r4,r2 \
}
#define sb1(r0,r1,r2,r3,r4) \
__asm { \
__asm not r0 \
__asm not r2 \
__asm mov r4,r0 \
__asm and r0,r1 \
__asm xor r2,r0 \
__asm or r0,r3 \
__asm xor r3,r2 \
__asm xor r1,r0 \
__asm xor r0,r4 \
__asm or r4,r1 \
__asm xor r1,r3 \
__asm or r2,r0 \
__asm and r2,r4 \
__asm xor r0,r1 \
__asm and r1,r2 \
__asm xor r1,r0 \
__asm and r0,r2 \
__asm xor r0,r4 \
}
#define ib1(r0,r1,r2,r3,r4) \
__asm { \
__asm mov r4,r1 \
__asm xor r1,r3 \
__asm and r3,r1 \
__asm xor r4,r2 \
__asm xor r3,r0 \
__asm or r0,r1 \
__asm xor r2,r3 \
__asm xor r0,r4 \
__asm or r0,r2 \
__asm xor r1,r3 \
__asm xor r0,r1 \
__asm or r1,r3 \
__asm xor r1,r0 \
__asm not r4 \
__asm xor r4,r1 \
__asm or r1,r0 \
__asm xor r1,r0 \
__asm or r1,r4 \
__asm xor r3,r1 \
}
#define sb2(r0,r1,r2,r3,r4) \
__asm { \
__asm mov r4,r0 \
__asm and r0,r2 \
__asm xor r0,r3 \
__asm xor r2,r1 \
__asm xor r2,r0 \
__asm or r3,r4 \
__asm xor r3,r1 \
__asm xor r4,r2 \
__asm mov r1,r3 \
__asm or r3,r4 \
__asm xor r3,r0 \
__asm and r0,r1 \
__asm xor r4,r0 \
__asm xor r1,r3 \
__asm xor r1,r4 \
__asm not r4 \
}
#define ib2(r0,r1,r2,r3,r4) \
__asm { \
__asm xor r2,r3 \
__asm xor r3,r0 \
__asm mov r4,r3 \
__asm and r3,r2 \
__asm xor r3,r1 \
__asm or r1,r2 \
__asm xor r1,r4 \
__asm and r4,r3 \
__asm xor r2,r3 \
__asm and r4,r0 \
__asm xor r4,r2 \
__asm and r2,r1 \
__asm or r2,r0 \
__asm not r3 \
__asm xor r2,r3 \
__asm xor r0,r3 \
__asm and r0,r1 \
__asm xor r3,r4 \
__asm xor r3,r0 \
}
#define sb3(r0,r1,r2,r3,r4) \
__asm { \
__asm mov r4,r0 \
__asm or r0,r3 \
__asm xor r3,r1 \
__asm and r1,r4 \
__asm xor r4,r2 \
__asm xor r2,r3 \
__asm and r3,r0 \
__asm or r4,r1 \
__asm xor r3,r4 \
__asm xor r0,r1 \
__asm and r4,r0 \
__asm xor r1,r3 \
__asm xor r4,r2 \
__asm or r1,r0 \
__asm xor r1,r2 \
__asm xor r0,r3 \
__asm mov r2,r1 \
__asm or r1,r3 \
__asm xor r1,r0 \
}
#define ib3(r0,r1,r2,r3,r4) \
__asm { \
__asm mov r4,r2 \
__asm xor r2,r1 \
__asm and r1,r2 \
__asm xor r1,r0 \
__asm and r0,r4 \
__asm xor r4,r3 \
__asm or r3,r1 \
__asm xor r3,r2 \
__asm xor r0,r4 \
__asm xor r2,r0 \
__asm or r0,r3 \
__asm xor r0,r1 \
__asm xor r4,r2 \
__asm and r2,r3 \
__asm or r1,r3 \
__asm xor r1,r2 \
__asm xor r4,r0 \
__asm xor r2,r4 \
}
#define sb4(r0,r1,r2,r3,r4) \
__asm { \
__asm xor r1,r3 \
__asm not r3 \
__asm xor r2,r3 \
__asm xor r3,r0 \
__asm mov r4,r1 \
__asm and r1,r3 \
__asm xor r1,r2 \
__asm xor r4,r3 \
__asm xor r0,r4 \
__asm and r2,r4 \
__asm xor r2,r0 \
__asm and r0,r1 \
__asm xor r3,r0 \
__asm or r4,r1 \
__asm xor r4,r0 \
__asm or r0,r3 \
__asm xor r0,r2 \
__asm and r2,r3 \
__asm not r0 \
__asm xor r4,r2 \
}
#define ib4(r0,r1,r2,r3,r4) \
__asm { \
__asm mov r4,r2 \
__asm and r2,r3 \
__asm xor r2,r1 \
__asm or r1,r3 \
__asm and r1,r0 \
__asm xor r4,r2 \
__asm xor r4,r1 \
__asm and r1,r2 \
__asm not r0 \
__asm xor r3,r4 \
__asm xor r1,r3 \
__asm and r3,r0 \
__asm xor r3,r2 \
__asm xor r0,r1 \
__asm and r2,r0 \
__asm xor r3,r0 \
__asm xor r2,r4 \
__asm or r2,r3 \
__asm xor r3,r0 \
__asm xor r2,r1 \
}
#define sb5(r0,r1,r2,r3,r4) \
__asm { \
__asm xor r0,r1 \
__asm xor r1,r3 \
__asm not r3 \
__asm mov r4,r1 \
__asm and r1,r0 \
__asm xor r2,r3 \
__asm xor r1,r2 \
__asm or r2,r4 \
__asm xor r4,r3 \
__asm and r3,r1 \
__asm xor r3,r0 \
__asm xor r4,r1 \
__asm xor r4,r2 \
__asm xor r2,r0 \
__asm and r0,r3 \
__asm not r2 \
__asm xor r0,r4 \
__asm or r4,r3 \
__asm xor r2,r4 \
}
#define ib5(r0,r1,r2,r3,r4) \
__asm { \
__asm not r1 \
__asm mov r4,r3 \
__asm xor r2,r1 \
__asm or r3,r0 \
__asm xor r3,r2 \
__asm or r2,r1 \
__asm and r2,r0 \
__asm xor r4,r3 \
__asm xor r2,r4 \
__asm or r4,r0 \
__asm xor r4,r1 \
__asm and r1,r2 \
__asm xor r1,r3 \
__asm xor r4,r2 \
__asm and r3,r4 \
__asm xor r4,r1 \
__asm xor r3,r0 \
__asm xor r3,r4 \
__asm not r4 \
}
#define sb6(r0,r1,r2,r3,r4) \
__asm { \
__asm not r2 \
__asm mov r4,r3 \
__asm and r3,r0 \
__asm xor r0,r4 \
__asm xor r3,r2 \
__asm or r2,r4 \
__asm xor r1,r3 \
__asm xor r2,r0 \
__asm or r0,r1 \
__asm xor r2,r1 \
__asm xor r4,r0 \
__asm or r0,r3 \
__asm xor r0,r2 \
__asm xor r4,r3 \
__asm xor r4,r0 \
__asm not r3 \
__asm and r2,r4 \
__asm xor r2,r3 \
}
#define ib6(r0,r1,r2,r3,r4) \
__asm { \
__asm xor r0,r2 \
__asm mov r4,r2 \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -