/AES128

C++ and Verilog to implement AES128

Primary LanguageVerilog

README for AES128
*****************
Repository containing C++ and Verilog to implement AES128 for final year project.

C++ = C++ program to implement AES.

C_Microblaze_Tests = C code to test crypto modes through UART to Microblaze processor.

RTL_TB = Some verilog testbench files created during process of writing working Verilog.

RTL = Verilog to implement AES128-ECB & AES128-CBC:

	AES128-CBC Hierarchy:
	Encryption:
	-> aes128_cbc_encrypt_top
		-> expand_key
		-> key_scheduler
		-> encrypt_top
			-> add_vector
			-> add_round_key	
			-> encrypt_round
				-> sub_bytes
				-> shift_rows
				-> mix_columns
				-> add_round_key
			-> encrypt_final_round
				-> sub_bytes
				-> shift_rows
				-> add_round_key
	Decryption:
	-> aes128_cbc_decrypt_top
		-> expand_key
		-> key_scheduler
		-> decrypt_top
			-> decrypt_initial_round
				-> add_round_key
				-> inv_shift_rows
				-> inv_sub_bytes
			-> decrypt_round
				-> add_round_key	
				-> inv_mix_columns
					-> mul_9
					-> mul_11
					-> mul_12
					-> mul_13
				-> inv_shift_rows
				-> inv_sub_bytes
			-> add_round_key
			-> add_vector