Main Page   Class Hierarchy   Alphabetical List   Data Structures   File List   Data Fields   Globals  

crypt2.hh File Reference

#include "rcs_defs.hh"

Include dependency graph for crypt2.hh:

Include dependency graph

This graph shows which files directly or indirectly include this file:

Included by dependency graph

Go to the source code of this file.

Functions

RCS_EXPORT char * rcs_crypt (const char *key, const char *passwd)


Function Documentation

RCS_EXPORT char* rcs_crypt const char *    key,
const char *    passwd
 

Definition at line 611 of file crypt2.cc.

Referenced by TCPMEM::login(), STCPMEM::login(), and RPCMEM::login().

00612 {
00613 //  rcs_print("encrypting %s with %s\n", original, salt);
00614   unsigned int i, y, u;
00615 
00616   if (strlen (salt) < 2)
00617     return NULL;
00618 
00619   static unsigned char buffer[256];
00620   memset (buffer, 0, 256);
00621 
00622   unsigned char charZero = (unsigned char) salt[(0)];
00623   unsigned char charOne = (unsigned char) salt[(1)];
00624 
00625   buffer[0] = charZero;
00626   buffer[1] = charOne;
00627 
00628   unsigned int Eswap0 = con_salt[(unsigned int) charZero];
00629   unsigned int Eswap1 = con_salt[(unsigned int) charOne] << 4;
00630 
00631   unsigned char key[8];
00632 
00633   for (i = 0; i < 8; i++)
00634     key[i] = (char) 0;
00635 
00636 #ifdef DEBUG_CRYPT
00637   printf ("original = %s\n", original);
00638 #endif
00639 
00640   for (i = 0; i < 8 && i < strlen (original); i++)
00641     {
00642       unsigned int iChar = (unsigned int) original[(i)];
00643 
00644       key[i] = (unsigned char) (iChar << 1);
00645     }
00646 #ifdef DEBUG_CRYPT
00647   printf ("key = ");
00648   for (int jj = 0; jj < 8; jj++)
00649     {
00650       if (jj % 8 == 0)
00651         {
00652           printf ("\n");
00653         }
00654       printf (" %8.8X ", key[jj]);
00655     }
00656   printf ("\n");
00657 #endif
00658 
00659   unsigned int *schedule = des_set_key (key);
00660 #ifdef DEBUG_CRYPT
00661   printf ("schedule = ");
00662   for (int ii = 0; ii < ITERATIONS * 2; ii++)
00663     {
00664       if (ii % 8 == 0)
00665         {
00666           printf ("\n");
00667         }
00668       printf (" %8.8X ", schedule[ii]);
00669     }
00670   printf ("\n");
00671 #endif
00672 
00673   unsigned int *out = body (schedule, Eswap0, Eswap1);
00674 #ifdef DEBUG_CRYPT
00675   printf ("out = ");
00676   for (int iii = 0; iii < 2; iii++)
00677     {
00678       printf (" %8.8X ", out[iii]);
00679     }
00680   printf ("\n");
00681 #endif
00682 
00683   unsigned char b[9];
00684 
00685   intToFourChars (out[0], b, 0);
00686   intToFourChars (out[1], b, 4);
00687   b[8] = 0;
00688 
00689   for (i = 2, y = 0, u = 0x80; i < 13; i++)
00690     {
00691       for (unsigned int j = 0, c = 0; j < 6; j++)
00692         {
00693           c <<= 1;
00694 
00695           if (((unsigned int) b[y] & u) != 0)
00696             c |= 1;
00697 
00698           u = u >> 1;
00699 
00700           if (u == 0)
00701             {
00702               y++;
00703               u = 0x80;
00704             }
00705           buffer[i] = (unsigned char) cov_2char[c];
00706         }
00707     }
00708   return ((char *) buffer);
00709 }


Generated on Sun Dec 2 15:57:06 2001 for rcslib by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001