F
Size: a a a
E
E
E
T
DP
DP
DP
I
#define HIGHT_LIMIT 4294967296ULL
uint64_t crypted_block(uint64_t block){
for (register int i = 0; i < 32; i++){
uint32_t first_block = block >> 32;
uint32_t second_block = block & 0xFFFFFFFF;
uint32_t cur_key = key[i < 24 ? i % 8: 7-i%8];
uint32_t smod = (first_block + cur_key) % HIGHT_LIMIT;
print_binary_code(smod);
uint8_t block1_2 = (smod & 0xFF);
uint8_t block3_4 = (smod & 0xFF00)>>8;
uint8_t block5_6 = (smod & 0xFF0000)>>16;
uint8_t block7_8 = (smod & 0xFF000000)>>24;
print_binary_code(block1_2);
print_binary_code(block3_4);
print_binary_code(block5_6);
print_binary_code(block7_8);
uint32_t t_swap = 0;
t_swap |= table[0][block1_2 & 0x0F];
t_swap |= table[1][block1_2 >> 4] << 4;
t_swap |= table[2][block3_4 & 0x0F] << 8;
t_swap |= table[3][block3_4 >> 4] << 12;
t_swap |= table[4][block5_6 & 0x0F] << 16;
t_swap |= table[5][block5_6 >> 4] << 20;
t_swap |= table[6][block7_8 & 0x0F] << 24;
t_swap |= table[7][block7_8 >> 4] << 28;
print_binary_code(t_swap);
t_swap=(t_swap<<11) | (t_swap >> 21);
print_binary_code(t_swap);
uint32_t sum = t_swap ^ second_block;
block = ((uint64_t)sum<<32) | first_block;
}
printf("return in crypt: %ld\n", block);
return block;
}
uint64_t uncrypted_block(uint64_t block){
for (register int i = 0; i < 32; i++){
uint32_t first_block = block >> 32;
uint32_t second_block = block & 0xFFFFFFFF;
uint32_t cur_key = key[i < 8 ? i : 7 - i%8];
uint32_t smod = (first_block + cur_key) % HIGHT_LIMIT;
uint8_t block1_2 = (smod & 0xFF);
uint8_t block3_4 = (smod & 0xFF00)>>8;
uint8_t block5_6 = (smod & 0xFF0000)>>16;
uint8_t block7_8 = (smod & 0xFF000000)>>24;
uint32_t t_swap = 0;
t_swap |= table[0][block1_2 & 0x0F];
t_swap |= table[1][block1_2 >> 4] << 4;
t_swap |= table[2][block3_4 & 0x0F] << 8;
t_swap |= table[3][block3_4 >> 4] << 12;
t_swap |= table[4][block5_6 & 0x0F] << 16;
t_swap |= table[5][block5_6 >> 4] << 20;
t_swap |= table[6][block7_8 & 0x0F] << 24;
t_swap |= table[7][block7_8 >> 4] << 28;
t_swap = (t_swap << 11) | (t_swap >> 21);
uint32_t sum = t_swap ^ second_block;
block = ((uint64_t)sum<<32) | first_block;
}
printf("return in uncrypt: %ld\n", block);
return block;
}
I
I
static uint8_t table[8][16] = {
{ 0xc, 0x4, 0x6, 0x2, 0xa, 0x5, 0xb, 0x9, 0xe, 0x8, 0xd, 0x7, 0x0, 0x3, 0xf, 0x1 },
{ 0x6, 0x8, 0x2, 0x3, 0x9, 0xa, 0x5, 0xc, 0x1, 0xe, 0x4, 0x7, 0xb, 0xd, 0x0, 0xf },
{ 0xb, 0x3, 0x5, 0x8, 0x2, 0xf, 0xa, 0xd, 0xe, 0x1, 0x7, 0x4, 0xc, 0x9, 0x6, 0x0 },
{ 0xc, 0x8, 0x2, 0x1, 0xd, 0x4, 0xf, 0x6, 0x7, 0x0, 0xa, 0x5, 0x3, 0xe, 0x9, 0xb },
{ 0x7, 0xf, 0x5, 0xa, 0x8, 0x1, 0x6, 0xd, 0x0, 0x9, 0x3, 0xe, 0xb, 0x4, 0x2, 0xc },
{ 0x5, 0xd, 0xf, 0x6, 0x9, 0x2, 0xc, 0xa, 0xb, 0x7, 0x8, 0x1, 0x4, 0x3, 0xe, 0x0 },
{ 0x8, 0xe, 0x2, 0x5, 0x6, 0x9, 0x1, 0xc, 0xf, 0x4, 0xb, 0x0, 0xd, 0xa, 0x3, 0x7 },
{ 0x1, 0x7, 0xe, 0xd, 0x0, 0x5, 0x8, 0x3, 0x4, 0xf, 0xa, 0x6, 0x9, 0xc, 0xb, 0x2 }
};
static uint32_t key[8];o
o
I
o
o
НИ
НИ
I
o