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;
}
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;
}