📄 creatkey.txt
字号:
module creatkey(sysclk,en,reset,mode,key,k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,k11,k12,k13,k14,k15,k16);
/*when everything is ready,the result appears on clock later*/
input en,reset,mode,sysclk;
input[64:1] key;
output[48:1] k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,k11,k12,k13,k14,k15,k16;
reg[4:1] st;
reg [48:1] k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,k11,k12,k13,k14,k15,k16;
wire[56:1] k;
reg[56:1] cd,cd0;
pc1 select(key,cd0);
assign k={cd[32],cd[29],cd[36],cd[30],cd[42],cd[46],//pc2
cd[53],cd[34],cd[56],cd[39],cd[49],cd[44],
cd[48],cd[33],cd[45],cd[51],cd[40],cd[30],
cd[55],cd[47],cd[37],cd[31],cd[52],cd[41],
cd[2],cd[13],cd[20],cd[27],cd[7],cd[16],
cd[8],cd[26],cd[4],cd[12],cd[19],cd[23],
cd[10],cd[21],cd[6],cd[15],cd[28],cd[3],
cd[5],cd[1],cd[24],cd[11],cd[17],cd[14]};
always@(posedge sysclk or posedge reset)
begin
if(reset)
begin
st<=4'b0000;
end
else if(en)
begin
st<=st+1'b1;
end
end
always@(posedge sysclk or posedge reset)
begin
if(reset)
begin
k1<=48'd0;
k2<=48'd0;
k3<=48'd0;
k4<=48'd0;
k5<=48'd0;
k6<=48'd0;
k7<=48'd0;
k8<=48'd0;
k9<=48'd0;
k10<=48'd0;
k11<=48'd0;
k12<=48'd0;
k13<=48'd0;
k14<=48'd0;
k15<=48'd0;
k16<=48'd0;
end
else if(en)
begin
case(mode) /*加密模式**/
1'b0:
begin
case(st)
4'd0:
begin
cd<={cd0[55:29],cd0[56],cd0[27:1],cd0[28]};
k16<=k;
end
4'd1:
begin
cd<={cd[55:29],cd[56],cd[27:1],cd[28]};
k1<=k;
end
4'd2:
begin
cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
k2<=k;
end
4'd3:
begin
cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
k3<=k;
end
4'd4:
begin
cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
k4<=k;
end
4'd5:
begin
cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
k5<=k;
end
4'd6:
begin
cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
k6<=k;
end
4'd7:
begin
cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
k7<=k;
end
4'd8:
begin
cd<={cd[55:29],cd[56],cd[27:1],cd[28]};
k8<=k;
end
4'd9:
begin
cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
k9<=k;
end
4'd10:
begin
cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
k10<=k;
end
4'd11:
begin
cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
k11<=k;
end
4'd12:
begin
cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
k12<=k;
end
4'd13:
begin
cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
k13<=k;
end
4'd14:
begin
cd<={cd[54:29],cd[56:55],cd[26:1],cd[28:27]};
k14<=k;
end
4'd15:
begin
cd<={cd[55:29],cd[56],cd[27:1],cd[28]};
k15<=k;
end
endcase
end
1'b1: /*解密哪J?/
begin
case(st)
4'd0:
begin
cd<=cd0;
k16<=k;
end
4'd1:
begin
cd<={cd[29],cd[56:30],cd[1],cd[28:2]};
k1<=k;
end
4'd2:
begin
cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
k2<=k;
end
4'd3:
begin
cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
k3<=k;
end
4'd4:
begin
cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
k4<=k;
end
4'd5:
begin
cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
k5<=k;
end
4'd6:
begin
cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
k6<=k;
end
4'd7:
begin
cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
k7<=k;
end
4'd8:
begin
cd<={cd[29],cd[56:30],cd[1],cd[28:2]};
k8<=k;
end
4'd9:
begin
cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
k9<=k;
end
4'd10:
begin
cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
k10<=k;
end
4'd11:
begin
cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
k11<=k;
end
4'd12:
begin
cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
k12<=k;
end
4'd13:
begin
cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
k13<=k;
end
4'd14:
begin
cd<={cd[30:29],cd[56:31],cd[2:1],cd[28:3]};
k14<=k;
end
4'd15:
begin
cd<={cd[29],cd[56:30],cd[1],cd[28:2]};
k15<=k;
end
endcase
end
endcase
end
end
endmodule
module pc1(in,out);
input[64:1] in;
output[56:1] out;
assign out={in[4],in[12],in[20],in[28],in[5],in[13],in[21],
in[29],in[37],in[45],in[53],in[61],in[6],in[14],
in[22],in[30],in[38],in[46],in[54],in[62],in[7],
in[15],in[23],in[31],in[39],in[47],in[55],in[63],
in[36],in[44],in[52],in[60],in[3],in[11],in[19],
in[27],in[35],in[43],in[51],in[59],in[2],in[10],
in[18],in[26],in[34],in[42],in[50],in[58],in[1],
in[9],in[17],in[25],in[33],in[41],in[49],in[57]};
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -