*
*/
-#include <stdio.h>
#include <string.h>
#include "des.h"
for(i=4;i<6;i++)
obj[i]=(obj[i]<<1)|(obj[i+1]>>7);
obj[6]=obj[6]<<1|((mid&8)>>3);
- printf("debug: ");
- for(i=0;i<7;i++) printf("%02x ",obj[i]);
- printf("\n");
return 1;
}
u8 key0_56[DES_INITIAL_KEY_LEN/8];
/* initial permutation of key */
table_trans(key0,key0_56,key_perm_table,DES_INITIAL_KEY_LEN);
- for(i=0;i<7;i++) printf("%02x ",key0_56[i]);
- printf("\n");
for(i=0;i<DES_SUBKEYS;i++) {
/* split and rotate key_056 */
subkey_trans(key0_56,i);
/* sbox substitutions and pbox permutations */
data_s_and_p(permuted_data);
/* xor with left data */
- memcpy(tmp,right,DES_DATA_BLOCK_LEN/(2*8));
- for(j=0;j<DES_DATA_BLOCK_LEN/(2*8);j++)
- right[j]=permuted_data[j]^left[j];
- /* switch left and right data - not for last round */
- if(i!=15) memcpy(left,tmp,DES_DATA_BLOCK_LEN/(2*8));
+ if(i!=15) {
+ memcpy(tmp,right,DES_DATA_BLOCK_LEN/(2*8));
+ for(j=0;j<DES_DATA_BLOCK_LEN/(2*8);j++)
+ right[j]=permuted_data[j]^left[j];
+ /* switch left and right data - not for last round */
+ memcpy(left,tmp,DES_DATA_BLOCK_LEN/(2*8));
+ }
+ else
+ for(j=0;j<DES_DATA_BLOCK_LEN/(2*8);j++) left[j]^=permuted_data[j];
}
/* merge and do final permutation */
memcpy(permuted_data,left,DES_DATA_BLOCK_LEN/(2*8));
- loop 16 times
*/
compute_subkeys(key,subkey);
- printf("debug:\n");
- for(i=0;i<16;i++) {
- printf("subkey %d: ",i);
- for(j=0;j<6;j++) printf("%02x ",subkey[i][j]);
- printf("\n");
- }
/* split data to 64bit blocks, and crypt/decrypt each block
depending on mode (CBC/ECB):
- initial data transformation