#include "wp.h" #include "xparameters.h" #include "xio.h" #include #include #include #define BLOCK_SIZE 512 #define BIT_COUNTER_SIZE 256 #define BYTE_LIMIT 2048 void wp( Xuint32 baseaddr, unsigned char *buffer, int message_length, Xuint32 *output_hash); void single_block_zeros(Xuint32 baseaddr); void single_block_ones(Xuint32 baseaddr); void byte_limit_blocks(Xuint32 baseaddr, unsigned char *message); int main(void){ Xuint32 baseaddr; int i; unsigned char message[] = "Przemyslaw Zalewski"; //XCache_EnableICache(0xc0000001); //XCache_EnableDCache(0xc0000001); baseaddr = (Xuint32) XPAR_WP_CONFIG_1_0_BASEADDR; printf("-- Entering wp_test main()-\n"); single_block_zeros(baseaddr); single_block_ones(baseaddr); byte_limit_blocks(baseaddr,message); printf("\n-- Exiting wp_test main()-\n"); XCache_DisableDCache(); XCache_DisableICache(); return XST_SUCCESS; } void wp( Xuint32 baseaddr, unsigned char *buffer, int message_length, Xuint32 *output_hash){ int i,padded_message_bytes_length,num_blocks,num_ints; unsigned long long num_bits; Xuint32 *converted; int Index; Xuint64 start,reset,data_num_blocks,wp_done,hash; unsigned char *padded_message; num_bits = 8*message_length; num_blocks = num_bits / BLOCK_SIZE; if(num_bits % BLOCK_SIZE < BLOCK_SIZE - BIT_COUNTER_SIZE - 1){ num_blocks += 1; }else{ num_blocks += 2; } padded_message_bytes_length = num_blocks*(BLOCK_SIZE/8); padded_message = (unsigned char *)calloc(padded_message_bytes_length,sizeof(unsigned char)); if(padded_message == NULL){ printf("Allocation failed\n"); } // prepend the actual message memcpy(padded_message,buffer,message_length); // append the '1' bit padded_message[message_length] = 0x80; // append the number of bits (as a 64 bit unsigned integer) for( i = 0; i < 8; i++){ padded_message[padded_message_bytes_length-(i+1)] = (unsigned char)((num_bits >> i*8) & 0xFF); } num_ints = (BLOCK_SIZE/32)*num_blocks; converted = (Xuint32 *)malloc(num_ints); if(converted == NULL){ printf("Allocation failed\n"); } for(i=0; i