?? des.h
字號:
#ifndef __DES_H__
#define __DES_H__
#include "rqcamd.h"
/* --------------------- DES includes ------------------------------ */
#define i_DES_UNROLL 1
#define i_ITERATIONS 16
#define i_DES_LONG unsigned long
#define i_DES_ENCRYPT 1
#define i_DES_DECRYPT 0
#define i_ROTATE(a, n) ( ( (a) >> (n) ) + ( (a) << ( 32 - (n) ) ) )
#define i_DES_CAST(x) ((i_DES_cblock *)(x))
#define i_DES_check_key 0
#define i_DES_KEY_SZ (sizeof(i_DES_cblock))
#define c2l(c, l) \
(l =((i_DES_LONG)(*((c)++))) , \
l|=((i_DES_LONG)(*((c)++)))<< 8L, \
l|=((i_DES_LONG)(*((c)++)))<<16L, \
l|=((i_DES_LONG)(*((c)++)))<<24L)
#define c2ln(c,l1,l2,n) { \
c+=n; \
l1=l2=0; \
switch (n) \
{ \
case 8: l2 =((i_DES_LONG)(*(--(c))))<<24L; \
case 7: l2|=((i_DES_LONG)(*(--(c))))<<16L; \
case 6: l2|=((i_DES_LONG)(*(--(c))))<< 8L; \
case 5: l2|=((i_DES_LONG)(*(--(c)))); \
case 4: l1 =((i_DES_LONG)(*(--(c))))<<24L; \
case 3: l1|=((i_DES_LONG)(*(--(c))))<<16L; \
case 2: l1|=((i_DES_LONG)(*(--(c))))<< 8L; \
case 1: l1|=((i_DES_LONG)(*(--(c)))); \
} \
}
#define l2c(l, c) \
(*((c)++)=(unsigned char)(((l) )&0xff), \
*((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
*((c)++)=(unsigned char)(((l)>>16L)&0xff), \
*((c)++)=(unsigned char)(((l)>>24L)&0xff))
#define l2cn(l1,l2,c,n) { \
c+=n; \
switch (n) \
{ \
case 8: *(--(c))=(unsigned char)(((l2)>>24L)&0xff); \
case 7: *(--(c))=(unsigned char)(((l2)>>16L)&0xff); \
case 6: *(--(c))=(unsigned char)(((l2)>> 8L)&0xff); \
case 5: *(--(c))=(unsigned char)(((l2) )&0xff); \
case 4: *(--(c))=(unsigned char)(((l1)>>24L)&0xff); \
case 3: *(--(c))=(unsigned char)(((l1)>>16L)&0xff); \
case 2: *(--(c))=(unsigned char)(((l1)>> 8L)&0xff); \
case 1: *(--(c))=(unsigned char)(((l1) )&0xff); \
} \
}
#define PERM_OP(a, b, t, n, m) ((t)=((((a)>>(n))^(b))&(m)), (b)^=(t), (a)^=((t)<<(n)))
#define HPERM_OP(a, t, n, m) ((t)=((((a)<<(16-(n)))^(a))&(m)), (a)=(a)^(t)^(t>>(16-(n))))
#define IP(l, r) \
{ \
register i_DES_LONG tt; \
PERM_OP(r, l, tt, 4,0x0f0f0f0fL); \
PERM_OP(l, r, tt, 16,0x0000ffffL); \
PERM_OP(r, l, tt, 2,0x33333333L); \
PERM_OP(l, r, tt, 8,0x00ff00ffL); \
PERM_OP(r, l, tt, 1,0x55555555L); \
}
#define FP(l, r) \
{ \
register i_DES_LONG tt; \
PERM_OP(l, r, tt, 1,0x55555555L); \
PERM_OP(r, l, tt, 8,0x00ff00ffL); \
PERM_OP(l, r, tt, 2,0x33333333L); \
PERM_OP(r, l, tt, 16,0x0000ffffL); \
PERM_OP(l, r, tt, 4,0x0f0f0f0fL); \
}
const i_DES_LONG i_DES_SPtrans[8][64] =
{
{
/* nibble 0 */
0x02080800L, 0x00080000L, 0x02000002L, 0x02080802L,
0x02000000L, 0x00080802L, 0x00080002L, 0x02000002L,
0x00080802L, 0x02080800L, 0x02080000L, 0x00000802L,
0x02000802L, 0x02000000L, 0x00000000L, 0x00080002L,
0x00080000L, 0x00000002L, 0x02000800L, 0x00080800L,
0x02080802L, 0x02080000L, 0x00000802L, 0x02000800L,
0x00000002L, 0x00000800L, 0x00080800L, 0x02080002L,
0x00000800L, 0x02000802L, 0x02080002L, 0x00000000L,
0x00000000L, 0x02080802L, 0x02000800L, 0x00080002L,
0x02080800L, 0x00080000L, 0x00000802L, 0x02000800L,
0x02080002L, 0x00000800L, 0x00080800L, 0x02000002L,
0x00080802L, 0x00000002L, 0x02000002L, 0x02080000L,
0x02080802L, 0x00080800L, 0x02080000L, 0x02000802L,
0x02000000L, 0x00000802L, 0x00080002L, 0x00000000L,
0x00080000L, 0x02000000L, 0x02000802L, 0x02080800L,
0x00000002L, 0x02080002L, 0x00000800L, 0x00080802L,
},
{
/* nibble 1 */
0x40108010L, 0x00000000L, 0x00108000L, 0x40100000L,
0x40000010L, 0x00008010L, 0x40008000L, 0x00108000L,
0x00008000L, 0x40100010L, 0x00000010L, 0x40008000L,
0x00100010L, 0x40108000L, 0x40100000L, 0x00000010L,
0x00100000L, 0x40008010L, 0x40100010L, 0x00008000L,
0x00108010L, 0x40000000L, 0x00000000L, 0x00100010L,
0x40008010L, 0x00108010L, 0x40108000L, 0x40000010L,
0x40000000L, 0x00100000L, 0x00008010L, 0x40108010L,
0x00100010L, 0x40108000L, 0x40008000L, 0x00108010L,
0x40108010L, 0x00100010L, 0x40000010L, 0x00000000L,
0x40000000L, 0x00008010L, 0x00100000L, 0x40100010L,
0x00008000L, 0x40000000L, 0x00108010L, 0x40008010L,
0x40108000L, 0x00008000L, 0x00000000L, 0x40000010L,
0x00000010L, 0x40108010L, 0x00108000L, 0x40100000L,
0x40100010L, 0x00100000L, 0x00008010L, 0x40008000L,
0x40008010L, 0x00000010L, 0x40100000L, 0x00108000L,
},
{
/* nibble 2 */
0x04000001L, 0x04040100L, 0x00000100L, 0x04000101L,
0x00040001L, 0x04000000L, 0x04000101L, 0x00040100L,
0x04000100L, 0x00040000L, 0x04040000L, 0x00000001L,
0x04040101L, 0x00000101L, 0x00000001L, 0x04040001L,
0x00000000L, 0x00040001L, 0x04040100L, 0x00000100L,
0x00000101L, 0x04040101L, 0x00040000L, 0x04000001L,
0x04040001L, 0x04000100L, 0x00040101L, 0x04040000L,
0x00040100L, 0x00000000L, 0x04000000L, 0x00040101L,
0x04040100L, 0x00000100L, 0x00000001L, 0x00040000L,
0x00000101L, 0x00040001L, 0x04040000L, 0x04000101L,
0x00000000L, 0x04040100L, 0x00040100L, 0x04040001L,
0x00040001L, 0x04000000L, 0x04040101L, 0x00000001L,
0x00040101L, 0x04000001L, 0x04000000L, 0x04040101L,
0x00040000L, 0x04000100L, 0x04000101L, 0x00040100L,
0x04000100L, 0x00000000L, 0x04040001L, 0x00000101L,
0x04000001L, 0x00040101L, 0x00000100L, 0x04040000L,
},
{
/* nibble 3 */
0x00401008L, 0x10001000L, 0x00000008L, 0x10401008L,
0x00000000L, 0x10400000L, 0x10001008L, 0x00400008L,
0x10401000L, 0x10000008L, 0x10000000L, 0x00001008L,
0x10000008L, 0x00401008L, 0x00400000L, 0x10000000L,
0x10400008L, 0x00401000L, 0x00001000L, 0x00000008L,
0x00401000L, 0x10001008L, 0x10400000L, 0x00001000L,
0x00001008L, 0x00000000L, 0x00400008L, 0x10401000L,
0x10001000L, 0x10400008L, 0x10401008L, 0x00400000L,
0x10400008L, 0x00001008L, 0x00400000L, 0x10000008L,
0x00401000L, 0x10001000L, 0x00000008L, 0x10400000L,
0x10001008L, 0x00000000L, 0x00001000L, 0x00400008L,
0x00000000L, 0x10400008L, 0x10401000L, 0x00001000L,
0x10000000L, 0x10401008L, 0x00401008L, 0x00400000L,
0x10401008L, 0x00000008L, 0x10001000L, 0x00401008L,
0x00400008L, 0x00401000L, 0x10400000L, 0x10001008L,
0x00001008L, 0x10000000L, 0x10000008L, 0x10401000L,
},
{
/* nibble 4 */
0x08000000L, 0x00010000L, 0x00000400L, 0x08010420L,
0x08010020L, 0x08000400L, 0x00010420L, 0x08010000L,
0x00010000L, 0x00000020L, 0x08000020L, 0x00010400L,
0x08000420L, 0x08010020L, 0x08010400L, 0x00000000L,
0x00010400L, 0x08000000L, 0x00010020L, 0x00000420L,
0x08000400L, 0x00010420L, 0x00000000L, 0x08000020L,
0x00000020L, 0x08000420L, 0x08010420L, 0x00010020L,
0x08010000L, 0x00000400L, 0x00000420L, 0x08010400L,
0x08010400L, 0x08000420L, 0x00010020L, 0x08010000L,
0x00010000L, 0x00000020L, 0x08000020L, 0x08000400L,
0x08000000L, 0x00010400L, 0x08010420L, 0x00000000L,
0x00010420L, 0x08000000L, 0x00000400L, 0x00010020L,
0x08000420L, 0x00000400L, 0x00000000L, 0x08010420L,
0x08010020L, 0x08010400L, 0x00000420L, 0x00010000L,
0x00010400L, 0x08010020L, 0x08000400L, 0x00000420L,
0x00000020L, 0x00010420L, 0x08010000L, 0x08000020L,
},
{
/* nibble 5 */
0x80000040L, 0x00200040L, 0x00000000L, 0x80202000L,
0x00200040L, 0x00002000L, 0x80002040L, 0x00200000L,
0x00002040L, 0x80202040L, 0x00202000L, 0x80000000L,
0x80002000L, 0x80000040L, 0x80200000L, 0x00202040L,
0x00200000L, 0x80002040L, 0x80200040L, 0x00000000L,
0x00002000L, 0x00000040L, 0x80202000L, 0x80200040L,
0x80202040L, 0x80200000L, 0x80000000L, 0x00002040L,
0x00000040L, 0x00202000L, 0x00202040L, 0x80002000L,
0x00002040L, 0x80000000L, 0x80002000L, 0x00202040L,
0x80202000L, 0x00200040L, 0x00000000L, 0x80002000L,
0x80000000L, 0x00002000L, 0x80200040L, 0x00200000L,
0x00200040L, 0x80202040L, 0x00202000L, 0x00000040L,
0x80202040L, 0x00202000L, 0x00200000L, 0x80002040L,
0x80000040L, 0x80200000L, 0x00202040L, 0x00000000L,
0x00002000L, 0x80000040L, 0x80002040L, 0x80202000L,
0x80200000L, 0x00002040L, 0x00000040L, 0x80200040L,
},
{
/* nibble 6 */
0x00004000L, 0x00000200L, 0x01000200L, 0x01000004L,
0x01004204L, 0x00004004L, 0x00004200L, 0x00000000L,
0x01000000L, 0x01000204L, 0x00000204L, 0x01004000L,
0x00000004L, 0x01004200L, 0x01004000L, 0x00000204L,
0x01000204L, 0x00004000L, 0x00004004L, 0x01004204L,
0x00000000L, 0x01000200L, 0x01000004L, 0x00004200L,
0x01004004L, 0x00004204L, 0x01004200L, 0x00000004L,
0x00004204L, 0x01004004L, 0x00000200L, 0x01000000L,
0x00004204L, 0x01004000L, 0x01004004L, 0x00000204L,
0x00004000L, 0x00000200L, 0x01000000L, 0x01004004L,
0x01000204L, 0x00004204L, 0x00004200L, 0x00000000L,
0x00000200L, 0x01000004L, 0x00000004L, 0x01000200L,
0x00000000L, 0x01000204L, 0x01000200L, 0x00004200L,
0x00000204L, 0x00004000L, 0x01004204L, 0x01000000L,
0x01004200L, 0x00000004L, 0x00004004L, 0x01004204L,
0x01000004L, 0x01004200L, 0x01004000L, 0x00004004L,
},
{
/* nibble 7 */
0x20800080L, 0x20820000L, 0x00020080L, 0x00000000L,
0x20020000L, 0x00800080L, 0x20800000L, 0x20820080L,
0x00000080L, 0x20000000L, 0x00820000L, 0x00020080L,
0x00820080L, 0x20020080L, 0x20000080L, 0x20800000L,
0x00020000L, 0x00820080L, 0x00800080L, 0x20020000L,
0x20820080L, 0x20000080L, 0x00000000L, 0x00820000L,
0x20000000L, 0x00800000L, 0x20020080L, 0x20800080L,
0x00800000L, 0x00020000L, 0x20820000L, 0x00000080L,
0x00800000L, 0x00020000L, 0x20000080L, 0x20820080L,
0x00020080L, 0x20000000L, 0x00000000L, 0x00820000L,
0x20800080L, 0x20020080L, 0x20020000L, 0x00800080L,
0x20820000L, 0x00000080L, 0x00800080L, 0x20020000L,
0x20820080L, 0x00800000L, 0x20800000L, 0x20000080L,
0x00820000L, 0x00020080L, 0x20020080L, 0x20800000L,
0x00000080L, 0x20820000L, 0x00820080L, 0x00000000L,
0x20000000L, 0x20800080L, 0x00020000L, 0x00820080L,
}
};
#define LOAD_DATA_tmp(a, b, c, d, e, f) LOAD_DATA(a, b, c, d, e, f, g)
#define LOAD_DATA(R, S, u, t, E0, E1, tmp) \
u = R ^ s[S ]; \
t = R ^ s[S+1]
#define D_ENCRYPT(LL, R, S) \
{ \
LOAD_DATA_tmp(R, S, u, t, E0, E1); \
t = i_ROTATE(t, 4); \
LL ^= \
i_DES_SPtrans[0][(u>> 2L)&0x3f]^ \
i_DES_SPtrans[2][(u>>10L)&0x3f]^ \
i_DES_SPtrans[4][(u>>18L)&0x3f]^ \
i_DES_SPtrans[6][(u>>26L)&0x3f]^ \
i_DES_SPtrans[1][(t>> 2L)&0x3f]^ \
i_DES_SPtrans[3][(t>>10L)&0x3f]^ \
i_DES_SPtrans[5][(t>>18L)&0x3f]^ \
i_DES_SPtrans[7][(t>>26L)&0x3f]; \
}
typedef unsigned char i_DES_cblock[8];
typedef unsigned char i_const_DES_cblock[8];
typedef struct i_DES_ks
{
union
{
i_DES_cblock cblock;
/* make sure things are correct size on machines with 8 byte longs */
i_DES_LONG deslong[2];
} ks[16];
} i_DES_key_schedule;
int i_DES_random_key(i_DES_cblock *ret);
int i_DES_key_sched(i_const_DES_cblock *key,i_DES_key_schedule *schedule);
int i_DES_set_key(i_const_DES_cblock *key,i_DES_key_schedule *schedule);
int i_DES_set_key_checked(i_const_DES_cblock *key,i_DES_key_schedule *schedule);
void i_DES_set_key_unchecked(i_const_DES_cblock *key,i_DES_key_schedule *schedule);
void i_DES_set_odd_parity(i_DES_cblock *key);
int i_DES_check_key_parity(i_const_DES_cblock *key);
int i_DES_is_weak_key(i_const_DES_cblock *key);
void i_DES_encrypt2(i_DES_LONG *data, i_DES_key_schedule *ks, int enc);
void i_DES_encrypt3(i_DES_LONG *data, i_DES_key_schedule *ks1, i_DES_key_schedule *ks2, i_DES_key_schedule *ks3);
void i_DES_decrypt3(i_DES_LONG *data, i_DES_key_schedule *ks1, i_DES_key_schedule *ks2, i_DES_key_schedule *ks3);
void i_DES_ecb3_encrypt(i_const_DES_cblock *input, i_DES_cblock *output, i_DES_key_schedule *ks1,i_DES_key_schedule *ks2, i_DES_key_schedule *ks3, int enc);
void i_DES_ede3_cbc_encrypt(const unsigned char *input,unsigned char *output, long length, i_DES_key_schedule *ks1,i_DES_key_schedule *ks2, i_DES_key_schedule *ks3,i_DES_cblock *ivec,int enc);
#define i_DES_ecb2_encrypt(i, o, k1, k2, e) i_DES_ecb3_encrypt((i), (o), (k1), (k2), (k1), (e))
#define i_DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) i_DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e))
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -