started crypto api - des cipher start
[my-code/crypto.git] / des.c
1 /*
2  * des.c - data encryption standard algo
3  *
4  * author: hackbard@hackdaworld.dyndns.org
5  *
6  */
7
8 #include "des.h"
9
10 u8 key_perm_table[DES_SUBKEY_LEN]={
11  57,49,41,33,25,17,9,1,58,50,42,34,26,18,
12  10,2,59,51,43,35,27,18,11,3,60,52,44,36,
13  63,55,47,39,31,23,15,7,62,54,46,38,30,22,
14  14,6,61,53,45,37,29,21,13,5,28,20,12,4
15 };
16
17 u8 rot_per_round_table[DES_ROUNDS]={
18  1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1
19 };
20
21 u8 subkey_perm_table[DES_PERMC_LEN]={
22  14,17,11,24,1,5,3,28,15,6,21,10,
23  23,19,12,4,26,8,16,7,27,20,13,2,
24  41,52,31,37,47,55,30,40,51,45,33,48,
25  44,49,39,56,34,53,46,42,50,36,29,32
26 };
27
28 int rotate_right(u8 *obj,int len) {
29  u8 tmp=obj[len-1];
30  while(--len) obj[len]=obj[len-1];
31  obj[0]=tmp;
32  return 1;
33 }
34
35 int rotate_left(u8 *obj,int len) {
36  int i=0;
37  u8 tmp=obj[0];
38  while(len-(i++)) obj[i-1]=obj[i];
39  obj[len-1]=tmp;
40  return 1;
41 }
42
43 key_perm(u8 *key) {
44  int i;
45  u8 *new[DES_SUBKEY_LEN];
46  for(i=0;i<DES_SUBKEY_LEN;i++)
47   new[i]=key[key_perm_table[i]];
48  memcpy(key,new,DES_SUBKEY_LEN);
49  return 1;
50 }
51
52 int subkey_trans(u8 *key,int round) {
53  int i;
54  for(i=0;i<rot_per_round_table[round];i++) {
55   rotate_left(key,DES_SUBKEY_LEN/2);
56   rotate_left(key+DES_SUBKEY_LEN/2,DES_SUBKEY_LEN/2);
57  }
58  return 1;
59 }
60
61 int des_crypt(u8 *plain,u8 *crypted,u8 *key) {
62  int round;
63
64  key_perm(key);
65  for(round=0;round<DES_ROUND;round++) {
66   subkey_trans(key,round);
67   // fuckup_data(key,round);
68  }
69
70  return 1;
71 }
72
73 int des_decrypt(u8 *crypted,u8 *plain,u8 *key) {
74
75
76  return 1;
77 }