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;
}
key_perm(u8 *key) {
int i;
- u8 *new[DES_SUBKEY_LEN];
+ u8 *new[DES_SUBKEY_LEN/8];
+ memset(new,0,DES_SUBKEY_LEN/8];
for(i=0;i<DES_SUBKEY_LEN;i++)
- new[i]=key[key_perm_table[i]];
+ new[i/8]|=(((key[(key_perm_table[i]-1)/8)]>>((8-key_perm_table[i]%8)&7))&1)<<(7-i%8));
memcpy(key,new,DES_SUBKEY_LEN);
return 1;
}
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_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/8]|=(((key[(subkey_perm_table[i]-1)/8]>>((8-subkey_perm_table[i]%8)&7)&1))<<(7-i%8));
+
+
+ return 1;
+}
+
int des_crypt(u8 *plain,u8 *crypted,u8 *key) {
int round;
key_perm(key);
for(round=0;round<DES_ROUND;round++) {
subkey_trans(key,round);
- // fuckup_data(key,round);
+ // fuckup_data(key,round,plain,crypted);
}
return 1;