#include "des56.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define ENCRYPT 0
#define DECRYPT 1
void XORblock(char A[8], char B[8], char result[8])
{
int i = 0;
for(;i<8;i++)
result[i] = A[i]^B[i];
}
void printhex(unsigned char block[8])
{
int i=0;
for(;i<8;i++)
printf(" 0x%x ",block[i]);
puts("");
}
void cbc_enc_three_blocks(char block1[8], char block2[8], char block3[8], char IV[8],keysched *ks)
{
XORblock(block1, IV, block1);
fencrypt(block1, 0, ks);
XORblock(block2, block1, block2);
fencrypt(block2, 0, ks);
XORblock(block3, block2, block3);
fencrypt(block3, 0, ks);
}
void cbc_dec_three_blocks(char block1[8], char block2[8], char block3[8], char IV[8],keysched *ks)
{
char temp1[8];
char temp2[8];
char temp3[8];
for(int i = 0; i < 8; i++)
{
temp1[i] = block1[i];
temp2[i] = block2[i];
temp3[i] = block3[i];
}
fencrypt(block1,1,ks);
XORblock(block1, IV, block1);
fencrypt(block2,1,ks);
XORblock(block2, temp1, block2);
fencrypt(block3,1,ks);
XORblock(block3, temp2, block3);
}
int main()
{
unsigned char key[8] = {1,2,3,4,5,6,7,8};
keysched *ks = malloc(sizeof(keysched));
fsetkey(key,ks);
unsigned char* all_blocks = malloc(3*8*sizeof(char));
bzero(all_blocks,8*3);
all_blocks[0] = 'A';
FILE* pt_f = fopen("plaintext.txt","wb");
fwrite(all_blocks,8,3,pt_f);
fclose(pt_f);
unsigned char IV[8] = {0};
cbc_enc_three_blocks(all_blocks,all_blocks+8,all_blocks+16,IV,ks);
FILE* fp = fopen("encryption.des","wb");
fwrite(all_blocks,8,3,fp);
fclose(fp);
cbc_dec_three_blocks(all_blocks,all_blocks+8,all_blocks+16,IV,ks);
fp = fopen("decryption.txt","wb");
fwrite(all_blocks,8,3,fp);
fclose(fp);
}