forked from oweisse/dpav4-contest
-
Notifications
You must be signed in to change notification settings - Fork 0
/
SubBytesComputer.m
96 lines (83 loc) · 4.19 KB
/
SubBytesComputer.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
% Author: Ofir Weisse, mail: oweisse (at) umich.edu, www.ofirweisse.com
%
% MIT License
%
% Copyright (c) 2016 oweisse
%
% Permission is hereby granted, free of charge, to any person obtaining a copy
% of this software and associated documentation files (the "Software"), to deal
% in the Software without restriction, including without limitation the rights
% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
% copies of the Software, and to permit persons to whom the Software is
% furnished to do so, subject to the following conditions:
%
% The above copyright notice and this permission notice shall be included in all
% copies or substantial portions of the Software.
%
% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
% SOFTWARE.
%Author: Ofir Weisse, www.ofirweisse.com, [email protected]
classdef SubBytesComputer < handle
properties
byteIdx;
mask;
end
properties(Constant = true)
originalAESSbox = uint8([ ...
99, 124, 119, 123, 242, 107, 111, 197, ...
48, 1, 103, 43, 254, 215, 171, 118, ...
202, 130, 201, 125, 250, 89, 71, 240, ...
173, 212, 162, 175, 156, 164, 114, 192, ...
183, 253, 147, 38, 54, 63, 247, 204, ...
52, 165, 229, 241, 113, 216, 49, 21, ...
4, 199, 35, 195, 24, 150, 5, 154, ...
7, 18, 128, 226, 235, 39, 178, 117, ...
9, 131, 44, 26, 27, 110, 90, 160, ...
82, 59, 214, 179, 41, 227, 47, 132, ...
83, 209, 0, 237, 32, 252, 177, 91, ...
106, 203, 190, 57, 74, 76, 88, 207, ...
208, 239, 170, 251, 67, 77, 51, 133, ...
69, 249, 2, 127, 80, 60, 159, 168, ...
81, 163, 64, 143, 146, 157, 56, 245, ...
188, 182, 218, 33, 16, 255, 243, 210, ...
205, 12, 19, 236, 95, 151, 68, 23, ...
196, 167, 126, 61, 100, 93, 25, 115, ...
96, 129, 79, 220, 34, 42, 144, 136, ...
70, 238, 184, 20, 222, 94, 11, 219, ...
224, 50, 58, 10, 73, 6, 36, 92, ...
194, 211, 172, 98, 145, 149, 228, 121, ...
231, 200, 55, 109, 141, 213, 78, 169, ...
108, 86, 244, 234, 101, 122, 174, 8, ...
186, 120, 37, 46, 28, 166, 180, 198, ...
232, 221, 116, 31, 75, 189, 139, 138, ...
112, 62, 181, 102, 72, 3, 246, 14, ...
97, 53, 87, 185, 134, 193, 29, 158, ...
225, 248, 152, 17, 105, 217, 142, 148, ...
155, 30, 135, 233, 206, 85, 40, 223, ...
140, 161, 137, 13, 191, 230, 66, 104, ...
65, 153, 45, 15, 176, 84, 187, 22]);
end
methods
function obj = SubBytesComputer( byteIdx, mask ) %in range 0..15
obj.byteIdx = byteIdx;
obj.mask = mask;
end
function [ dstValues ] = Compute( obj, srcValues )
% Implementation of masked sbox
%IMPORTANT NOTE: in this module byteIndex is between 0 and 15!!
currentByteMask = obj.mask( obj.byteIdx + 1 ); %M_i in RSM documentation
nextByteIndex = mod( obj.byteIdx + 1, 16 );
nextByteMask = obj.mask( nextByteIndex + 1 ); %M_i+1 in RSM documentation
sboxInputs = srcValues( :, end );
maskedData = bitxor( sboxInputs, currentByteMask );
intermediate = obj.originalAESSbox( maskedData + 1 )'; %indices in Matlab starts from 1
computedValues = bitxor( double( intermediate ), nextByteMask );
dstValues = [ srcValues, computedValues ];
end
end
end