Cryptography Reference
In-Depth Information
digits, is the byte in the (i,j) position. The next auxiliary function is similar to the
function bytestohexstring in Appendix A but it acts on single bytes instead
and, for readability, it does not convert them to strings but to hex symbols:
> bytetohex := proc (byte::(integer[0 .. 255]))
local h;
h := cat('', StringTools:-LowerCase(convert(byte, hex, decimal)));
if length(h) = 1 then
h := cat(0, h)
end if;
h
end proc:
The Maple function that prints the S-box matrix is then the following:
> PrintSBox := proc()
local t, s;
t := interface(rtablesize = 16);
s := Array(SBox, order = C_order);
print(LinearAlgebra:-Map(bytetohex, ArrayTools:-Alias(s, [16, 16])));
interface(rtablesize = t);
NULL
end proc:
This produces the following result:
> PrintSBox();
63 7c 77 7b f2 6b 6f c5 30 01 67 2b fe d7 ab 76
ca 82 c9 7d fa 59 47 f0 ad d4 a2 af 9c a4 72 c0
b7 fd 93 26 36 3f f7 cc 34 a5 e5 f1 71 d8 31 15
04 c7 23 c3 18 96 05 9a 07 12 80 e2 eb 27 b2 75
09 83 2c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f 84
53 d1 00 ed 20 fc b1 5b 6a cb be 39 4a 4c 58 cf
d0 ef aa fb 43 4d 33 85 45 f9 02 7f 50 3c 9f a8
51 a3 40 8f 92 9d 38 f5 bc b6 da 21 10 ff f3 d2
cd 0c 13 ec 5f 97 44 17 c4 a7 7e 3d 64 5d 19 73
60 81 4f dc 22 2a 90 88 46 ee b8 14 de 5e 0b db
e0 32 3a 0a 49 06 24 5c c2 d3 ac 62 91 95 e4 79
e7 c8 37 6d 8d d5 4e a9 6c 56 f4 ea 65 7a ae 08
ba 78 25 2e 1c a6 b4 c6 e8 dd 74 1f 4b bd 8b 8a
70 3e b5 66 48 03 f6 0e 61 35 57 b9 86 c1 1d 9e
e1 f8 98 11 69 d9 8e 94 9b 1e 87 e9 ce 55 28 df
8c a1 89 0d bf
e6 42 68 41 99 2d 0f
b0 54 bb 16
For example, if we want to compute ByteSub(169) = SBox[169] ,wejust
note that 169 is, in hexadecimal notation, a9 and hence the image of this byte by
means of the ByteSub permutation is the entry in file a and column 9 which is d3
as can also be seen by checking that SBox[169] = 211.
4.2.2.3 ShiftRows
The ShiftRows transformation cyclically shifts the state rows to the left by offsets
equal to the row index, i.e., 0, 1, 2 and 3. Thus if we denote the state bytes by b i , j ,
0
i
,
j
3 then, using '
:=
' as usual to represent assignment:
:=
b i , j
b i , i + j mod 4
 
Search WWH ::




Custom Search