ruby-aes-normal 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,216 @@
1
+ =begin
2
+ This file is a part of ruby-aes <http://rubyforge.org/projects/ruby-aes>
3
+ Written by Alex Boussinet <alex.boussinet@gmail.com>
4
+
5
+ aes_cons.rb - AES Constant Arrays for ruby-aes
6
+ =end
7
+
8
+ module AesCons
9
+
10
+ RCON = [
11
+ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8,
12
+ 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4,
13
+ 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91
14
+ ]
15
+
16
+ S_BOX = [
17
+ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b,
18
+ 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
19
+ 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26,
20
+ 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
21
+ 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2,
22
+ 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
23
+ 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed,
24
+ 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
25
+ 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f,
26
+ 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
27
+ 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec,
28
+ 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
29
+ 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14,
30
+ 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
31
+ 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d,
32
+ 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
33
+ 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f,
34
+ 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
35
+ 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11,
36
+ 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
37
+ 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f,
38
+ 0xb0, 0x54, 0xbb, 0x16
39
+ ]
40
+
41
+ IS_BOX = [
42
+ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e,
43
+ 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
44
+ 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32,
45
+ 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
46
+ 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49,
47
+ 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
48
+ 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50,
49
+ 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
50
+ 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05,
51
+ 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
52
+ 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41,
53
+ 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
54
+ 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8,
55
+ 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
56
+ 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b,
57
+ 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
58
+ 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59,
59
+ 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
60
+ 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d,
61
+ 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
62
+ 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63,
63
+ 0x55, 0x21, 0x0c, 0x7d
64
+ ]
65
+
66
+ G2X = [
67
+ 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16,
68
+ 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e,
69
+ 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x46,
70
+ 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e,
71
+ 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76,
72
+ 0x78, 0x7a, 0x7c, 0x7e, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e,
73
+ 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0, 0xa2, 0xa4, 0xa6,
74
+ 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe,
75
+ 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6,
76
+ 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee,
77
+ 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, 0x1b, 0x19, 0x1f, 0x1d,
78
+ 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05,
79
+ 0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d,
80
+ 0x23, 0x21, 0x27, 0x25, 0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55,
81
+ 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45, 0x7b, 0x79, 0x7f, 0x7d,
82
+ 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65,
83
+ 0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d,
84
+ 0x83, 0x81, 0x87, 0x85, 0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5,
85
+ 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5, 0xdb, 0xd9, 0xdf, 0xdd,
86
+ 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5,
87
+ 0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed,
88
+ 0xe3, 0xe1, 0xe7, 0xe5
89
+ ]
90
+
91
+ G3X = [
92
+ 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d,
93
+ 0x14, 0x17, 0x12, 0x11, 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39,
94
+ 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21, 0x60, 0x63, 0x66, 0x65,
95
+ 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71,
96
+ 0x50, 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59, 0x48, 0x4b, 0x4e, 0x4d,
97
+ 0x44, 0x47, 0x42, 0x41, 0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9,
98
+ 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1, 0xf0, 0xf3, 0xf6, 0xf5,
99
+ 0xfc, 0xff, 0xfa, 0xf9, 0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1,
100
+ 0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, 0xaa, 0xa9, 0xb8, 0xbb, 0xbe, 0xbd,
101
+ 0xb4, 0xb7, 0xb2, 0xb1, 0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99,
102
+ 0x88, 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81, 0x9b, 0x98, 0x9d, 0x9e,
103
+ 0x97, 0x94, 0x91, 0x92, 0x83, 0x80, 0x85, 0x86, 0x8f, 0x8c, 0x89, 0x8a,
104
+ 0xab, 0xa8, 0xad, 0xae, 0xa7, 0xa4, 0xa1, 0xa2, 0xb3, 0xb0, 0xb5, 0xb6,
105
+ 0xbf, 0xbc, 0xb9, 0xba, 0xfb, 0xf8, 0xfd, 0xfe, 0xf7, 0xf4, 0xf1, 0xf2,
106
+ 0xe3, 0xe0, 0xe5, 0xe6, 0xef, 0xec, 0xe9, 0xea, 0xcb, 0xc8, 0xcd, 0xce,
107
+ 0xc7, 0xc4, 0xc1, 0xc2, 0xd3, 0xd0, 0xd5, 0xd6, 0xdf, 0xdc, 0xd9, 0xda,
108
+ 0x5b, 0x58, 0x5d, 0x5e, 0x57, 0x54, 0x51, 0x52, 0x43, 0x40, 0x45, 0x46,
109
+ 0x4f, 0x4c, 0x49, 0x4a, 0x6b, 0x68, 0x6d, 0x6e, 0x67, 0x64, 0x61, 0x62,
110
+ 0x73, 0x70, 0x75, 0x76, 0x7f, 0x7c, 0x79, 0x7a, 0x3b, 0x38, 0x3d, 0x3e,
111
+ 0x37, 0x34, 0x31, 0x32, 0x23, 0x20, 0x25, 0x26, 0x2f, 0x2c, 0x29, 0x2a,
112
+ 0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16,
113
+ 0x1f, 0x1c, 0x19, 0x1a
114
+ ]
115
+
116
+ G9X = [
117
+ 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53,
118
+ 0x6c, 0x65, 0x7e, 0x77, 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf,
119
+ 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, 0x3b, 0x32, 0x29, 0x20,
120
+ 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c,
121
+ 0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8,
122
+ 0xc7, 0xce, 0xd5, 0xdc, 0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49,
123
+ 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01, 0xe6, 0xef, 0xf4, 0xfd,
124
+ 0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91,
125
+ 0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e,
126
+ 0x21, 0x28, 0x33, 0x3a, 0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2,
127
+ 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa, 0xec, 0xe5, 0xfe, 0xf7,
128
+ 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b,
129
+ 0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f,
130
+ 0x10, 0x19, 0x02, 0x0b, 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8,
131
+ 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, 0x47, 0x4e, 0x55, 0x5c,
132
+ 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30,
133
+ 0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9,
134
+ 0xf6, 0xff, 0xe4, 0xed, 0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35,
135
+ 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d, 0xa1, 0xa8, 0xb3, 0xba,
136
+ 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6,
137
+ 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62,
138
+ 0x5d, 0x54, 0x4f, 0x46
139
+ ]
140
+
141
+ GBX = [
142
+ 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45,
143
+ 0x74, 0x7f, 0x62, 0x69, 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81,
144
+ 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, 0x7b, 0x70, 0x6d, 0x66,
145
+ 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12,
146
+ 0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e,
147
+ 0xbf, 0xb4, 0xa9, 0xa2, 0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7,
148
+ 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f, 0x46, 0x4d, 0x50, 0x5b,
149
+ 0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f,
150
+ 0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8,
151
+ 0xf9, 0xf2, 0xef, 0xe4, 0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c,
152
+ 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54, 0xf7, 0xfc, 0xe1, 0xea,
153
+ 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e,
154
+ 0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02,
155
+ 0x33, 0x38, 0x25, 0x2e, 0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd,
156
+ 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5, 0x3c, 0x37, 0x2a, 0x21,
157
+ 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55,
158
+ 0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44,
159
+ 0x75, 0x7e, 0x63, 0x68, 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80,
160
+ 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, 0x7a, 0x71, 0x6c, 0x67,
161
+ 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13,
162
+ 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f,
163
+ 0xbe, 0xb5, 0xa8, 0xa3
164
+ ]
165
+
166
+ GDX = [
167
+ 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f,
168
+ 0x5c, 0x51, 0x46, 0x4b, 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3,
169
+ 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, 0xbb, 0xb6, 0xa1, 0xac,
170
+ 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0,
171
+ 0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14,
172
+ 0x37, 0x3a, 0x2d, 0x20, 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e,
173
+ 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, 0xbd, 0xb0, 0xa7, 0xaa,
174
+ 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6,
175
+ 0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9,
176
+ 0x8a, 0x87, 0x90, 0x9d, 0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25,
177
+ 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d, 0xda, 0xd7, 0xc0, 0xcd,
178
+ 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91,
179
+ 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75,
180
+ 0x56, 0x5b, 0x4c, 0x41, 0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42,
181
+ 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a, 0xb1, 0xbc, 0xab, 0xa6,
182
+ 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa,
183
+ 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8,
184
+ 0xeb, 0xe6, 0xf1, 0xfc, 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44,
185
+ 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, 0x0c, 0x01, 0x16, 0x1b,
186
+ 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47,
187
+ 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3,
188
+ 0x80, 0x8d, 0x9a, 0x97
189
+ ]
190
+
191
+ GEX = [
192
+ 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62,
193
+ 0x48, 0x46, 0x54, 0x5a, 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca,
194
+ 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, 0xdb, 0xd5, 0xc7, 0xc9,
195
+ 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81,
196
+ 0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59,
197
+ 0x73, 0x7d, 0x6f, 0x61, 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87,
198
+ 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, 0x4d, 0x43, 0x51, 0x5f,
199
+ 0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17,
200
+ 0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14,
201
+ 0x3e, 0x30, 0x22, 0x2c, 0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc,
202
+ 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc, 0x41, 0x4f, 0x5d, 0x53,
203
+ 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b,
204
+ 0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3,
205
+ 0xe9, 0xe7, 0xf5, 0xfb, 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0,
206
+ 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, 0x7a, 0x74, 0x66, 0x68,
207
+ 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20,
208
+ 0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e,
209
+ 0xa4, 0xaa, 0xb8, 0xb6, 0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26,
210
+ 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56, 0x37, 0x39, 0x2b, 0x25,
211
+ 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d,
212
+ 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5,
213
+ 0x9f, 0x91, 0x83, 0x8d
214
+ ]
215
+
216
+ end # AesCons
@@ -0,0 +1,386 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ =begin
4
+ This file is a part of ruby-aes <http://rubyforge.org/projects/ruby-aes>
5
+ Written by Alex Boussinet <alex.boussinet@gmail.com>
6
+
7
+ KAT Tests and MCT tests according to katmct.pdf file.
8
+ <http://csrc.nist.gov/encryption/aes/katmct/katmct.htm>
9
+ See rijndael-vals.zip
10
+ =end
11
+
12
+ require File.dirname(__FILE__) + '/../test_helper.rb'
13
+
14
+ def cbc_decrypt_mct(output)
15
+ output.write <<EOT
16
+
17
+ =========================
18
+
19
+ FILENAME: "cbc_d_m.txt"
20
+
21
+ Cipher Block Chaining (CBC) Mode - DECRYPTION
22
+ Monte Carlo Test
23
+
24
+ Algorithm Name: Rijndael
25
+
26
+ ==========
27
+
28
+ EOT
29
+ [128, 192, 256].each { |kl|
30
+ output.write "KEYSIZE=#{kl}\n\n"
31
+ key = "0" * (kl/4)
32
+ ct = iv = "0" * 32
33
+ opt = pt = nil
34
+ 400.times { |i|
35
+ output.write "I=#{i}\nKEY=#{key}\nIV=#{iv}\nCT=#{ct}\n"
36
+ 10000.times { |j|
37
+ opt = pt
38
+ pt = Aes.decrypt_block(kl, 'ECB', key, iv,
39
+ [ct].pack("H*")).unpack("H*")[0]
40
+ pt = "%032X" % (pt.hex ^ iv.hex)
41
+ iv = ct
42
+ ct = pt
43
+ }
44
+ case kl
45
+ when 128
46
+ npt = pt
47
+ when 192, 256
48
+ x = -(kl/4-32)
49
+ npt = opt[x..-1] + pt
50
+ end
51
+ key = "%0#{kl/4}X" % (key.hex ^ npt.hex)
52
+ output.write "PT=#{pt}\n\n"
53
+ }
54
+ output.write "=========================\n\n"
55
+ }
56
+ end
57
+
58
+ def cbc_encrypt_mct(output)
59
+ output.write <<EOT
60
+
61
+ =========================
62
+
63
+ FILENAME: "cbc_e_m.txt"
64
+
65
+ Cipher Block Chaining (CBC) Mode - ENCRYPTION
66
+ Monte Carlo Test
67
+
68
+ Algorithm Name: Rijndael
69
+
70
+ ==========
71
+
72
+ EOT
73
+ [128, 192, 256].each { |kl|
74
+ output.write "KEYSIZE=#{kl}\n\n"
75
+ key = "0" * (kl/4)
76
+ pt = iv = "0" * 32
77
+ oct = ct = nil
78
+ 400.times { |i|
79
+ output.write "I=#{i}\nKEY=#{key}\nIV=#{iv}\nPT=#{pt}\n"
80
+ 10000.times { |j|
81
+ oct = ct
82
+ pt = "%032X" % (pt.hex ^ iv.hex)
83
+ ct = Aes.encrypt_block(kl, 'ECB', key, iv,
84
+ [pt].pack("H*")).unpack("H*")[0]
85
+ if j == 0 then pt = iv else pt = oct end
86
+ iv = ct
87
+ }
88
+ case kl
89
+ when 128
90
+ nct = ct
91
+ when 192, 256
92
+ x = -(kl/4-32)
93
+ nct = oct[x..-1] + ct
94
+ end
95
+ key = "%0#{kl/4}X" % (key.hex ^ nct.hex)
96
+ output.write "CT=#{ct}\n\n"
97
+ }
98
+ output.write "=========================\n\n"
99
+ }
100
+ end
101
+
102
+ def ecb_decrypt_mct(output)
103
+ output.write <<EOT
104
+
105
+ =========================
106
+
107
+ FILENAME: "ecb_d_m.txt"
108
+
109
+ Electronic Codebook (ECB) Mode - DECRYPTION
110
+ Monte Carlo Test
111
+
112
+ Algorithm Name: Rijndael
113
+
114
+ =========================
115
+
116
+ EOT
117
+ [128, 192, 256].each { |kl|
118
+ output.write "KEYSIZE=#{kl}\n\n"
119
+ key = "0" * (kl/4)
120
+ ct = "0" * 32
121
+ opt = pt = nil
122
+ 400.times { |i|
123
+ output.write "I=#{i}\nKEY=#{key}\nCT=#{ct}\n"
124
+ 10000.times { |j|
125
+ opt = pt
126
+ pt = Aes.decrypt_block(kl, 'ECB', key, nil,
127
+ [ct].pack("H*")).unpack("H*")[0]
128
+ ct = pt
129
+ }
130
+ case kl
131
+ when 128
132
+ npt = pt
133
+ when 192, 256
134
+ x = -(kl/4-32)
135
+ npt = opt[x..-1] + pt
136
+ end
137
+ key = "%0#{kl/4}X" % (key.hex ^ npt.hex)
138
+ ct = pt
139
+ output.write "PT=#{pt}\n\n"
140
+ }
141
+ output.write "=========================\n\n"
142
+ }
143
+ end
144
+
145
+ def ecb_encrypt_mct(output)
146
+ output.write <<EOT
147
+
148
+ =========================
149
+
150
+ FILENAME: "ecb_e_m.txt"
151
+
152
+ Electronic Codebook (ECB) Mode - ENCRYPTION
153
+ Monte Carlo Test
154
+
155
+ Algorithm Name: Rijndael
156
+
157
+ =========================
158
+
159
+ EOT
160
+ [128, 192, 256].each { |kl|
161
+ output.write "KEYSIZE=#{kl}\n\n"
162
+ key = "0" * (kl/4)
163
+ pt = "0" * 32
164
+ oct = ct = nil
165
+ 400.times { |i|
166
+ output.write "I=#{i}\nKEY=#{key}\nPT=#{pt}\n"
167
+ 10000.times { |j|
168
+ oct = ct
169
+ ct = Aes.encrypt_block(kl, 'ECB', key, nil,
170
+ [pt].pack("H*")).unpack("H*")[0]
171
+ pt = ct
172
+ }
173
+ case kl
174
+ when 128
175
+ nct = ct
176
+ when 192, 256
177
+ x = -(kl/4-32)
178
+ nct = oct[x..-1] + ct
179
+ end
180
+ key = "%0#{kl/4}X" % (key.hex ^ nct.hex)
181
+ pt = ct
182
+ output.write "CT=#{ct}\n\n"
183
+ }
184
+ output.write "=========================\n\n"
185
+ }
186
+ end
187
+
188
+ def ecb_iv(output)
189
+ output.write <<EOT
190
+
191
+ =========================
192
+
193
+ FILENAME: "ecb_iv.txt"
194
+
195
+ Electronic Codebook (ECB) Mode
196
+ Intermediate Value Known Answer Tests
197
+
198
+ Algorithm Name: Rijndael
199
+
200
+ ==========
201
+
202
+ EOT
203
+ if (AesAlg.respond_to? :c_extension)
204
+ @output.write <<EOT
205
+ Not Implemented
206
+
207
+ ==========
208
+
209
+ EOT
210
+ else
211
+ $output = output
212
+ AesAlg.class_eval do
213
+ alias :encrypt_block_original :_encrypt_block
214
+ alias :decrypt_original_block :_decrypt_block
215
+ def _encrypt_block
216
+ addRoundKey 0
217
+ 1.upto(@nr) { |n|
218
+ subBytes
219
+ shiftRows
220
+ mixColumns unless n == @nr
221
+ addRoundKey n
222
+ $output.puts "CT#{n}=#{@state.unpack("H*")[0]}" unless (@nr-n).zero?
223
+ }
224
+ @state
225
+ end
226
+ def _decrypt_block
227
+ addRoundKey @nr
228
+ (@nr-1).downto(0) { |n|
229
+ ishiftRows
230
+ isubBytes
231
+ $output.puts "PT#{@nr-n}=#{@state.unpack("H*")[0]}" unless n.zero?
232
+ addRoundKey n
233
+ imixColumns unless n == 0
234
+ }
235
+ @state
236
+ end
237
+ end
238
+ [128, 192, 256].each { |kl|
239
+ output.write "KEYSIZE=#{kl}\n"
240
+ key = ""
241
+ (kl/8).times do |n| key << n.chr end
242
+ output.write "KEY=#{key.unpack("H*")[0]}\n\n"
243
+ output.write "Intermediate Ciphertext Values (Encryption)\n\n"
244
+ pt = ""
245
+ 16.times do |n| pt << n.chr end
246
+ output.write "PT=#{pt.unpack("H*")[0]}\n"
247
+ ct = Aes.encrypt_block(kl, 'ECB', key, nil, pt)
248
+ output.write "CT=#{ct.unpack("H*")[0]}\n\n"
249
+
250
+ output.write "Intermediate Ciphertext Values (Decryption)\n\n"
251
+ output.write "CT=#{ct.unpack("H*")[0]}\n"
252
+ npt = Aes.decrypt_block(kl, 'ECB', key, nil, ct)
253
+ output.write "PT=#{npt.unpack("H*")[0]}\n\n"
254
+
255
+ output.write "==========\n\n"
256
+ }
257
+ AesAlg.class_eval do
258
+ alias :_block_encrypt :encrypt_block_original
259
+ alias :_block_decrypt :decrypt_block_original
260
+ end
261
+ end
262
+ end
263
+
264
+ def ecb_tbl(output)
265
+ output.write <<EOT
266
+
267
+ =========================
268
+
269
+ FILENAME: "ecb_tbl.txt"
270
+
271
+ Electronic Codebook (ECB) Mode
272
+ Tables Known Answer Tests
273
+
274
+ Algorithm Name: Rijndael
275
+ Tables tested: S, Si, LOG, ALOG, RCON, Te0-4 Td0-4
276
+
277
+ ==========
278
+
279
+ EOT
280
+ [128, 192, 256].each { |kl|
281
+ output.write "KEYSIZE=#{kl}\n\n"
282
+ File.open("table.#{kl}", "r") { |f|
283
+ begin
284
+ 1.upto(64) { |i|
285
+ key, *pt = f.readline.split(" ")
286
+ pt = pt.join
287
+ ct = Aes.encrypt_block(kl, 'ECB', key, nil, [pt].pack("H*"))
288
+ output.write "I=#{i}\nKEY=#{key}\nPT=#{pt}\nCT=#{ct.unpack("H*")[0]}\n\n"
289
+ }
290
+ 65.upto(128) { |i|
291
+ key, *ct = f.readline.split(" ")
292
+ ct = ct.join
293
+ pt = Aes.encrypt_block(kl, 'ECB', key, nil, [ct].pack("H*"))
294
+ output.write "I=#{i}\nKEY=#{key}\nPT=#{pt.unpack("H*")[0]}\nCT=#{ct}\n\n"
295
+ }
296
+ rescue
297
+ raise "Bad Table File"
298
+ end
299
+ }
300
+ output.write "==========\n\n"
301
+ }
302
+ end
303
+
304
+ def ecb_vt(output)
305
+ output.write <<EOT
306
+
307
+ =========================
308
+
309
+ FILENAME: "ecb_vt.txt"
310
+
311
+ Electronic Codebook (ECB) Mode
312
+ Variable Text Known Answer Tests
313
+
314
+ Algorithm Name: Rijndael
315
+
316
+ ==========
317
+
318
+ EOT
319
+ [128, 192, 256].each { |kl|
320
+ key = "0" * (kl/4)
321
+ output.write "KEYSIZE=#{kl}\n\nKEY=#{key}\n\n"
322
+ (127).downto(0) { |b|
323
+ i = 128 - b
324
+ pt = "%032X" % (1 << b)
325
+ ct = Aes.encrypt_block(kl, 'ECB', key, nil, [pt].pack("H*"))
326
+ output.write "I=#{i}\nPT=#{pt}\nCT=#{ct.unpack("H*")[0]}\n\n"
327
+ }
328
+ output.write "==========\n\n"
329
+ }
330
+ end
331
+
332
+ def ecb_vk(output)
333
+ pt = "00000000000000000000000000000000"
334
+ output.write <<EOT
335
+
336
+ =========================
337
+
338
+ FILENAME: "ecb_vk.txt"
339
+
340
+ Electronic Codebook (ECB) Mode
341
+ Variable Key Known Answer Tests
342
+
343
+ Algorithm Name: Rijndael
344
+
345
+ ==========
346
+ EOT
347
+ [128, 192, 256].each { |kl|
348
+ output.write "KEYSIZE=#{kl}\n\nPT=#{pt}\n\n"
349
+ (kl-1).downto(0) { |b|
350
+ i = kl - b
351
+ key = "%0#{kl/4}X" % (1 << b)
352
+ ct = Aes.encrypt_block(kl, 'ECB', key, nil, [pt].pack("H*"))
353
+ output.write "I=#{i}\nKEY=#{key}\nCT=#{ct.unpack("H*")[0]}\n\n"
354
+ }
355
+ output.write "==========\n\n"
356
+ }
357
+ end
358
+
359
+ def kat_tests
360
+ puts "Writing ecb_vk.txt..."
361
+ File.open("ecb_vk.txt") { |f| ecb_vk f }
362
+ puts "Writing ecb_vt.txt..."
363
+ File.open("ecb_vt.txt") { |f| ecb_vt f }
364
+ puts "Writing ecb_tbl.txt..."
365
+ File.open("ecb_tbl.txt") { |f| ecb_tbl f }
366
+ puts "Writing ecb_iv.txt..."
367
+ File.open("ecb_iv.txt") { |f| ecb_iv f }
368
+ end
369
+
370
+ def mct_tests
371
+ puts "Writing ecb_e_m.txt..."
372
+ File.open("ecb_e_m.txt") { |f| ecb_encrypt_mct f }
373
+ puts "Writing ecb_d_m.txt..."
374
+ File.open("ecb_d_m.txt") { |f| ecb_decrypt_mct f }
375
+ puts "Writing cbc_e_m.txt..."
376
+ File.open("cbc_e_m.txt") { |f| cbc_encrypt_mct f }
377
+ puts "Writing cbc_d_m.txt..."
378
+ File.open("cbc_d_m.txt") { |f| cbc_decrypt_mct f }
379
+ end
380
+
381
+ if __FILE__ == $0
382
+ puts "Performing KAT Tests..."
383
+ kat_tests
384
+ puts "Performing MCT Tests... VERY time consuming !"
385
+ mct_tests
386
+ end