 b33abb44fd
			
		
	
	b33abb44fd
	
	
	
		
			
			git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@171 ec53bebd-3082-4978-b11e-865c3cabbd6b
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* 3cbc_enc.c */
 | |
| /* Copyright (C) 1993 Eric Young - see README for more details */
 | |
| #include "des_locl.h"
 | |
| 
 | |
| static void 
 | |
| xp(des_cblock *arg)
 | |
| {
 | |
|   unsigned char *a = (unsigned char *) arg;
 | |
|   int i;
 | |
|   for(i=0; i<8; i++) printf("%02X",a[i]);printf("\n");
 | |
| }
 | |
| 
 | |
| int des_3cbc_encrypt(des_cblock (*input), des_cblock (*output), long int length, struct des_ks_struct *ks1, struct des_ks_struct *ks2, des_cblock (*iv1), des_cblock (*iv2), int encrypt)
 | |
| {
 | |
|   int off=length/8-1;
 | |
|   des_cblock niv1,niv2;
 | |
| 
 | |
|   printf("3cbc\n");
 | |
|   xp(iv1);
 | |
|   xp(iv1);
 | |
|   xp(iv2);
 | |
|   xp(input);
 | |
|   if (encrypt == DES_ENCRYPT)
 | |
|     {
 | |
|       des_cbc_encrypt(input,output,length,ks1,iv1,encrypt);
 | |
|       if (length >= sizeof(des_cblock))
 | |
| 	memcpy(niv1,output[off],sizeof(des_cblock));
 | |
|       des_cbc_encrypt(output,output,length,ks2,iv1,!encrypt);
 | |
|       des_cbc_encrypt(output,output,length,ks1,iv2, encrypt);
 | |
|       if (length >= sizeof(des_cblock))
 | |
| 	memcpy(niv2,output[off],sizeof(des_cblock));
 | |
|       memcpy(*iv1,niv1,sizeof(des_cblock));
 | |
|     }
 | |
|   else
 | |
|     {
 | |
|       if (length >= sizeof(des_cblock))
 | |
| 	memcpy(niv1,input[off],sizeof(des_cblock));
 | |
|       des_cbc_encrypt(input,output,length,ks1,iv1,encrypt);
 | |
|       des_cbc_encrypt(output,output,length,ks2,iv2,!encrypt);
 | |
|       if (length >= sizeof(des_cblock))
 | |
| 	memcpy(niv2,output[off],sizeof(des_cblock));
 | |
|       des_cbc_encrypt(output,output,length,ks1,iv2, encrypt);
 | |
|     }
 | |
|   memcpy(iv1,niv1,sizeof(des_cblock));
 | |
|   memcpy(iv2,niv2,sizeof(des_cblock));
 | |
|   xp(iv1);
 | |
|   xp(iv1);
 | |
|   xp(iv2);
 | |
|   xp(output);
 | |
|   return(0);
 | |
| }
 |