-
Notifications
You must be signed in to change notification settings - Fork 0
/
fFSBoxSubstitution.m
90 lines (86 loc) · 4.28 KB
/
fFSBoxSubstitution.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
function [ vValueRight32 ] = fFSBoxSubstitution( vValueRight48 )
%FFSBOXSUBvSBoxITUTION Summary of this function goes here
% Detailed explanation goes here
%define S-Boxes
vSBox{1} = [14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7;
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8;
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0;
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13];
vSBox{2} = [15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10;
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5;
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15;
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9];
vSBox{3} = [10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8;
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1;
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7;
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 1];
vSBox{4} = [7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15;
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9;
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4;
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 4];
vSBox{5} = [2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9;
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6;
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14;
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3];
vSBox{6} = [12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11;
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8;
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6;
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13];
vSBox{7} = [4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1;
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6;
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2;
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12];
vSBox{8} = [13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7;
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2;
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8;
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 1];
%redefine sboxes
%SBoxes from Yue (Rex) Wu ywu03@ece.tufts.edu
vSBox{1} = [14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7;...
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8;...
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0;...
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13];
vSBox{2} = [15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10;...
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5;...
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15;...
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9];
vSBox{3} = [10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8;...
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1;...
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7;...
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12];
vSBox{4} = [7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15;...
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9;...
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4;...
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14];
vSBox{5} = [2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9;...
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6;...
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14;...
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3];
vSBox{6} = [12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11;...
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8;...
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6;...
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13];
vSBox{7} = [4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1;...
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6;...
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2;...
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12];
vSBox{8} = [13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7;...
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2;...
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8;...
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11];
%split vector in 8 6-bit blocks
mValueRight8_6 = reshape(vValueRight48,6,8);
vValueRight32 = zeros(8, 4);
for i=1:8
%calulate row and column of sbox
row = bin2dec(num2str([mValueRight8_6(1, i) mValueRight8_6(6, i)])) + 1;
col = bin2dec(num2str(mValueRight8_6(2:5, i)')) + 1;
%get value from the sbox
sValue = dec2bin(vSBox{i}(row, col), 4);
for j=1:4
vValueRight32(i, j) = str2num(sValue(j));
end
end
%create vector by matrix
vValueRight32 = reshape(vValueRight32', 32, 1)';
end