mirror of
https://github.com/rdolbeau/VexRiscvBPluginGenerator.git
synced 2025-04-18 18:44:42 -04:00
SM4 to finish things
This commit is contained in:
parent
b2b9087932
commit
62a1de3360
2 changed files with 317 additions and 0 deletions
3
Makefile
3
Makefile
|
@ -105,6 +105,9 @@ CryptoZknh.scala: gen_plugin data_sha.txt
|
|||
CryptoSM3.scala: gen_plugin data_sm3.txt
|
||||
./gen_plugin -n CryptoSM3 -i data_sm3.txt -I '*' >| $@
|
||||
|
||||
CryptoSM4.scala: gen_plugin data_sm4.txt
|
||||
./gen_plugin -n CryptoSM4 -i data_sm4.txt -I '*' >| $@
|
||||
|
||||
PDataProcess.scala: gen_plugin data_Zpn.txt
|
||||
./gen_plugin -n PDataProcess -i data_Zpn.txt -I Zpn >| $@
|
||||
|
||||
|
|
314
data_sm4.txt
Normal file
314
data_sm4.txt
Normal file
|
@ -0,0 +1,314 @@
|
|||
I SM4ED SM4ED --11000----------000000000110011 sm4 Zks
|
||||
I SM4KS SM4KS --11010----------000000000110011 sm4 Zks
|
||||
|
||||
S SM4ED "fun_sm4ed(input(SRC1), input(SRC2), input(INSTRUCTION)(31 downto 30))"
|
||||
S SM4KS "fun_sm4ks(input(SRC1), input(SRC2), input(INSTRUCTION)(31 downto 30))"
|
||||
|
||||
P """
|
||||
// massive MUX implementing SM4SBOX
|
||||
def fun_sm4sbox_raw(in:Bits) : Bits = {
|
||||
val x = in(7 downto 0)
|
||||
val r = (x).mux(
|
||||
B"8'x00" -> B"8'xD6",
|
||||
B"8'x01" -> B"8'x90",
|
||||
B"8'x02" -> B"8'xE9",
|
||||
B"8'x03" -> B"8'xFE",
|
||||
B"8'x04" -> B"8'xCC",
|
||||
B"8'x05" -> B"8'xE1",
|
||||
B"8'x06" -> B"8'x3D",
|
||||
B"8'x07" -> B"8'xB7",
|
||||
B"8'x08" -> B"8'x16",
|
||||
B"8'x09" -> B"8'xB6",
|
||||
B"8'x0a" -> B"8'x14",
|
||||
B"8'x0b" -> B"8'xC2",
|
||||
B"8'x0c" -> B"8'x28",
|
||||
B"8'x0d" -> B"8'xFB",
|
||||
B"8'x0e" -> B"8'x2C",
|
||||
B"8'x0f" -> B"8'x05",
|
||||
B"8'x10" -> B"8'x2B",
|
||||
B"8'x11" -> B"8'x67",
|
||||
B"8'x12" -> B"8'x9A",
|
||||
B"8'x13" -> B"8'x76",
|
||||
B"8'x14" -> B"8'x2A",
|
||||
B"8'x15" -> B"8'xBE",
|
||||
B"8'x16" -> B"8'x04",
|
||||
B"8'x17" -> B"8'xC3",
|
||||
B"8'x18" -> B"8'xAA",
|
||||
B"8'x19" -> B"8'x44",
|
||||
B"8'x1a" -> B"8'x13",
|
||||
B"8'x1b" -> B"8'x26",
|
||||
B"8'x1c" -> B"8'x49",
|
||||
B"8'x1d" -> B"8'x86",
|
||||
B"8'x1e" -> B"8'x06",
|
||||
B"8'x1f" -> B"8'x99",
|
||||
B"8'x20" -> B"8'x9C",
|
||||
B"8'x21" -> B"8'x42",
|
||||
B"8'x22" -> B"8'x50",
|
||||
B"8'x23" -> B"8'xF4",
|
||||
B"8'x24" -> B"8'x91",
|
||||
B"8'x25" -> B"8'xEF",
|
||||
B"8'x26" -> B"8'x98",
|
||||
B"8'x27" -> B"8'x7A",
|
||||
B"8'x28" -> B"8'x33",
|
||||
B"8'x29" -> B"8'x54",
|
||||
B"8'x2a" -> B"8'x0B",
|
||||
B"8'x2b" -> B"8'x43",
|
||||
B"8'x2c" -> B"8'xED",
|
||||
B"8'x2d" -> B"8'xCF",
|
||||
B"8'x2e" -> B"8'xAC",
|
||||
B"8'x2f" -> B"8'x62",
|
||||
B"8'x30" -> B"8'xE4",
|
||||
B"8'x31" -> B"8'xB3",
|
||||
B"8'x32" -> B"8'x1C",
|
||||
B"8'x33" -> B"8'xA9",
|
||||
B"8'x34" -> B"8'xC9",
|
||||
B"8'x35" -> B"8'x08",
|
||||
B"8'x36" -> B"8'xE8",
|
||||
B"8'x37" -> B"8'x95",
|
||||
B"8'x38" -> B"8'x80",
|
||||
B"8'x39" -> B"8'xDF",
|
||||
B"8'x3a" -> B"8'x94",
|
||||
B"8'x3b" -> B"8'xFA",
|
||||
B"8'x3c" -> B"8'x75",
|
||||
B"8'x3d" -> B"8'x8F",
|
||||
B"8'x3e" -> B"8'x3F",
|
||||
B"8'x3f" -> B"8'xA6",
|
||||
B"8'x40" -> B"8'x47",
|
||||
B"8'x41" -> B"8'x07",
|
||||
B"8'x42" -> B"8'xA7",
|
||||
B"8'x43" -> B"8'xFC",
|
||||
B"8'x44" -> B"8'xF3",
|
||||
B"8'x45" -> B"8'x73",
|
||||
B"8'x46" -> B"8'x17",
|
||||
B"8'x47" -> B"8'xBA",
|
||||
B"8'x48" -> B"8'x83",
|
||||
B"8'x49" -> B"8'x59",
|
||||
B"8'x4a" -> B"8'x3C",
|
||||
B"8'x4b" -> B"8'x19",
|
||||
B"8'x4c" -> B"8'xE6",
|
||||
B"8'x4d" -> B"8'x85",
|
||||
B"8'x4e" -> B"8'x4F",
|
||||
B"8'x4f" -> B"8'xA8",
|
||||
B"8'x50" -> B"8'x68",
|
||||
B"8'x51" -> B"8'x6B",
|
||||
B"8'x52" -> B"8'x81",
|
||||
B"8'x53" -> B"8'xB2",
|
||||
B"8'x54" -> B"8'x71",
|
||||
B"8'x55" -> B"8'x64",
|
||||
B"8'x56" -> B"8'xDA",
|
||||
B"8'x57" -> B"8'x8B",
|
||||
B"8'x58" -> B"8'xF8",
|
||||
B"8'x59" -> B"8'xEB",
|
||||
B"8'x5a" -> B"8'x0F",
|
||||
B"8'x5b" -> B"8'x4B",
|
||||
B"8'x5c" -> B"8'x70",
|
||||
B"8'x5d" -> B"8'x56",
|
||||
B"8'x5e" -> B"8'x9D",
|
||||
B"8'x5f" -> B"8'x35",
|
||||
B"8'x60" -> B"8'x1E",
|
||||
B"8'x61" -> B"8'x24",
|
||||
B"8'x62" -> B"8'x0E",
|
||||
B"8'x63" -> B"8'x5E",
|
||||
B"8'x64" -> B"8'x63",
|
||||
B"8'x65" -> B"8'x58",
|
||||
B"8'x66" -> B"8'xD1",
|
||||
B"8'x67" -> B"8'xA2",
|
||||
B"8'x68" -> B"8'x25",
|
||||
B"8'x69" -> B"8'x22",
|
||||
B"8'x6a" -> B"8'x7C",
|
||||
B"8'x6b" -> B"8'x3B",
|
||||
B"8'x6c" -> B"8'x01",
|
||||
B"8'x6d" -> B"8'x21",
|
||||
B"8'x6e" -> B"8'x78",
|
||||
B"8'x6f" -> B"8'x87",
|
||||
B"8'x70" -> B"8'xD4",
|
||||
B"8'x71" -> B"8'x00",
|
||||
B"8'x72" -> B"8'x46",
|
||||
B"8'x73" -> B"8'x57",
|
||||
B"8'x74" -> B"8'x9F",
|
||||
B"8'x75" -> B"8'xD3",
|
||||
B"8'x76" -> B"8'x27",
|
||||
B"8'x77" -> B"8'x52",
|
||||
B"8'x78" -> B"8'x4C",
|
||||
B"8'x79" -> B"8'x36",
|
||||
B"8'x7a" -> B"8'x02",
|
||||
B"8'x7b" -> B"8'xE7",
|
||||
B"8'x7c" -> B"8'xA0",
|
||||
B"8'x7d" -> B"8'xC4",
|
||||
B"8'x7e" -> B"8'xC8",
|
||||
B"8'x7f" -> B"8'x9E",
|
||||
B"8'x80" -> B"8'xEA",
|
||||
B"8'x81" -> B"8'xBF",
|
||||
B"8'x82" -> B"8'x8A",
|
||||
B"8'x83" -> B"8'xD2",
|
||||
B"8'x84" -> B"8'x40",
|
||||
B"8'x85" -> B"8'xC7",
|
||||
B"8'x86" -> B"8'x38",
|
||||
B"8'x87" -> B"8'xB5",
|
||||
B"8'x88" -> B"8'xA3",
|
||||
B"8'x89" -> B"8'xF7",
|
||||
B"8'x8a" -> B"8'xF2",
|
||||
B"8'x8b" -> B"8'xCE",
|
||||
B"8'x8c" -> B"8'xF9",
|
||||
B"8'x8d" -> B"8'x61",
|
||||
B"8'x8e" -> B"8'x15",
|
||||
B"8'x8f" -> B"8'xA1",
|
||||
B"8'x90" -> B"8'xE0",
|
||||
B"8'x91" -> B"8'xAE",
|
||||
B"8'x92" -> B"8'x5D",
|
||||
B"8'x93" -> B"8'xA4",
|
||||
B"8'x94" -> B"8'x9B",
|
||||
B"8'x95" -> B"8'x34",
|
||||
B"8'x96" -> B"8'x1A",
|
||||
B"8'x97" -> B"8'x55",
|
||||
B"8'x98" -> B"8'xAD",
|
||||
B"8'x99" -> B"8'x93",
|
||||
B"8'x9a" -> B"8'x32",
|
||||
B"8'x9b" -> B"8'x30",
|
||||
B"8'x9c" -> B"8'xF5",
|
||||
B"8'x9d" -> B"8'x8C",
|
||||
B"8'x9e" -> B"8'xB1",
|
||||
B"8'x9f" -> B"8'xE3",
|
||||
B"8'xa0" -> B"8'x1D",
|
||||
B"8'xa1" -> B"8'xF6",
|
||||
B"8'xa2" -> B"8'xE2",
|
||||
B"8'xa3" -> B"8'x2E",
|
||||
B"8'xa4" -> B"8'x82",
|
||||
B"8'xa5" -> B"8'x66",
|
||||
B"8'xa6" -> B"8'xCA",
|
||||
B"8'xa7" -> B"8'x60",
|
||||
B"8'xa8" -> B"8'xC0",
|
||||
B"8'xa9" -> B"8'x29",
|
||||
B"8'xaa" -> B"8'x23",
|
||||
B"8'xab" -> B"8'xAB",
|
||||
B"8'xac" -> B"8'x0D",
|
||||
B"8'xad" -> B"8'x53",
|
||||
B"8'xae" -> B"8'x4E",
|
||||
B"8'xaf" -> B"8'x6F",
|
||||
B"8'xb0" -> B"8'xD5",
|
||||
B"8'xb1" -> B"8'xDB",
|
||||
B"8'xb2" -> B"8'x37",
|
||||
B"8'xb3" -> B"8'x45",
|
||||
B"8'xb4" -> B"8'xDE",
|
||||
B"8'xb5" -> B"8'xFD",
|
||||
B"8'xb6" -> B"8'x8E",
|
||||
B"8'xb7" -> B"8'x2F",
|
||||
B"8'xb8" -> B"8'x03",
|
||||
B"8'xb9" -> B"8'xFF",
|
||||
B"8'xba" -> B"8'x6A",
|
||||
B"8'xbb" -> B"8'x72",
|
||||
B"8'xbc" -> B"8'x6D",
|
||||
B"8'xbd" -> B"8'x6C",
|
||||
B"8'xbe" -> B"8'x5B",
|
||||
B"8'xbf" -> B"8'x51",
|
||||
B"8'xc0" -> B"8'x8D",
|
||||
B"8'xc1" -> B"8'x1B",
|
||||
B"8'xc2" -> B"8'xAF",
|
||||
B"8'xc3" -> B"8'x92",
|
||||
B"8'xc4" -> B"8'xBB",
|
||||
B"8'xc5" -> B"8'xDD",
|
||||
B"8'xc6" -> B"8'xBC",
|
||||
B"8'xc7" -> B"8'x7F",
|
||||
B"8'xc8" -> B"8'x11",
|
||||
B"8'xc9" -> B"8'xD9",
|
||||
B"8'xca" -> B"8'x5C",
|
||||
B"8'xcb" -> B"8'x41",
|
||||
B"8'xcc" -> B"8'x1F",
|
||||
B"8'xcd" -> B"8'x10",
|
||||
B"8'xce" -> B"8'x5A",
|
||||
B"8'xcf" -> B"8'xD8",
|
||||
B"8'xd0" -> B"8'x0A",
|
||||
B"8'xd1" -> B"8'xC1",
|
||||
B"8'xd2" -> B"8'x31",
|
||||
B"8'xd3" -> B"8'x88",
|
||||
B"8'xd4" -> B"8'xA5",
|
||||
B"8'xd5" -> B"8'xCD",
|
||||
B"8'xd6" -> B"8'x7B",
|
||||
B"8'xd7" -> B"8'xBD",
|
||||
B"8'xd8" -> B"8'x2D",
|
||||
B"8'xd9" -> B"8'x74",
|
||||
B"8'xda" -> B"8'xD0",
|
||||
B"8'xdb" -> B"8'x12",
|
||||
B"8'xdc" -> B"8'xB8",
|
||||
B"8'xdd" -> B"8'xE5",
|
||||
B"8'xde" -> B"8'xB4",
|
||||
B"8'xdf" -> B"8'xB0",
|
||||
B"8'xe0" -> B"8'x89",
|
||||
B"8'xe1" -> B"8'x69",
|
||||
B"8'xe2" -> B"8'x97",
|
||||
B"8'xe3" -> B"8'x4A",
|
||||
B"8'xe4" -> B"8'x0C",
|
||||
B"8'xe5" -> B"8'x96",
|
||||
B"8'xe6" -> B"8'x77",
|
||||
B"8'xe7" -> B"8'x7E",
|
||||
B"8'xe8" -> B"8'x65",
|
||||
B"8'xe9" -> B"8'xB9",
|
||||
B"8'xea" -> B"8'xF1",
|
||||
B"8'xeb" -> B"8'x09",
|
||||
B"8'xec" -> B"8'xC5",
|
||||
B"8'xed" -> B"8'x6E",
|
||||
B"8'xee" -> B"8'xC6",
|
||||
B"8'xef" -> B"8'x84",
|
||||
B"8'xf0" -> B"8'x18",
|
||||
B"8'xf1" -> B"8'xF0",
|
||||
B"8'xf2" -> B"8'x7D",
|
||||
B"8'xf3" -> B"8'xEC",
|
||||
B"8'xf4" -> B"8'x3A",
|
||||
B"8'xf5" -> B"8'xDC",
|
||||
B"8'xf6" -> B"8'x4D",
|
||||
B"8'xf7" -> B"8'x20",
|
||||
B"8'xf8" -> B"8'x79",
|
||||
B"8'xf9" -> B"8'xEE",
|
||||
B"8'xfa" -> B"8'x5F",
|
||||
B"8'xfb" -> B"8'x3E",
|
||||
B"8'xfc" -> B"8'xD7",
|
||||
B"8'xfd" -> B"8'xCB",
|
||||
B"8'xfe" -> B"8'x39",
|
||||
B"8'xff" -> B"8'x48"
|
||||
)
|
||||
r // return value
|
||||
}
|
||||
def fun_sm4ed(rs1:Bits, rs2:Bits, sel: Bits) : Bits = {
|
||||
val idx = (sel).mux(
|
||||
B"2'b00" -> rs2( 7 downto 0),
|
||||
B"2'b01" -> rs2(15 downto 8),
|
||||
B"2'b10" -> rs2(23 downto 16),
|
||||
B"2'b11" -> rs2(31 downto 24)
|
||||
)
|
||||
val x = fun_sm4sbox_raw(idx)
|
||||
val y = x.resize(32) ^
|
||||
(x << 8).resize(32) ^
|
||||
(x << 2).resize(32) ^
|
||||
(x << 18).resize(32) ^
|
||||
((x & B"8'x3F") << 26).resize(32) ^
|
||||
((x & B"8'xC0") << 10).resize(32)
|
||||
val r = (sel).mux(
|
||||
B"2'b00" -> y(31 downto 0),
|
||||
B"2'b01" -> y(23 downto 0) ## y(31 downto 24),
|
||||
B"2'b10" -> y(15 downto 0) ## y(31 downto 16),
|
||||
B"2'b11" -> y( 7 downto 0) ## y(31 downto 8)
|
||||
)
|
||||
rs1 ^ r // return value
|
||||
}
|
||||
def fun_sm4ks(rs1:Bits, rs2:Bits, sel: Bits) : Bits = {
|
||||
val idx = (sel).mux(
|
||||
B"2'b00" -> rs2( 7 downto 0),
|
||||
B"2'b01" -> rs2(15 downto 8),
|
||||
B"2'b10" -> rs2(23 downto 16),
|
||||
B"2'b11" -> rs2(31 downto 24)
|
||||
)
|
||||
val x = fun_sm4sbox_raw(idx)
|
||||
val y = x.resize(32) ^
|
||||
((x & B"8'x07" ) << 29).resize(32) ^
|
||||
((x & B"8'xFE" ) << 7).resize(32) ^
|
||||
((x & B"8'x01" ) << 23).resize(32) ^
|
||||
((x & B"8'xF8" ) << 13).resize(32)
|
||||
val r = (sel).mux(
|
||||
B"2'b00" -> y(31 downto 0),
|
||||
B"2'b01" -> y(23 downto 0) ## y(31 downto 24),
|
||||
B"2'b10" -> y(15 downto 0) ## y(31 downto 16),
|
||||
B"2'b11" -> y( 7 downto 0) ## y(31 downto 8)
|
||||
)
|
||||
rs1 ^ r // return value
|
||||
}
|
||||
"""
|
Loading…
Add table
Reference in a new issue