Main Page | Directories | File List | Globals

DES.c File Reference

#include <agnix/agnix.h>
#include <agnix/memory.h>
#include <agnix/crypt.h>

Include dependency graph for DES.c:

Go to the source code of this file.

Functions

int DES_crypt (char *in_buf, char *out_buf, char *passwd, int size)
int DES_decrypt (char *in_buf, char *out_buf, char *passwd, int size)
int DES_setup (void)
int DES_init (void)

Variables

u8 PSW []
u8 IP []
u8 IPR []
u8 PC1 []
u8 PC2 []
u8 tab_rotate [] = { 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 }
u8 E []
u8 S1 []
u8 S2 []
u8 S3 []
u8 S4 []
u8 S5 []
u8 S6 []
u8 S7 []
u8 S8 []
u8 P []
int DES_d
crypt_algo_s DES_algo


Function Documentation

int DES_crypt char *  in_buf,
char *  out_buf,
char *  passwd,
int  size
 

Definition at line 273 of file DES.c.

References IP, IPR, and memset().

00274 {
00275     u32 ile;
00276     int i;
00277     int l;
00278     u8 PIP[72];
00279     u8 PIPr[72];
00280     u8 keys[6*16];
00281     u8 des_key[10];
00282 //    u8 *out_buf = (u8 *)get_free_pages(0);
00283 //    u8 *out_buf_ptr = out_buf;
00284 
00285     if (size > PAGE_SIZE)
00286         return -1;
00287 
00288     memset(PIP, 0, sizeof(PIP));
00289     memset(out_buf, 0, size + 2);    
00290     memset(des_key, 0, sizeof(des_key));
00291 
00292     generate_key(des_key, passwd);
00293 
00294     for (ile = 0; ile <= ((size - 1) >> 3); ile++)
00295     {
00296 
00297 //        rotate_key(des_key);  /* changed by dembol */
00298         memset(keys, 0, sizeof(keys));
00299     
00300         keys_gen(keys, des_key);
00301 
00302         for (i = 0; i < 8; i++)
00303         {
00304             des_key[i] = keys[i];
00305             des_key[i] ^= keys[i + 4];
00306         }
00307 
00308         for (i = 0; i < 64; i++)
00309         {
00310             l = IP[i] - 1;
00311             PIP[i] = (in_buf[l >> 3] >> (l & 7)) & 1;
00312         }
00313 
00314         for (i = 0; i < 8; i++)
00315         {
00316             one_cycle(PIP + 32, PIP, keys + i * 2 * 6);
00317             one_cycle(PIP, PIP + 32, keys + i * 2 * 6 + 6);
00318         }
00319 
00320         for (i = 0; i < 32; i++)
00321         {
00322             PIPr[i] = PIP[32 + i];
00323             PIPr[i + 32] = PIP[i];
00324         }
00325 
00326         for (i = 0; i < 64; i++)
00327         {
00328             l = IPR[i] - 1;
00329             out_buf[i >> 3] |= PIPr[l] << (i & 7);
00330         }
00331     
00332         in_buf += 8;
00333         out_buf += 8;
00334     }
00335 
00336 //    memcpy(in_buf, out_buf_ptr, size);
00337 //    put_free_pages((u32)out_buf_ptr, 0);
00338 
00339     return 0;
00340 }

Here is the call graph for this function:

int DES_decrypt char *  in_buf,
char *  out_buf,
char *  passwd,
int  size
 

Definition at line 342 of file DES.c.

References IP, IPR, and memset().

00343 {
00344     u32 ile;
00345     int i;
00346     int j;
00347     int l;
00348     u8 PIP[70];
00349     u8 PIPr[70];
00350     u8 keys[6*16];
00351     u8 des_key[10];
00352 //    u8 *out_buf = (u8 *)get_free_pages(0);
00353 //    u8 *out_buf_ptr = out_buf;
00354 
00355     if (size > PAGE_SIZE)
00356         return -1;
00357     
00358     memset(PIP, 0, sizeof(PIP));
00359     memset(out_buf, 0, size + 2);    
00360     memset(des_key, 0, sizeof(des_key));
00361 
00362     generate_key(des_key, passwd);
00363 
00364     for (ile = 0; ile <= ((size - 1) >> 3); ile++)
00365     {
00366 
00367 //      rotate_key(des_key);
00368         memset(keys, 0, sizeof(keys));
00369         keys_gen(keys, des_key);
00370 
00371         for (i = 0; i < 8; i++)
00372         {
00373             des_key[i] = keys[i];
00374             des_key[i] ^= keys[i + 4];
00375         }
00376 
00377         for (i = 0; i < 64; i++)
00378         {
00379             l = IP[i] - 1;
00380             PIP[i] = (in_buf[l >> 3] >> (l & 7)) & 1;
00381         }
00382 
00383         j = 7;
00384         for (i = 0; i < 8; i++)
00385         {
00386             one_cycle(PIP + 32, PIP, keys + j * 2 * 6 + 6);
00387             one_cycle(PIP, PIP + 32, keys + j * 2 * 6);
00388             j--;
00389         }
00390 
00391         for (i = 0; i < 32; i++)
00392         {
00393             PIPr[i] = PIP[32 + i];
00394             PIPr[i + 32] = PIP[i];
00395         }
00396 
00397         for (i = 0; i < 64; i++)
00398         {
00399             l = IPR[i] - 1;
00400             out_buf[i >> 3] |= PIPr[l] << (i & 7);
00401         }
00402 
00403         in_buf += 8;
00404         out_buf += 8;
00405     }
00406 
00407     return 0;
00408 }

Here is the call graph for this function:

int DES_init void   ) 
 

Definition at line 422 of file DES.c.

References DES_d, and register_crypt_algo().

Referenced by crypt_init().

00423 {
00424     DES_d = register_crypt_algo(&DES_algo);
00425     
00426     if (DES_d < 0)
00427         return -1;
00428     
00429     return 0;
00430 }

Here is the call graph for this function:

int DES_setup void   ) 
 

Definition at line 410 of file DES.c.

00411 {
00412     return 0;
00413 }


Variable Documentation

struct crypt_algo_s DES_algo
 

Initial value:

Definition at line 415 of file DES.c.

int DES_d
 

Definition at line 129 of file DES.c.

Referenced by DES_init().

u8 E[]
 

Initial value:

 {      32,  1,  2,  3,  4,  5,
                 4,  5,  6,  7,  8,  9,
                 8,  9, 10, 11, 12, 13,
                12, 13, 14, 15, 16, 17,
                16, 17, 18, 19, 20, 21,
                20, 21, 22, 23, 24, 25,
                24, 25, 26, 27, 28, 29,
                28, 29, 30, 31, 32,  1 }

Definition at line 69 of file DES.c.

u8 IP[]
 

Initial value:

  {     58, 50, 42, 34, 26, 18, 10,  2,
                60, 52, 44, 36, 28, 20, 12,  4,
                62, 54, 46, 38, 30, 22, 14,  6,
                64, 56, 48, 40, 32, 24, 16,  8,
                57, 49, 41, 33, 25, 17,  9,  1,
                59, 51, 43, 35, 27, 19, 11,  3,
                61, 53, 45, 37, 29, 21, 13,  5,
                63, 55, 47, 39, 31, 23, 15,  7}

Definition at line 31 of file DES.c.

Referenced by DES_crypt(), and DES_decrypt().

u8 IPR[]
 

Initial value:

 {      40,  8, 48, 16, 56, 24, 64, 32,
                39,  7, 47, 15, 55, 23, 63, 31,
                38,  6, 46, 14, 54, 22, 62, 30,
                37,  5, 45, 13, 53, 21, 61, 29,
                36,  4, 44, 12, 52, 20, 60, 28,
                35,  3, 43, 11, 51, 19, 59, 27,
                34,  2, 42, 10, 50, 18, 58, 26,
                33,  1, 41,  9, 49, 17, 57, 25}

Definition at line 40 of file DES.c.

Referenced by DES_crypt(), and DES_decrypt().

u8 P[]
 

Initial value:

 {      16,  7, 20, 21,
                29, 12, 28, 17,
                 1, 15, 23, 26,
                 5, 18, 31, 10,
                 2,  8, 24, 14,
                32, 27,  3,  9,
                19, 13, 30,  6,
                22, 11,  4, 25 }

Definition at line 120 of file DES.c.

u8 PC1[]
 

Initial value:

 {      57, 49, 41, 33, 25, 17, 9,
                 1, 58, 50, 42, 34, 26, 18,
                10,  2, 59, 51, 43, 35, 27,
                19, 11,  3, 60, 52, 44, 36,
                63, 55, 47, 39, 31, 23, 15,
                 7, 62, 54, 46, 38, 30, 22,
                14,  6, 61, 53, 45, 37, 29,
                21, 13,  5, 28, 20, 12,  4 }

Definition at line 49 of file DES.c.

u8 PC2[]
 

Initial value:

 {      14, 17, 11, 24,  1,  5,
                 3, 28, 15,  6, 21, 10,
                23, 19, 12,  4, 21,  8,
                16,  7, 27, 20, 13,  2,
                41, 52, 31, 37, 47, 55,
                30, 40, 51, 45, 33, 48,
                44, 49, 39, 56, 34, 53,
                46, 42, 50, 36, 29, 32 }

Definition at line 58 of file DES.c.

u8 PSW[]
 

Initial value:

 {      64, 60, 56, 52, 48, 44, 40, 36,
                32, 28, 24, 20, 16, 12,  8,  4,
                63, 59, 55, 51, 47, 43, 39, 35,
                31, 27, 23, 19, 15, 11,  7,  3,
                62, 58, 54, 50, 46, 42, 38, 34,
                30, 26, 22, 18, 14, 10,  6,  2,
                61, 57, 53, 49, 45, 41, 37, 33,
                29, 25, 21, 17, 13,  9,  5,  1}

Definition at line 22 of file DES.c.

u8 S1[]
 

Initial value:

 {      14,  4, 13,  1,  2, 15, 11,  8,  3, 10,  6, 12,  5,  9,  0,  7,
                 0, 15,  7,  4, 14,  2, 13,  1, 10,  6, 12, 11,  9,  5,  3,  8,
                 4,  1, 14,  8, 13,  6,  2, 11, 15,  2,  9,  7,  3, 10,  5,  0,
                15, 12,  8,  2,  4,  9,  1,  7,  5, 11,  3, 14, 10,  0,  6, 13}

Definition at line 79 of file DES.c.

u8 S2[]
 

Initial value:

 {   15,  1,  8, 14,  6, 11,  3,  4,  9,  7,  2, 13, 12,  0,  5, 10,
                 3, 13,  4,  7, 15,  2,  8, 14, 12,  0,  1, 10,  6,  9, 11,  5,
                 0, 14,  7, 11, 10,  4, 13,  1,  5,  8, 12,  6,  9,  3,  2, 15,
                13,  8, 10,  1,  3, 15,  4,  2, 11,  6,  7, 12,  0,  5, 14,  9}

Definition at line 84 of file DES.c.

u8 S3[]
 

Initial value:

 {   10,  0,  9, 14,  6,  3, 15,  5,  1, 13, 12,  7, 11,  4,  2,  8,
                13,  7,  0,  9,  3,  4,  6, 10,  2,  8,  5, 14, 12, 11, 15,  1,
                13,  6,  4,  9,  8, 15,  3,  0, 11,  1,  2, 12,  5, 10, 14,  7,
                 1, 10, 13,  0,  6,  9,  8,  7,  4, 15, 14,  3, 11,  5,  2, 12}

Definition at line 89 of file DES.c.

u8 S4[]
 

Initial value:

 {       7, 13, 14,  3,  0,  6,  9, 10,  1,  2,  8,  5,  1, 12,  4, 15,
                13,  8, 11,  5,  6, 15,  0,  3,  4,  7,  2, 12,  1, 10, 14,  9,
                10,  6,  9,  0, 12, 11,  7, 13, 15,  1,  3, 14,  5,  2,  8,  4,
                 3, 15,  0,  6, 10,  1, 13,  8,  9,  4,  5, 11, 12,  7,  2, 14}

Definition at line 94 of file DES.c.

u8 S5[]
 

Initial value:

 {       2, 12,  4,  1,  7, 10, 11,  6,  8,  5,  3, 15, 13,  0, 14,  9,
                14, 11,  2, 12,  4,  7, 13,  1,  5,  0, 15, 10,  3,  9,  8,  6,
                 4,  2,  1, 11, 10, 13,  7,  8, 15,  9, 12,  5,  6,  3,  0, 14,
                11,  8, 12,  7,  1, 14,  2, 13,  6, 15,  0,  9, 10,  4,  5,  3}

Definition at line 99 of file DES.c.

u8 S6[]
 

Initial value:

 {      12,  1, 10, 15,  9,  2,  6,  8,  0, 13,  3,  4, 14,  7,  5, 11,
                10, 15,  4,  2,  7, 12,  9,  5,  6,  1, 13, 14,  0, 11,  3,  8,
                 9, 14, 15,  5,  2,  8, 12,  3,  7,  0,  4, 10,  1, 13, 11,  6,
                 4,  3,  2, 12,  9,  5, 15, 10, 11, 14,  1,  7,  6,  0,  8, 13}

Definition at line 104 of file DES.c.

u8 S7[]
 

Initial value:

 {       4, 11,  2, 14, 15,  0,  8, 13,  3, 12,  9,  7,  5, 10,  6,  1,
                13,  0, 11,  7,  4,  9,  1, 10, 14,  3,  5, 12,  2, 15,  8,  6,
                 1,  4, 11, 13, 12,  3,  7, 14, 10, 15,  6,  8,  0,  5,  9,  2,
                 6, 11, 13,  8,  1,  4, 10,  7,  9,  5,  0, 15, 14,  2,  3, 12}

Definition at line 109 of file DES.c.

u8 S8[]
 

Initial value:

 {      13,  2,  8,  4,  6, 15, 11,  1, 10,  9,  3, 14,  5,  0, 12,  7,
                 1, 15, 13,  8, 10,  3,  7,  4, 12,  5,  6, 11,  0, 14,  9,  2,
                 7, 11,  4,  1,  9, 12, 14,  2,  0,  6, 10, 13, 15,  3,  5,  8,
                 2,  1, 14,  7,  4, 10,  8, 13, 15, 12,  9,  0,  3,  5,  6, 11}

Definition at line 114 of file DES.c.

u8 tab_rotate[] = { 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 }
 

Definition at line 67 of file DES.c.

Dokumentacje wygenerowano programem Doxygen 1.4.2 dla projektu Agnix