#include #include "xil_io.h" #include "xil_types.h" #include "platform.h" #include "sleep.h" #include "xsdps.h" #include "xgpio.h" #include "xil_printf.h" #include "xil_cache.h" #include "ff.h" #include "stdio.h" #define led_gpio XPAR_AXI_GPIO_0_DEVICE_ID #define sw_gpio XPAR_AXI_GPIO_1_DEVICE_ID #define twofishIP XPAR_TWOFISHIP_0_DEVICE_ID #define twofish_baseaddr XPAR_TWOFISHIP_0_S00_AXI_BASEADDR #define input 0xF #define output 0x0 #define BUFFER_SIZE 129 int main() { FATFS FS_inst; FIL file; FRESULT fat_result; static char FileName[15] = "Encrypt.txt"; static char *encryption_file; unsigned int BytesWr; char write_buffer[BUFFER_SIZE+1] __attribute__ ((aligned(32))); XGpio leds, switches; u32 sw_data = 0; u32 enable = 0; u32 busy = 0; unsigned int plaintext3 = 0x80000000; unsigned int plaintext2 = 0x00000000; unsigned int plaintext1 = 0x00000000; unsigned int plaintext0 = 0x00000000; int crypto3 = 0; int crypto2 = 0; int crypto1 = 0; int crypto0 = 0; u32 iterator = 0; XGpio_Initialize(&leds, led_gpio); XGpio_Initialize(&switches, sw_gpio); XGpio_SetDataDirection(&leds, 1, output); XGpio_SetDataDirection(&switches, 1, input); init_platform(); //reseting for(iterator = 4; iterator <= 16; iterator = iterator + 4) { Xil_Out32(twofish_baseaddr + iterator, 0x00000000); } for(iterator = 20; iterator <= 32; iterator = iterator + 4) { Xil_Out32(twofish_baseaddr + iterator, 0x00000000); } Xil_Out32(twofish_baseaddr + 20, 0x00000000); Xil_Out32(twofish_baseaddr + 24, 0x00000000); Xil_Out32(twofish_baseaddr + 28, 0x00000000); Xil_Out32(twofish_baseaddr + 32, 0x00000000); fat_result = f_mount(&FS_inst, "0:/", 1); if (fat_result != 0) { xil_printf (" Error! f_mount returned %d\r\n", fat_result); return XST_FAILURE; } xil_printf (" f_mount returned %d\r\n", fat_result); encryption_file = (char *)FileName; do { Xil_Out32(twofish_baseaddr + 4, plaintext3); Xil_Out32(twofish_baseaddr + 8, plaintext2); Xil_Out32(twofish_baseaddr + 12, plaintext1); Xil_Out32(twofish_baseaddr + 16, plaintext0); xil_printf("Started encryption for plaintext: %08x%08x%08x%08x\r\n", plaintext3, plaintext2, plaintext1, plaintext0); sw_data = XGpio_DiscreteRead(&switches, 1); enable = sw_data & 0x1; Xil_Out32(twofish_baseaddr, enable); busy = Xil_In32(twofish_baseaddr+36); XGpio_DiscreteWrite(&leds, 1, busy); xil_printf("Busy is: %x\r\n", busy); crypto3 = Xil_In32(twofish_baseaddr+40); crypto2 = Xil_In32(twofish_baseaddr+44); crypto1 = Xil_In32(twofish_baseaddr+48); crypto0 = Xil_In32(twofish_baseaddr+52); sprintf(write_buffer, "PT=%08X%08X%08X%08X\r\nCT=%08X%08X%08X%08X\r\n\n", plaintext3,plaintext2,plaintext1,plaintext0,crypto3,crypto2,crypto1,crypto0); fat_result = f_open(&file, encryption_file, FA_OPEN_ALWAYS | FA_WRITE); if (fat_result != 0) { xil_printf(" Error! f_open returned %d\r\n", fat_result); return XST_FAILURE; } xil_printf (" f_open returned %d\r\n", fat_result); fat_result = f_lseek(&file, file_size(&file)); if(fat_result != 0) { xil_printf("lseek returned &d \r\n", fat_result); return XST_FAILURE; } fat_result = f_write(&file, (const void*)write_buffer, strlen(write_buffer), &BytesWr); if (fat_result != 0) { return XST_FAILURE; } xil_printf("f_write returned %d \r\n", fat_result); fat_result = f_close(&file); if (fat_result != 0) { return XST_FAILURE; } if(plaintext3 == 0x00000001) { plaintext3 = plaintext3 >> 1; plaintext2 = 0x10000000; } else { plaintext3 = plaintext3 >> 1; } if(plaintext2 == 0x00000001) { plaintext2 = plaintext2 >> 1; plaintext1 = 0x10000000; } else { plaintext2 = plaintext2 >> 1; } if(plaintext1 == 0x00000001) { plaintext1 = plaintext1 >> 1; plaintext0 = 0x10000000; } else { plaintext1 = plaintext1 >> 1; } plaintext0 = plaintext0 >> 1; }while (plaintext0 != 0x00000001); cleanup_platform(); return XST_SUCCESS; }