⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keysched192.cpp

📁 面积最小的AES高级加密算法实现
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////                                                              ////////  AES key schedule implementation                             ////////                                                              ////////  This file is part of the SystemC AES                        ////////                                                              ////////  Description:                                                ////////  Generate the next round key from the previous one           ////////                                                              ////////  To Do:                                                      ////////   - done                                                     ////////                                                              ////////  Author(s):                                                  ////////      - Javier Castillo, jcastilo@opencores.org               ////////                                                              //////////////////////////////////////////////////////////////////////////////                                                              //////// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////////                                                              //////// This source file may be used and distributed without         //////// restriction provided that this copyright statement is not    //////// removed from the file and that any derivative work contains  //////// the original copyright notice and the associated disclaimer. ////////                                                              //////// This source file is free software; you can redistribute it   //////// and/or modify it under the terms of the GNU Lesser General   //////// Public License as published by the Free Software Foundation; //////// either version 2.1 of the License, or (at your option) any   //////// later version.                                               ////////                                                              //////// This source is distributed in the hope that it will be       //////// useful, but WITHOUT ANY WARRANTY; without even the implied   //////// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      //////// PURPOSE.  See the GNU Lesser General Public License for more //////// details.                                                     ////////                                                              //////// You should have received a copy of the GNU Lesser General    //////// Public License along with this source; if not, download it   //////// from http://www.opencores.org/lgpl.shtml                     ////////                                                              ////////////////////////////////////////////////////////////////////////////// CVS Revision History//// $Log: keysched192.cpp,v $// Revision 1.1  2005/02/14 16:18:23  jcastillo// aes192 uploaded//#include "keysched192.h"//Rcon ROMvoid keysched::rcon(){		switch(round_i.read()){	    case 1:            rcon_o.write(1);            break;	    case 2:            rcon_o.write(2);            break;	    case 3:            rcon_o.write(4);            break;	    case 4:            rcon_o.write(8);            break;	    case 5:            rcon_o.write(0x10);            break;	    case 6:            rcon_o.write(0x20);            break;	    case 7:            rcon_o.write(0x40);            break;	    case 8:            rcon_o.write(0x80);            break;	    case 9:            rcon_o.write(0x1B);            break;	    case 10:            rcon_o.write(0x36);            break;		case 11:            rcon_o.write(0x6C);            break;		case 12:            rcon_o.write(0xD8);            break;        default:			rcon_o.write(0);            break;	}}void keysched::generate_key(){	sc_biguint<384> K_var,W_var;	sc_uint<32> col_t;	sc_uint<24> zero;		zero=0;		col_t=col.read();	W_var=0;		next_state.write(state.read());	next_col.write(col.read());		next_ready_o.write(0);	next_key_reg.write(key_reg.read());	new_key_o.write(key_reg.read());	    sbox_decrypt_o.write(0);	sbox_access_o.write(0);	sbox_data_o.write(0);	K_var=last_key_i.read();    			switch(state.read()){	    //Substitute the bytes while rotating them		//Four accesses to SBox are needed		case 0:		  if(start_i.read()){				col_t=0;		    sbox_access_o.write(1);			sbox_data_o.write((sc_uint<8>)K_var.range(31,24));			next_state.write(1);		  }		  break;	   case 1:		  sbox_access_o.write(1);	      sbox_data_o.write((sc_uint<8>)K_var.range(23,16));	      col_t.range(7,0)=sbox_data_i.read();	      next_col.write(col_t);		  next_state.write(2);	      break;	   case 2:		  sbox_access_o.write(1);	      sbox_data_o.write((sc_uint<8>)K_var.range(15,8));	      col_t.range(31,24)=sbox_data_i.read();    	      next_col.write(col_t);		  next_state.write(3);	      break;	   case 3:		  sbox_access_o.write(1);	      sbox_data_o.write((sc_uint<8>)K_var.range(7,0));		      col_t.range(23,16)=sbox_data_i.read();	      next_col.write(col_t);	      next_state.write(4);	      break;	   case 4:		  sbox_access_o.write(1);		  col_t.range(15,8)=sbox_data_i.read();	      next_col.write(col_t);	   	  W_var.range(191,160)=col_t^K_var.range(191,160)^(rcon_o.read(),zero);			   	  W_var.range(159,128)=W_var.range(191,160)^K_var.range(159,128);			   	  W_var.range(127,96)=W_var.range(159,128)^K_var.range(127,96);	      W_var.range(95,64)=W_var.range(127,96)^K_var.range(95,64);	      W_var.range(63,32)=W_var.range(95,64)^K_var.range(63,32);	      W_var.range(31,0)=W_var.range(63,32)^K_var.range(31,0);          next_ready_o.write(1);          next_key_reg.write(W_var);	   	      next_state.write(0);		  break;              default:		  next_state.write(0); 	      break;   }     }	     void keysched::registers(){	if(!reset.read()){		state.write(0);		col.write(0);		key_reg.write(0);		ready_o.write(0);    }else{		state.write(next_state.read());			col.write(next_col.read());		key_reg.write(next_key_reg.read());		ready_o.write(next_ready_o.read());    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -