4 AES inst -> just 1
This commit is contained in:
@@ -169,19 +169,19 @@ static const uint32_t program_ec25519[134] = {0x00640840, 0x00680800, 0x006c0600
|
||||
|
||||
static const uint32_t program_gcm[20] = {0x0010100d, 0x0094100d, 0x0118100d, 0x019c100d, 0x00186143, 0x00160191, 0x00186811, 0x001c61c3, 0x00105103, 0x008441ce, 0x0082010e, 0x00080010, 0x008e008f, 0x0112008f, 0x0396008f, 0x00083083, 0x00105103, 0x00084083, 0x00001083, 0x0000000a };
|
||||
|
||||
static const uint32_t program_aes[58] = {0x0001f003, 0x0005e012, 0x00841012, 0x01041012, 0x01841012, 0x0001d052, 0x00800052, 0x01000052, 0x01800052, 0x0005c012, 0x00841012, 0x01041012, 0x01841012, 0x0001b052, 0x00800052, 0x01000052, 0x01800052, 0x0005a012, 0x00841012, 0x01041012, 0x01841012, 0x00019052, 0x00800052, 0x01000052, 0x01800052, 0x00058012, 0x00841012, 0x01041012, 0x01841012, 0x00017052, 0x00800052, 0x01000052, 0x01800052, 0x00056012, 0x00841012, 0x01041012, 0x01841012, 0x00015052, 0x00800052, 0x01000052, 0x01800052, 0x00054012, 0x00841012, 0x01041012, 0x01841012, 0x00013052, 0x00800052, 0x01000052, 0x01800052, 0x00052012, 0x00841012, 0x01041012, 0x01841012, 0x02011052, 0x02800052, 0x03000052, 0x03800052, 0x0000000a };
|
||||
static const uint32_t program_aes[16] = {0x0001f003,0x0005e012,0x0001d052,0x0005c012,0x0001b052,0x0005a012,0x00019052,0x00058012,0x00017052,0x00056012,0x00015052,0x00054012,0x00013052,0x00052012,0x00811052,0x0000000a };
|
||||
|
||||
static const uint32_t program_gcm_pfx[72] = {0x01400411, 0x00080840, 0x00040800, 0x0001f043, 0x0005e012, 0x00841012, 0x01041012, 0x01841012, 0x0001d052, 0x00800052, 0x01000052, 0x01800052, 0x0005c012, 0x00841012, 0x01041012, 0x01841012, 0x0001b052, 0x00800052, 0x01000052, 0x01800052, 0x0005a012, 0x00841012, 0x01041012, 0x01841012, 0x00019052, 0x00800052, 0x01000052, 0x01800052, 0x00058012, 0x00841012, 0x01041012, 0x01841012, 0x00017052, 0x00800052, 0x01000052, 0x01800052, 0x00056012, 0x00841012, 0x01041012, 0x01841012, 0x00015052, 0x00800052, 0x01000052, 0x01800052, 0x00054012, 0x00841012, 0x01041012, 0x01841012, 0x00013052, 0x00800052, 0x01000052, 0x01800052, 0x00052012, 0x00841012, 0x01041012, 0x01841012, 0x02011052, 0x02800052, 0x03000052, 0x03800052, 0x03800089, 0x003c0000, 0x01400411, 0x0042b405, 0x01400411, 0x00080800, 0x00040400, 0xdf800809, 0x00380000, 0x01bc03d1, 0x003cf3d1, 0x00340800 };
|
||||
static const uint32_t program_gcm_pfx[30] = {0x01400411,0x00080840,0x00040800,0x0001f043,0x0005e012,0x0001d052,0x0005c012,0x0001b052,0x0005a012,0x00019052,0x00058012,0x00017052,0x00056012,0x00015052,0x00054012,0x00013052,0x00052012,0x00811052,0x03800089,0x003c0000,0x01400411,0x0042b405,0x01400411,0x00080800,0x00040400,0xf4800809,0x00380000,0x01bc03d1,0x003cf3d1,0x00340800 };
|
||||
|
||||
static const uint32_t program_gcm_ad[29] = {0x0d800309, 0x000000d3, 0x01800011, 0x00000011, 0x0000d003, 0x000ec0c5, 0x0032d306, 0x0010f00d, 0x0094f00d, 0x0118f00d, 0x019cf00d, 0x00186143, 0x00160191, 0x00186811, 0x001c61c3, 0x00105103, 0x008441ce, 0x0082010e, 0x00080010, 0x009a008f, 0x0112008f, 0x0396008f, 0x00086083, 0x00105103, 0x00084083, 0x00341083, 0x00800309, 0xf2800809, 0x0000000a };
|
||||
static const uint32_t program_gcm_ad[29] = {0x0d800309,0x000000d3,0x01800011,0x00000011,0x0000d003,0x000ec0c5,0x0032d306,0x0010f00d,0x0094f00d,0x0118f00d,0x019cf00d,0x00186143,0x00160191,0x00186811,0x001c61c3,0x00105103,0x008441ce,0x0082010e,0x00080010,0x009a008f,0x0112008f,0x0396008f,0x00086083,0x00105103,0x00084083,0x00341083,0x00800309,0xf2800809,0x0000000a };
|
||||
|
||||
static const uint32_t program_gcm_aes[92] = {0x2d000309, 0x01400411, 0x0042b405, 0x01400411, 0x0001f403, 0x0005e012, 0x00841012, 0x01041012, 0x01841012, 0x0001d052, 0x00800052, 0x01000052, 0x01800052, 0x0005c012, 0x00841012, 0x01041012, 0x01841012, 0x0001b052, 0x00800052, 0x01000052, 0x01800052, 0x0005a012, 0x00841012, 0x01041012, 0x01841012, 0x00019052, 0x00800052, 0x01000052, 0x01800052, 0x00058012, 0x00841012, 0x01041012, 0x01841012, 0x00017052, 0x00800052, 0x01000052, 0x01800052, 0x00056012, 0x00841012, 0x01041012, 0x01841012, 0x00015052, 0x00800052, 0x01000052, 0x01800052, 0x00054012, 0x00841012, 0x01041012, 0x01841012, 0x00013052, 0x00800052, 0x01000052, 0x01800052, 0x00052012, 0x00841012, 0x01041012, 0x01841012, 0x02011052, 0x02800052, 0x03000052, 0x03840052, 0x000000d3, 0x00001003, 0x00ac02d3, 0x01800011, 0x00000011, 0x0000d003, 0x000ec0c5, 0x002ec2c5, 0x0032d306, 0x0010f00d, 0x0094f00d, 0x0118f00d, 0x019cf00d, 0x00186143, 0x00160191, 0x00186811, 0x001c61c3, 0x00105103, 0x008441ce, 0x0082010e, 0x00080010, 0x009a008f, 0x0112008f, 0x0396008f, 0x00086083, 0x00105103, 0x00084083, 0x00341083, 0x00800309, 0xd3000809, 0x0000000a };
|
||||
static const uint32_t program_gcm_aes[50] = {0x18000309,0x01400411,0x0042b405,0x01400411,0x0001f403,0x0005e012,0x0001d052,0x0005c012,0x0001b052,0x0005a012,0x00019052,0x00058012,0x00017052,0x00056012,0x00015052,0x00054012,0x00013052,0x00052012,0x00851052,0x000000d3,0x00001003,0x00ac02d3,0x01800011,0x00000011,0x0000d003,0x000ec0c5,0x002ec2c5,0x0032d306,0x0010f00d,0x0094f00d,0x0118f00d,0x019cf00d,0x00186143,0x00160191,0x00186811,0x001c61c3,0x00105103,0x008441ce,0x0082010e,0x00080010,0x009a008f,0x0112008f,0x0396008f,0x00086083,0x00105103,0x00084083,0x00341083,0x00800309,0xe8000809,0x0000000a };
|
||||
|
||||
static const uint32_t program_gcm_finish[113] = {0x2b000309, 0x01400411, 0x0042b405, 0x01400411, 0x0001f403, 0x0005e012, 0x00841012, 0x01041012, 0x01841012, 0x0001d052, 0x00800052, 0x01000052, 0x01800052, 0x0005c012, 0x00841012, 0x01041012, 0x01841012, 0x0001b052, 0x00800052, 0x01000052, 0x01800052, 0x0005a012, 0x00841012, 0x01041012, 0x01841012, 0x00019052, 0x00800052, 0x01000052, 0x01800052, 0x00058012, 0x00841012, 0x01041012, 0x01841012, 0x00017052, 0x00800052, 0x01000052, 0x01800052, 0x00056012, 0x00841012, 0x01041012, 0x01841012, 0x00015052, 0x00800052, 0x01000052, 0x01800052, 0x00054012, 0x00841012, 0x01041012, 0x01841012, 0x00013052, 0x00800052, 0x01000052, 0x01800052, 0x00052012, 0x00841012, 0x01041012, 0x01841012, 0x02011052, 0x02800052, 0x03000052, 0x03840052, 0x0004a054, 0x000000d3, 0x00001003, 0x00ac02d3, 0x01800011, 0x00000011, 0x0000d003, 0x0010f00d, 0x0094f00d, 0x0118f00d, 0x019cf00d, 0x00186143, 0x00160191, 0x00186811, 0x001c61c3, 0x00105103, 0x008441ce, 0x0082010e, 0x00080010, 0x009a008f, 0x0112008f, 0x0396008f, 0x00086083, 0x00105103, 0x00084083, 0x00341083, 0x01a40251, 0x00249251, 0x0000d243, 0x0010f00d, 0x0094f00d, 0x0118f00d, 0x019cf00d, 0x00186143, 0x00160191, 0x00186811, 0x001c61c3, 0x00105103, 0x008441ce, 0x0082010e, 0x00080010, 0x009a008f, 0x0112008f, 0x0396008f, 0x00086083, 0x00105103, 0x00084083, 0x00341083, 0x01b40351, 0x0034d351, 0x0020e343, 0x0000000a };
|
||||
static const uint32_t program_gcm_finish[71] = {0x16000309,0x01400411,0x0042b405,0x01400411,0x0001f403,0x0005e012,0x0001d052,0x0005c012,0x0001b052,0x0005a012,0x00019052,0x00058012,0x00017052,0x00056012,0x00015052,0x00054012,0x00013052,0x00052012,0x00851052,0x0004a054,0x000000d3,0x00001003,0x00ac02d3,0x01800011,0x00000011,0x0000d003,0x0010f00d,0x0094f00d,0x0118f00d,0x019cf00d,0x00186143,0x00160191,0x00186811,0x001c61c3,0x00105103,0x008441ce,0x0082010e,0x00080010,0x009a008f,0x0112008f,0x0396008f,0x00086083,0x00105103,0x00084083,0x00341083,0x01a40251,0x00249251,0x0000d243,0x0010f00d,0x0094f00d,0x0118f00d,0x019cf00d,0x00186143,0x00160191,0x00186811,0x001c61c3,0x00105103,0x008441ce,0x0082010e,0x00080010,0x009a008f,0x0112008f,0x0396008f,0x00086083,0x00105103,0x00084083,0x00341083,0x01b40351,0x0034d351,0x0020e343,0x0000000a };
|
||||
|
||||
// second and third are for testing and shall be removed
|
||||
static const uint32_t* programs[8] = { program_ec25519, program_gcm, program_aes, program_gcm_pfx, program_gcm_ad, program_gcm_aes, program_gcm_finish, NULL };
|
||||
static const uint32_t program_len[8] = { 134, 20, 58, 72, 29, 92, 113, 0 };
|
||||
static const uint32_t program_len[8] = { 134, 20, 16, 30, 29, 50, 71, 0 };
|
||||
static uint32_t program_offset[8];
|
||||
|
||||
/*
|
||||
|
||||
@@ -30,7 +30,7 @@ opcodes = { # mnemonic : [bit coding, docstring]
|
||||
"GCM_SHRMI": [15, "Shift A right by imm, insert B LSB as dest MSB; reg-reg or reg-imm; per 128-bits block"], #
|
||||
"GCM_CMPD": [16, "Compute D:X0 from X1:X0; reg ; per 128-bits block"], # specific
|
||||
"GCM_SWAP64": [17, "Swap doubleword (64 bits) ; reg-reg or imm-reg or reg-imm; per 128-bits block ; imm != 0 -> BYTEREV*"], #
|
||||
"AESESMI" : [18, "AES ; reg-reg ; per 128-bits block; imm[0:2] indicates sub-round (as in rv32's aes32esmi) ; imm[2] is 1 for aesesi (shared opcode)" ],
|
||||
"AESESMI" : [18, "AES ; reg-reg ; per 128-bits block; imm[0] is 1 for aesesi (shared opcode)" ],
|
||||
"MEM" : [19, "MEM ; imm[0] == 0 for LOAD, imm[0] == 1 for STORE (beware, store copy the address in the output reg)" ],
|
||||
"AND" : [20, "Wd $\gets$ Ra & Rb // bitwise AND"],
|
||||
"MAX" : [21, "Maximum opcode number (for bounds checking)"],
|
||||
@@ -1579,7 +1579,6 @@ class ExecAES(ExecUnit, AutoDoc):
|
||||
assert(width == 256) # fixme
|
||||
nlane = width // 128
|
||||
aes_buf = Signal(nlane * 128) ## width must be a multiple of 128...
|
||||
lanec = Signal(log2_int(nlane, False))
|
||||
assert(nlane == 2) ## fixme
|
||||
|
||||
aes_in = Array(Signal(8) for a in range(4))
|
||||
@@ -1595,123 +1594,157 @@ class ExecAES(ExecUnit, AutoDoc):
|
||||
self.submodules.seq = seq = ClockDomainsRenamer("eng_clk")(FSM(reset_state="IDLE"))
|
||||
seq.act("IDLE",
|
||||
If(self.start,
|
||||
NextValue(lanec, 0),
|
||||
Case(self.instruction.immediate[0:2], {
|
||||
0x0: [ NextValue(aes_in[0], self.a[ 0: 8]), NextValue(aes_in[1], self.a[ 32: 40]), NextValue(aes_in[2], self.a[ 64: 72]), NextValue(aes_in[3], self.a[ 96:104]) ],
|
||||
0x1: [ NextValue(aes_in[3], self.a[ 8: 16]), NextValue(aes_in[0], self.a[ 40: 48]), NextValue(aes_in[1], self.a[ 72: 80]), NextValue(aes_in[2], self.a[104:112]) ],
|
||||
0x2: [ NextValue(aes_in[2], self.a[ 16: 24]), NextValue(aes_in[3], self.a[ 48: 56]), NextValue(aes_in[0], self.a[ 80: 88]), NextValue(aes_in[1], self.a[112:120]) ],
|
||||
0x3: [ NextValue(aes_in[1], self.a[ 24: 32]), NextValue(aes_in[2], self.a[ 56: 64]), NextValue(aes_in[3], self.a[ 88: 96]), NextValue(aes_in[0], self.a[120:128]) ],
|
||||
}),
|
||||
NextState("NEXT")))
|
||||
seq.act("NEXT",
|
||||
Case(self.instruction.immediate[0:2], {
|
||||
0x0: [ NextValue(aes_in[0], self.a[128:136]), NextValue(aes_in[1], self.a[160:168]), NextValue(aes_in[2], self.a[192:200]), NextValue(aes_in[3], self.a[224:232]) ],
|
||||
0x1: [ NextValue(aes_in[3], self.a[136:144]), NextValue(aes_in[0], self.a[168:176]), NextValue(aes_in[1], self.a[200:208]), NextValue(aes_in[2], self.a[232:240]) ],
|
||||
0x2: [ NextValue(aes_in[2], self.a[144:152]), NextValue(aes_in[3], self.a[176:184]), NextValue(aes_in[0], self.a[208:216]), NextValue(aes_in[1], self.a[240:248]) ],
|
||||
0x3: [ NextValue(aes_in[1], self.a[152:160]), NextValue(aes_in[2], self.a[184:192]), NextValue(aes_in[3], self.a[216:224]), NextValue(aes_in[0], self.a[248:256]) ],
|
||||
# put the first byte in the lookup tables (LANE1)
|
||||
# [ NextValue(aes_in[i], self.a[32*i:32*i+8]) for i in range(0, 4) ],
|
||||
NextValue(aes_in[0], self.a[ 0: 8]),
|
||||
NextValue(aes_in[1], self.a[ 32: 40]),
|
||||
NextValue(aes_in[2], self.a[ 64: 72]),
|
||||
NextValue(aes_in[3], self.a[ 96:104]),
|
||||
NextState("LANE2_1")))
|
||||
seq.act("LANE2_1",
|
||||
# put the first byte in the lookup tables (LANE2)
|
||||
NextValue(aes_in[0], self.a[128:136]),
|
||||
NextValue(aes_in[1], self.a[160:168]),
|
||||
NextValue(aes_in[2], self.a[192:200]),
|
||||
NextValue(aes_in[3], self.a[224:232]),
|
||||
NextState("LANE1_2"))
|
||||
seq.act("LANE1_2",
|
||||
# store the xor'ed result for LANE1, byte 1 in aes_buf
|
||||
Case(self.instruction.immediate[0:1], {
|
||||
0:[ NextValue(aes_buf[ 0: 32], self.b[ 0: 32] ^ Cat(aes_out[0][ 0:16], aes_out[0][ 8:24])),
|
||||
NextValue(aes_buf[ 32: 64], self.b[ 32: 64] ^ Cat(aes_out[1][ 0:16], aes_out[1][ 8:24])),
|
||||
NextValue(aes_buf[ 64: 96], self.b[ 64: 96] ^ Cat(aes_out[2][ 0:16], aes_out[2][ 8:24])),
|
||||
NextValue(aes_buf[ 96:128], self.b[ 96:128] ^ Cat(aes_out[3][ 0:16], aes_out[3][ 8:24]))],
|
||||
1:[ NextValue(aes_buf[ 0: 32], self.b[ 0: 32] ^ Cat(aes_out[0][ 8:16], Signal(24, reset = 0))),
|
||||
NextValue(aes_buf[ 32: 64], self.b[ 32: 64] ^ Cat(aes_out[1][ 8:16], Signal(24, reset = 0))),
|
||||
NextValue(aes_buf[ 64: 96], self.b[ 64: 96] ^ Cat(aes_out[2][ 8:16], Signal(24, reset = 0))),
|
||||
NextValue(aes_buf[ 96:128], self.b[ 96:128] ^ Cat(aes_out[3][ 8:16], Signal(24, reset = 0)))],
|
||||
}),
|
||||
NextState("WRITE"))
|
||||
seq.act("WRITE",
|
||||
Case(lanec, {
|
||||
0: [ Case(self.instruction.immediate[2:3], {
|
||||
0: Case(self.instruction.immediate[0:2], {
|
||||
0x0: [ NextValue(aes_buf[0:128], Cat(aes_out[0][ 0:16], aes_out[0][ 8:24],
|
||||
aes_out[1][ 0:16], aes_out[1][ 8:24],
|
||||
aes_out[2][ 0:16], aes_out[2][ 8:24],
|
||||
aes_out[3][ 0:16], aes_out[3][ 8:24])),
|
||||
],
|
||||
0x1: [ NextValue(aes_buf[0:128], Cat(aes_out[0][16:24], aes_out[0][ 0:16], aes_out[0][ 8:16],
|
||||
aes_out[1][16:24], aes_out[1][ 0:16], aes_out[1][ 8:16],
|
||||
aes_out[2][16:24], aes_out[2][ 0:16], aes_out[2][ 8:16],
|
||||
aes_out[3][16:24], aes_out[3][ 0:16], aes_out[3][ 8:16])),
|
||||
],
|
||||
0x2: [ NextValue(aes_buf[0:128], Cat(aes_out[0][ 8:24], aes_out[0][ 0:16],
|
||||
aes_out[1][ 8:24], aes_out[1][ 0:16],
|
||||
aes_out[2][ 8:24], aes_out[2][ 0:16],
|
||||
aes_out[3][ 8:24], aes_out[3][ 0:16])),
|
||||
],
|
||||
0x3: [ NextValue(aes_buf[0:128], Cat(aes_out[0][ 8:16], aes_out[0][ 8:24], aes_out[0][ 0: 8],
|
||||
aes_out[1][ 8:16], aes_out[1][ 8:24], aes_out[1][ 0: 8],
|
||||
aes_out[2][ 8:16], aes_out[2][ 8:24], aes_out[2][ 0: 8],
|
||||
aes_out[3][ 8:16], aes_out[3][ 8:24], aes_out[3][ 0: 8])),
|
||||
],
|
||||
}),
|
||||
1: Case(self.instruction.immediate[0:2], {
|
||||
0x0: [ NextValue(aes_buf[0:128], Cat(aes_out[0][ 8:16], Signal(24, reset = 0),
|
||||
aes_out[1][ 8:16], Signal(24, reset = 0),
|
||||
aes_out[2][ 8:16], Signal(24, reset = 0),
|
||||
aes_out[3][ 8:16], Signal(24, reset = 0))),
|
||||
],
|
||||
0x1: [ NextValue(aes_buf[0:128], Cat(Signal(8, reset = 0), aes_out[0][ 8:16], Signal(16, reset = 0),
|
||||
Signal(8, reset = 0), aes_out[1][ 8:16], Signal(16, reset = 0),
|
||||
Signal(8, reset = 0), aes_out[2][ 8:16], Signal(16, reset = 0),
|
||||
Signal(8, reset = 0), aes_out[3][ 8:16], Signal(16, reset = 0))),
|
||||
],
|
||||
0x2: [ NextValue(aes_buf[0:128], Cat(Signal(16, reset = 0), aes_out[0][ 8:16], Signal(8, reset = 0),
|
||||
Signal(16, reset = 0), aes_out[1][ 8:16], Signal(8, reset = 0),
|
||||
Signal(16, reset = 0), aes_out[2][ 8:16], Signal(8, reset = 0),
|
||||
Signal(16, reset = 0), aes_out[3][ 8:16], Signal(8, reset = 0))),
|
||||
],
|
||||
0x3: [ NextValue(aes_buf[0:128], Cat(Signal(24, reset = 0), aes_out[0][ 8:16],
|
||||
Signal(24, reset = 0), aes_out[1][ 8:16],
|
||||
Signal(24, reset = 0), aes_out[2][ 8:16],
|
||||
Signal(24, reset = 0), aes_out[3][ 8:16])),
|
||||
],
|
||||
}),
|
||||
}),
|
||||
NextValue(lanec, 1)],
|
||||
1: [ Case(self.instruction.immediate[2:3], {
|
||||
0: Case(self.instruction.immediate[0:2], {
|
||||
0x0: [ NextValue(aes_buf[128:256], Cat(aes_out[0][ 0:16], aes_out[0][ 8:24],
|
||||
aes_out[1][ 0:16], aes_out[1][ 8:24],
|
||||
aes_out[2][ 0:16], aes_out[2][ 8:24],
|
||||
aes_out[3][ 0:16], aes_out[3][ 8:24])),
|
||||
],
|
||||
0x1: [ NextValue(aes_buf[128:256], Cat(aes_out[0][16:24], aes_out[0][ 0:16], aes_out[0][ 8:16],
|
||||
aes_out[1][16:24], aes_out[1][ 0:16], aes_out[1][ 8:16],
|
||||
aes_out[2][16:24], aes_out[2][ 0:16], aes_out[2][ 8:16],
|
||||
aes_out[3][16:24], aes_out[3][ 0:16], aes_out[3][ 8:16])),
|
||||
],
|
||||
0x2: [ NextValue(aes_buf[128:256], Cat(aes_out[0][ 8:24], aes_out[0][ 0:16],
|
||||
aes_out[1][ 8:24], aes_out[1][ 0:16],
|
||||
aes_out[2][ 8:24], aes_out[2][ 0:16],
|
||||
aes_out[3][ 8:24], aes_out[3][ 0:16])),
|
||||
],
|
||||
0x3: [ NextValue(aes_buf[128:256], Cat(aes_out[0][ 8:16], aes_out[0][ 8:24], aes_out[0][ 0: 8],
|
||||
aes_out[1][ 8:16], aes_out[1][ 8:24], aes_out[1][ 0: 8],
|
||||
aes_out[2][ 8:16], aes_out[2][ 8:24], aes_out[2][ 0: 8],
|
||||
aes_out[3][ 8:16], aes_out[3][ 8:24], aes_out[3][ 0: 8])),
|
||||
],
|
||||
}),
|
||||
1: Case(self.instruction.immediate[0:2], {
|
||||
0x0: [ NextValue(aes_buf[128:256], Cat(aes_out[0][ 8:16], Signal(24, reset = 0),
|
||||
aes_out[1][ 8:16], Signal(24, reset = 0),
|
||||
aes_out[2][ 8:16], Signal(24, reset = 0),
|
||||
aes_out[3][ 8:16], Signal(24, reset = 0))),
|
||||
],
|
||||
0x1: [ NextValue(aes_buf[128:256], Cat(Signal(8, reset = 0), aes_out[0][ 8:16], Signal(16, reset = 0),
|
||||
Signal(8, reset = 0), aes_out[1][ 8:16], Signal(16, reset = 0),
|
||||
Signal(8, reset = 0), aes_out[2][ 8:16], Signal(16, reset = 0),
|
||||
Signal(8, reset = 0), aes_out[3][ 8:16], Signal(16, reset = 0))),
|
||||
],
|
||||
0x2: [ NextValue(aes_buf[128:256], Cat(Signal(16, reset = 0), aes_out[0][ 8:16], Signal(8, reset = 0),
|
||||
Signal(16, reset = 0), aes_out[1][ 8:16], Signal(8, reset = 0),
|
||||
Signal(16, reset = 0), aes_out[2][ 8:16], Signal(8, reset = 0),
|
||||
Signal(16, reset = 0), aes_out[3][ 8:16], Signal(8, reset = 0))),
|
||||
],
|
||||
0x3: [ NextValue(aes_buf[128:256], Cat(Signal(24, reset = 0), aes_out[0][ 8:16],
|
||||
Signal(24, reset = 0), aes_out[1][ 8:16],
|
||||
Signal(24, reset = 0), aes_out[2][ 8:16],
|
||||
Signal(24, reset = 0), aes_out[3][ 8:16])),
|
||||
],
|
||||
}),
|
||||
}),
|
||||
NextState("OUT")
|
||||
],
|
||||
}))
|
||||
# put the second byte in the lookup tables (LANE1)
|
||||
NextValue(aes_in[3], self.a[ 8: 16]),
|
||||
NextValue(aes_in[0], self.a[ 40: 48]),
|
||||
NextValue(aes_in[1], self.a[ 72: 80]),
|
||||
NextValue(aes_in[2], self.a[104:112]),
|
||||
NextState("LANE2_2"))
|
||||
seq.act("LANE2_2",
|
||||
# store the xor'ed result for LANE2, byte 1 in aes_buf
|
||||
Case(self.instruction.immediate[0:1], {
|
||||
0:[ NextValue(aes_buf[128:160], self.b[128:160] ^ Cat(aes_out[0][ 0:16], aes_out[0][ 8:24])),
|
||||
NextValue(aes_buf[160:192], self.b[160:192] ^ Cat(aes_out[1][ 0:16], aes_out[1][ 8:24])),
|
||||
NextValue(aes_buf[192:224], self.b[192:224] ^ Cat(aes_out[2][ 0:16], aes_out[2][ 8:24])),
|
||||
NextValue(aes_buf[224:256], self.b[224:256] ^ Cat(aes_out[3][ 0:16], aes_out[3][ 8:24]))],
|
||||
1:[ NextValue(aes_buf[128:160], self.b[128:160] ^ Cat(aes_out[0][ 8:16], Signal(24, reset = 0))),
|
||||
NextValue(aes_buf[160:192], self.b[160:192] ^ Cat(aes_out[1][ 8:16], Signal(24, reset = 0))),
|
||||
NextValue(aes_buf[192:224], self.b[192:224] ^ Cat(aes_out[2][ 8:16], Signal(24, reset = 0))),
|
||||
NextValue(aes_buf[224:256], self.b[224:256] ^ Cat(aes_out[3][ 8:16], Signal(24, reset = 0)))],
|
||||
}),
|
||||
# put the second byte in the lookup tables (LANE2)
|
||||
NextValue(aes_in[3], self.a[136:144]),
|
||||
NextValue(aes_in[0], self.a[168:176]),
|
||||
NextValue(aes_in[1], self.a[200:208]),
|
||||
NextValue(aes_in[2], self.a[232:240]),
|
||||
NextState("LANE1_3"))
|
||||
seq.act("LANE1_3",
|
||||
# store the xor'ed result for LANE1, byte 2 in aes_buf
|
||||
Case(self.instruction.immediate[0:1], {
|
||||
0:[ NextValue(aes_buf[ 0: 32], aes_buf[ 0: 32] ^ Cat(aes_out[0][16:24], aes_out[0][ 0:16], aes_out[0][ 8:16])),
|
||||
NextValue(aes_buf[ 32: 64], aes_buf[ 32: 64] ^ Cat(aes_out[1][16:24], aes_out[1][ 0:16], aes_out[1][ 8:16])),
|
||||
NextValue(aes_buf[ 64: 96], aes_buf[ 64: 96] ^ Cat(aes_out[2][16:24], aes_out[2][ 0:16], aes_out[2][ 8:16])),
|
||||
NextValue(aes_buf[ 96:128], aes_buf[ 96:128] ^ Cat(aes_out[3][16:24], aes_out[3][ 0:16], aes_out[3][ 8:16]))],
|
||||
1:[ NextValue(aes_buf[ 0: 32], aes_buf[ 0: 32] ^ Cat(Signal(8, reset = 0), aes_out[0][ 8:16], Signal(16, reset = 0))),
|
||||
NextValue(aes_buf[ 32: 64], aes_buf[ 32: 64] ^ Cat(Signal(8, reset = 0), aes_out[1][ 8:16], Signal(16, reset = 0))),
|
||||
NextValue(aes_buf[ 64: 96], aes_buf[ 64: 96] ^ Cat(Signal(8, reset = 0), aes_out[2][ 8:16], Signal(16, reset = 0))),
|
||||
NextValue(aes_buf[ 96:128], aes_buf[ 96:128] ^ Cat(Signal(8, reset = 0), aes_out[3][ 8:16], Signal(16, reset = 0)))],
|
||||
}),
|
||||
# put the third byte in the lookup tables (LANE1)
|
||||
NextValue(aes_in[2], self.a[ 16: 24]),
|
||||
NextValue(aes_in[3], self.a[ 48: 56]),
|
||||
NextValue(aes_in[0], self.a[ 80: 88]),
|
||||
NextValue(aes_in[1], self.a[112:120]),
|
||||
NextState("LANE2_3"))
|
||||
seq.act("LANE2_3",
|
||||
# store the xor'ed result for LANE2, byte 2 in aes_buf
|
||||
Case(self.instruction.immediate[0:1], {
|
||||
0:[ NextValue(aes_buf[128:160], aes_buf[128:160] ^ Cat(aes_out[0][16:24], aes_out[0][ 0:16], aes_out[0][ 8:16])),
|
||||
NextValue(aes_buf[160:192], aes_buf[160:192] ^ Cat(aes_out[1][16:24], aes_out[1][ 0:16], aes_out[1][ 8:16])),
|
||||
NextValue(aes_buf[192:224], aes_buf[192:224] ^ Cat(aes_out[2][16:24], aes_out[2][ 0:16], aes_out[2][ 8:16])),
|
||||
NextValue(aes_buf[224:256], aes_buf[224:256] ^ Cat(aes_out[3][16:24], aes_out[3][ 0:16], aes_out[3][ 8:16]))],
|
||||
1:[ NextValue(aes_buf[128:160], aes_buf[128:160] ^ Cat(Signal(8, reset = 0), aes_out[0][ 8:16], Signal(16, reset = 0))),
|
||||
NextValue(aes_buf[160:192], aes_buf[160:192] ^ Cat(Signal(8, reset = 0), aes_out[1][ 8:16], Signal(16, reset = 0))),
|
||||
NextValue(aes_buf[192:224], aes_buf[192:224] ^ Cat(Signal(8, reset = 0), aes_out[2][ 8:16], Signal(16, reset = 0))),
|
||||
NextValue(aes_buf[224:256], aes_buf[224:256] ^ Cat(Signal(8, reset = 0), aes_out[3][ 8:16], Signal(16, reset = 0)))],
|
||||
}),
|
||||
# put the third byte in the lookup tables (LANE2)
|
||||
NextValue(aes_in[2], self.a[144:152]),
|
||||
NextValue(aes_in[3], self.a[176:184]),
|
||||
NextValue(aes_in[0], self.a[208:216]),
|
||||
NextValue(aes_in[1], self.a[240:248]),
|
||||
NextState("LANE1_4"))
|
||||
seq.act("LANE1_4",
|
||||
# store the xor'ed result for LANE1, byte 3 in aes_buf
|
||||
Case(self.instruction.immediate[0:1], {
|
||||
0:[ NextValue(aes_buf[ 0: 32], aes_buf[ 0: 32] ^ Cat(aes_out[0][ 8:24], aes_out[0][ 0:16])),
|
||||
NextValue(aes_buf[ 32: 64], aes_buf[ 32: 64] ^ Cat(aes_out[1][ 8:24], aes_out[1][ 0:16])),
|
||||
NextValue(aes_buf[ 64: 96], aes_buf[ 64: 96] ^ Cat(aes_out[2][ 8:24], aes_out[2][ 0:16])),
|
||||
NextValue(aes_buf[ 96:128], aes_buf[ 96:128] ^ Cat(aes_out[3][ 8:24], aes_out[3][ 0:16]))],
|
||||
1:[ NextValue(aes_buf[ 0: 32], aes_buf[ 0: 32] ^ Cat(Signal(16, reset = 0), aes_out[0][ 8:16], Signal(8, reset = 0))),
|
||||
NextValue(aes_buf[ 32: 64], aes_buf[ 32: 64] ^ Cat(Signal(16, reset = 0), aes_out[1][ 8:16], Signal(8, reset = 0))),
|
||||
NextValue(aes_buf[ 64: 96], aes_buf[ 64: 96] ^ Cat(Signal(16, reset = 0), aes_out[2][ 8:16], Signal(8, reset = 0))),
|
||||
NextValue(aes_buf[ 96:128], aes_buf[ 96:128] ^ Cat(Signal(16, reset = 0), aes_out[3][ 8:16], Signal(8, reset = 0)))],
|
||||
}),
|
||||
# put the fourth byte in the lookup tables (LANE1)
|
||||
NextValue(aes_in[1], self.a[ 24: 32]),
|
||||
NextValue(aes_in[2], self.a[ 56: 64]),
|
||||
NextValue(aes_in[3], self.a[ 88: 96]),
|
||||
NextValue(aes_in[0], self.a[120:128]),
|
||||
NextState("LANE2_4"))
|
||||
seq.act("LANE2_4",
|
||||
# store the xor'ed result for LANE2, byte 3 in aes_buf
|
||||
Case(self.instruction.immediate[0:1], {
|
||||
0:[ NextValue(aes_buf[128:160], aes_buf[128:160] ^ Cat(aes_out[0][ 8:24], aes_out[0][ 0:16])),
|
||||
NextValue(aes_buf[160:192], aes_buf[160:192] ^ Cat(aes_out[1][ 8:24], aes_out[1][ 0:16])),
|
||||
NextValue(aes_buf[192:224], aes_buf[192:224] ^ Cat(aes_out[2][ 8:24], aes_out[2][ 0:16])),
|
||||
NextValue(aes_buf[224:256], aes_buf[224:256] ^ Cat(aes_out[3][ 8:24], aes_out[3][ 0:16]))],
|
||||
1:[ NextValue(aes_buf[128:160], aes_buf[128:160] ^ Cat(Signal(16, reset = 0), aes_out[0][ 8:16], Signal(8, reset = 0))),
|
||||
NextValue(aes_buf[160:192], aes_buf[160:192] ^ Cat(Signal(16, reset = 0), aes_out[1][ 8:16], Signal(8, reset = 0))),
|
||||
NextValue(aes_buf[192:224], aes_buf[192:224] ^ Cat(Signal(16, reset = 0), aes_out[2][ 8:16], Signal(8, reset = 0))),
|
||||
NextValue(aes_buf[224:256], aes_buf[224:256] ^ Cat(Signal(16, reset = 0), aes_out[3][ 8:16], Signal(8, reset = 0)))],
|
||||
}),
|
||||
# put the fourth byte in the lookup tables (LANE2)
|
||||
NextValue(aes_in[1], self.a[152:160]),
|
||||
NextValue(aes_in[2], self.a[184:192]),
|
||||
NextValue(aes_in[3], self.a[216:224]),
|
||||
NextValue(aes_in[0], self.a[248:256]),
|
||||
NextState("LANE1_F"))
|
||||
seq.act("LANE1_F",
|
||||
# store the xor'ed result for LANE1, byte 4 in aes_buf
|
||||
Case(self.instruction.immediate[0:1], {
|
||||
0:[ NextValue(aes_buf[ 0: 32], aes_buf[ 0: 32] ^ Cat(aes_out[0][ 8:16], aes_out[0][ 8:24], aes_out[0][ 0: 8])),
|
||||
NextValue(aes_buf[ 32: 64], aes_buf[ 32: 64] ^ Cat(aes_out[1][ 8:16], aes_out[1][ 8:24], aes_out[1][ 0: 8])),
|
||||
NextValue(aes_buf[ 64: 96], aes_buf[ 64: 96] ^ Cat(aes_out[2][ 8:16], aes_out[2][ 8:24], aes_out[2][ 0: 8])),
|
||||
NextValue(aes_buf[ 96:128], aes_buf[ 96:128] ^ Cat(aes_out[3][ 8:16], aes_out[3][ 8:24], aes_out[3][ 0: 8]))],
|
||||
1:[ NextValue(aes_buf[ 0: 32], aes_buf[ 0: 32] ^ Cat(Signal(24, reset = 0), aes_out[0][ 8:16])),
|
||||
NextValue(aes_buf[ 32: 64], aes_buf[ 32: 64] ^ Cat(Signal(24, reset = 0), aes_out[1][ 8:16])),
|
||||
NextValue(aes_buf[ 64: 96], aes_buf[ 64: 96] ^ Cat(Signal(24, reset = 0), aes_out[2][ 8:16])),
|
||||
NextValue(aes_buf[ 96:128], aes_buf[ 96:128] ^ Cat(Signal(24, reset = 0), aes_out[3][ 8:16]))],
|
||||
}),
|
||||
NextState("LANE2_F"))
|
||||
seq.act("LANE2_F",
|
||||
# store the xor'ed result for LANE2, byte 4 in aes_buf
|
||||
Case(self.instruction.immediate[0:1], {
|
||||
0:[ NextValue(aes_buf[128:160], aes_buf[128:160] ^ Cat(aes_out[0][ 8:16], aes_out[0][ 8:24], aes_out[0][ 0: 8])),
|
||||
NextValue(aes_buf[160:192], aes_buf[160:192] ^ Cat(aes_out[1][ 8:16], aes_out[1][ 8:24], aes_out[1][ 0: 8])),
|
||||
NextValue(aes_buf[192:224], aes_buf[192:224] ^ Cat(aes_out[2][ 8:16], aes_out[2][ 8:24], aes_out[2][ 0: 8])),
|
||||
NextValue(aes_buf[224:256], aes_buf[224:256] ^ Cat(aes_out[3][ 8:16], aes_out[3][ 8:24], aes_out[3][ 0: 8]))],
|
||||
1:[ NextValue(aes_buf[128:160], aes_buf[128:160] ^ Cat(Signal(24, reset = 0), aes_out[0][ 8:16])),
|
||||
NextValue(aes_buf[160:192], aes_buf[160:192] ^ Cat(Signal(24, reset = 0), aes_out[1][ 8:16])),
|
||||
NextValue(aes_buf[192:224], aes_buf[192:224] ^ Cat(Signal(24, reset = 0), aes_out[2][ 8:16])),
|
||||
NextValue(aes_buf[224:256], aes_buf[224:256] ^ Cat(Signal(24, reset = 0), aes_out[3][ 8:16]))],
|
||||
}),
|
||||
NextState("OUT"))
|
||||
seq.act("OUT",
|
||||
self.q_valid.eq(1),
|
||||
self.q.eq(self.b ^ aes_buf),
|
||||
self.q.eq(aes_buf),
|
||||
NextState("IDLE"))
|
||||
|
||||
class ExecLS(ExecUnit, AutoDoc):
|
||||
|
||||
@@ -621,75 +621,33 @@ fn main() -> std::io::Result<()> {
|
||||
// one full round demo
|
||||
xor %0, %0, %31
|
||||
|
||||
aesesmi %1, %0, %30, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %30
|
||||
|
||||
aesesmi %0, %1, %29, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %29
|
||||
|
||||
aesesmi %1, %0, %28, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %28
|
||||
|
||||
aesesmi %0, %1, %27, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %27
|
||||
|
||||
aesesmi %1, %0, %26, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %26
|
||||
|
||||
aesesmi %0, %1, %25, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %25
|
||||
|
||||
aesesmi %1, %0, %24, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %24
|
||||
|
||||
aesesmi %0, %1, %23, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %23
|
||||
|
||||
aesesmi %1, %0, %22, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %22
|
||||
|
||||
aesesmi %0, %1, %21, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %21
|
||||
|
||||
aesesmi %1, %0, %20, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %20
|
||||
|
||||
aesesmi %0, %1, %19, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %19
|
||||
|
||||
aesesmi %1, %0, %18, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %18
|
||||
|
||||
aesesi %0, %1, %17, #0
|
||||
aesesi %0, %1, %0, #1
|
||||
aesesi %0, %1, %0, #2
|
||||
aesesi %0, %1, %0, #3
|
||||
aesesi %0, %1, %17
|
||||
|
||||
fin
|
||||
);
|
||||
@@ -713,75 +671,33 @@ fn main() -> std::io::Result<()> {
|
||||
genht:
|
||||
xor %0, %1, %31
|
||||
|
||||
aesesmi %1, %0, %30, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %30
|
||||
|
||||
aesesmi %0, %1, %29, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %29
|
||||
|
||||
aesesmi %1, %0, %28, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %28
|
||||
|
||||
aesesmi %0, %1, %27, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %27
|
||||
|
||||
aesesmi %1, %0, %26, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %26
|
||||
|
||||
aesesmi %0, %1, %25, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %25
|
||||
|
||||
aesesmi %1, %0, %24, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %24
|
||||
|
||||
aesesmi %0, %1, %23, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %23
|
||||
|
||||
aesesmi %1, %0, %22, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %22
|
||||
|
||||
aesesmi %0, %1, %21, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %21
|
||||
|
||||
aesesmi %1, %0, %20, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %20
|
||||
|
||||
aesesmi %0, %1, %19, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %19
|
||||
|
||||
aesesmi %1, %0, %18, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %18
|
||||
|
||||
aesesi %0, %1, %17, #0
|
||||
aesesi %0, %1, %0, #1
|
||||
aesesi %0, %1, %0, #2
|
||||
aesesi %0, %1, %0, #3
|
||||
aesesi %0, %1, %17
|
||||
|
||||
// if the %2 flag is cleared, we've just computed T
|
||||
brz afterht, %2
|
||||
@@ -910,75 +826,33 @@ fn main() -> std::io::Result<()> {
|
||||
|
||||
xor %0, %16, %31
|
||||
|
||||
aesesmi %1, %0, %30, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %30
|
||||
|
||||
aesesmi %0, %1, %29, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %29
|
||||
|
||||
aesesmi %1, %0, %28, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %28
|
||||
|
||||
aesesmi %0, %1, %27, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %27
|
||||
|
||||
aesesmi %1, %0, %26, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %26
|
||||
|
||||
aesesmi %0, %1, %25, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %25
|
||||
|
||||
aesesmi %1, %0, %24, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %24
|
||||
|
||||
aesesmi %0, %1, %23, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %23
|
||||
|
||||
aesesmi %1, %0, %22, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %22
|
||||
|
||||
aesesmi %0, %1, %21, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %21
|
||||
|
||||
aesesmi %1, %0, %20, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %20
|
||||
|
||||
aesesmi %0, %1, %19, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %19
|
||||
|
||||
aesesmi %1, %0, %18, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %18
|
||||
|
||||
aesesi %0, %1, %17, #0
|
||||
aesesi %0, %1, %0, #1
|
||||
aesesi %0, %1, %0, #2
|
||||
aesesi %1, %1, %0, #3
|
||||
aesesi %1, %1, %17
|
||||
|
||||
//gcm_brev64 %1, %0
|
||||
//gcm_swap64 %1, %1, %1
|
||||
@@ -1071,75 +945,33 @@ fn main() -> std::io::Result<()> {
|
||||
|
||||
xor %0, %16, %31
|
||||
|
||||
aesesmi %1, %0, %30, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %30
|
||||
|
||||
aesesmi %0, %1, %29, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %29
|
||||
|
||||
aesesmi %1, %0, %28, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %28
|
||||
|
||||
aesesmi %0, %1, %27, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %27
|
||||
|
||||
aesesmi %1, %0, %26, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %26
|
||||
|
||||
aesesmi %0, %1, %25, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %25
|
||||
|
||||
aesesmi %1, %0, %24, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %24
|
||||
|
||||
aesesmi %0, %1, %23, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %23
|
||||
|
||||
aesesmi %1, %0, %22, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %22
|
||||
|
||||
aesesmi %0, %1, %21, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %21
|
||||
|
||||
aesesmi %1, %0, %20, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %20
|
||||
|
||||
aesesmi %0, %1, %19, #0
|
||||
aesesmi %0, %1, %0, #1
|
||||
aesesmi %0, %1, %0, #2
|
||||
aesesmi %0, %1, %0, #3
|
||||
aesesmi %0, %1, %19
|
||||
|
||||
aesesmi %1, %0, %18, #0
|
||||
aesesmi %1, %0, %1, #1
|
||||
aesesmi %1, %0, %1, #2
|
||||
aesesmi %1, %0, %1, #3
|
||||
aesesmi %1, %0, %18
|
||||
|
||||
aesesi %0, %1, %17, #0
|
||||
aesesi %0, %1, %0, #1
|
||||
aesesi %0, %1, %0, #2
|
||||
aesesi %1, %1, %0, #3
|
||||
aesesi %1, %1, %17
|
||||
|
||||
//gcm_brev64 %1, %0
|
||||
//gcm_swap64 %1, %1, %1
|
||||
@@ -1267,7 +1099,16 @@ fn main() -> std::io::Result<()> {
|
||||
let mut pos = 0;
|
||||
|
||||
pos = 0;
|
||||
println!("PFX:");
|
||||
println!("test AES:");
|
||||
while pos < aescode.len() {
|
||||
print!("0x{:08x},", aescode[pos]);
|
||||
pos = pos + 1;
|
||||
}
|
||||
println!("");
|
||||
println!("-> {}", aescode.len());
|
||||
|
||||
pos = 0;
|
||||
println!("GCM PFX:");
|
||||
while pos < gcm_pfx_code.len() {
|
||||
print!("0x{:08x},", gcm_pfx_code[pos]);
|
||||
pos = pos + 1;
|
||||
@@ -1276,7 +1117,7 @@ fn main() -> std::io::Result<()> {
|
||||
println!("-> {}", gcm_pfx_code.len());
|
||||
|
||||
pos = 0;
|
||||
println!("AD:");
|
||||
println!("GCM AD:");
|
||||
while pos < gcm_ad_code.len() {
|
||||
print!("0x{:08x},", gcm_ad_code[pos]);
|
||||
pos = pos + 1;
|
||||
@@ -1285,7 +1126,7 @@ fn main() -> std::io::Result<()> {
|
||||
println!("-> {}", gcm_ad_code.len());
|
||||
|
||||
pos = 0;
|
||||
println!("AES:");
|
||||
println!("GCM AES:");
|
||||
while pos < gcm_aes_code.len() {
|
||||
print!("0x{:08x},", gcm_aes_code[pos]);
|
||||
pos = pos + 1;
|
||||
@@ -1294,7 +1135,7 @@ fn main() -> std::io::Result<()> {
|
||||
println!("-> {}", gcm_aes_code.len());
|
||||
|
||||
pos = 0;
|
||||
println!("FINISH:");
|
||||
println!("GCM FINISH:");
|
||||
while pos < gcm_finish_code.len() {
|
||||
print!("0x{:08x},", gcm_finish_code[pos]);
|
||||
pos = pos + 1;
|
||||
|
||||
Reference in New Issue
Block a user