/[rdesktop]/sourceforge.net/trunk/rdesktop/secure.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/rdesktop/secure.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 30 by matty, Fri Sep 14 13:51:38 2001 UTC revision 32 by matty, Sat Sep 15 09:37:17 2001 UTC
# Line 19  Line 19 
19  */  */
20    
21  #include "rdesktop.h"  #include "rdesktop.h"
22    
23    #ifdef WITH_OPENSSL
24    #include <openssl/rc4.h>
25    #include <openssl/md5.h>
26    #include <openssl/sha.h>
27    #include <openssl/bn.h>
28    #else
29  #include "crypto/rc4.h"  #include "crypto/rc4.h"
30  #include "crypto/md5.h"  #include "crypto/md5.h"
31  #include "crypto/sha.h"  #include "crypto/sha.h"
32  #include "crypto/arith.h"  #include "crypto/bn.h"
33    #endif
34    
35  extern char hostname[16];  extern char hostname[16];
36  extern int width;  extern int width;
# Line 262  sec_decrypt(uint8 *data, int length) Line 270  sec_decrypt(uint8 *data, int length)
270          use_count++;          use_count++;
271  }  }
272    
 /* Read in a NUMBER from a buffer */  
273  static void  static void
274  sec_read_number(NUMBER * num, uint8 *buffer, int len)  reverse(uint8 *p, int len)
275  {  {
         INT *data = num->n_part;  
276          int i, j;          int i, j;
277            uint8 temp;
278    
279          for (i = 0, j = 0; j < len; i++, j += 2)          for (i = 0, j = len-1; i < j; i++, j--)
                 data[i] = buffer[j] | (buffer[j + 1] << 8);  
   
         num->n_len = i;  
 }  
   
 /* Write a NUMBER to a buffer */  
 static void  
 sec_write_number(NUMBER * num, uint8 *buffer, int len)  
 {  
         INT *data = num->n_part;  
         int i, j;  
   
         for (i = 0, j = 0; j < len; i++, j += 2)  
280          {          {
281                  buffer[j] = data[i] & 0xff;                  temp = p[i];
282                  buffer[j + 1] = data[i] >> 8;                  p[i] = p[j];
283                    p[j] = temp;
284          }          }
285  }  }
286    
# Line 294  static void Line 289  static void
289  sec_rsa_encrypt(uint8 *out, uint8 *in, int len,  sec_rsa_encrypt(uint8 *out, uint8 *in, int len,
290                  uint8 *modulus, uint8 *exponent)                  uint8 *modulus, uint8 *exponent)
291  {  {
292          NUMBER data, key;          BN_CTX ctx;
293            BIGNUM mod, exp, x, y;
294          /* Set modulus for arithmetic */          uint8 inr[SEC_MODULUS_SIZE];
295          sec_read_number(&key, modulus, SEC_MODULUS_SIZE);          int outlen;
296          m_init(&key, NULL);  
297            reverse(modulus, SEC_MODULUS_SIZE);
298          /* Exponentiate */          reverse(exponent, SEC_EXPONENT_SIZE);
299          sec_read_number(&data, in, len);          memcpy(inr, in, len);
300          sec_read_number(&key, exponent, SEC_EXPONENT_SIZE);          reverse(inr, len);
301          m_exp(&data, &key, &data);  
302          sec_write_number(&data, out, SEC_MODULUS_SIZE);          BN_CTX_init(&ctx);
303            BN_init(&mod);
304            BN_init(&exp);
305            BN_init(&x);
306            BN_init(&y);
307    
308            BN_bin2bn(modulus, SEC_MODULUS_SIZE, &mod);
309            BN_bin2bn(exponent, SEC_EXPONENT_SIZE, &exp);
310            BN_bin2bn(inr, len, &x);
311            BN_mod_exp(&y, &x, &exp, &mod, &ctx);
312            outlen = BN_bn2bin(&y, out);
313            reverse(out, outlen);
314            if (outlen < SEC_MODULUS_SIZE)
315                    memset(out+outlen, 0, SEC_MODULUS_SIZE-outlen);
316    
317            BN_free(&y);
318            BN_clear_free(&x);
319            BN_free(&exp);
320            BN_free(&mod);
321            BN_CTX_free(&ctx);
322  }  }
323    
324  /* Initialise secure transport packet */  /* Initialise secure transport packet */

Legend:
Removed from v.30  
changed lines
  Added in v.32

  ViewVC Help
Powered by ViewVC 1.1.26