]> hackdaworld.org Git - my-code/crypto.git/commitdiff
-
authorhackbard <hackbard>
Mon, 29 Sep 2003 07:35:13 +0000 (07:35 +0000)
committerhackbard <hackbard>
Mon, 29 Sep 2003 07:35:13 +0000 (07:35 +0000)
des.c

diff --git a/des.c b/des.c
index 04951d6af37cc7a5ab3cec51410b56a4ea9dde45..db0aba84e072ca4aef5b391d4a4a71d36f5309f8 100644 (file)
--- a/des.c
+++ b/des.c
@@ -27,16 +27,16 @@ u8 subkey_perm_table[DES_PERMC_LEN]={
 
 int rotate_right(u8 *obj,int len) {
  u8 tmp=obj[len-1];
- while(--len) obj[len]=obj[len-1];
- obj[0]=tmp;
+ while(--len) obj[len]=obj[len]>>1|((obj[len-1]&1)<<7);
+ obj[0]=obj[0]>>1|((tmp&1)<<7);;
  return 1;
 }
 
 int rotate_left(u8 *obj,int len) {
  int i=0;
  u8 tmp=obj[0];
while(len-(i++)) obj[i-1]=obj[i];
- obj[len-1]=tmp;
for(i=0;i<len-1;i++) obj[i]=obj[i]<<1|(obj[j+1]>>7);
+ obj[len-1]=obj[len-1]<<1|(tmp>>7);
  return 1;
 }
 
@@ -53,17 +53,19 @@ key_perm(u8 *key) {
 int subkey_trans(u8 *key,int round) {
  int i;
  for(i=0;i<rot_per_round_table[round];i++) {
-  rotate_left(key,DES_SUBKEY_LEN/2);
-  rotate_left(key+DES_SUBKEY_LEN/2,DES_SUBKEY_LEN/2);
+  rotate_left(key,DES_SUBKEY_LEN/(8*2));
+  rotate_left(key+DES_SUBKEY_LEN/(8*2),DES_SUBKEY_LEN/(8*2));
  }
  return 1;
 }
 
-int fuckup_data(u8 *key,int round,u8 *plain,u8 *crypted) {
+int fuckup_data_block(u8 *key,int round,u8 *plain,u8 *crypted) {
  u8 permc[DES_PERMC_LEN];
  int i;
+ memset(permc,0,DES_PERMC_LEN/8);
  for(i=0;i<DES_PERMC_LEN;i++)
-  permc[i]=key[subkey_perm_table[i]];
+  permc[i/8]|=(((key[(subkey_perm_table[i]-1)/8]>>((8-subkey_perm_table[i]%8)&7)&1))<<(7-i%8));
+
  
  return 1;
 }