2
2
// The .NET Foundation licenses this file to you under the MIT license.
3
3
// See the LICENSE file in the project root for more information.
4
4
5
- using System ;
6
- using System . Collections . Generic ;
7
- using System . Security . Cryptography ;
8
5
using Test . Cryptography ;
9
6
using Xunit ;
10
7
@@ -23,19 +20,45 @@ public static void TripleDESDefaults()
23
20
}
24
21
25
22
[ Fact ]
26
- public static void TripleDESRoundTrip192BitsNoneECB ( )
23
+ public static void TripleDESGenerate128Key ( )
27
24
{
28
- byte [ ] key = "c5629363d957054eba793093b83739bb78711db221a82379" . HexToByteArray ( ) ;
25
+ using ( TripleDES des = TripleDESFactory . Create ( ) )
26
+ {
27
+ des . KeySize = 128 ;
28
+ byte [ ] key = des . Key ;
29
+ Assert . Equal ( 128 , key . Length * 8 ) ;
30
+ }
31
+ }
32
+
33
+ [ Fact ]
34
+ public static void TripleDESInvalidKeySizes ( )
35
+ {
36
+ using ( TripleDES des = TripleDESFactory . Create ( ) )
37
+ {
38
+ Assert . Throws < CryptographicException > ( ( ) => des . KeySize = 128 - des . BlockSize ) ;
39
+ Assert . Throws < CryptographicException > ( ( ) => des . KeySize = 192 + des . BlockSize ) ;
40
+ }
41
+ }
42
+
43
+ [ Theory ]
44
+ [ InlineData ( 192 , "e56f72478c7479d169d54c0548b744af5b53efb1cdd26037" , "c5629363d957054eba793093b83739bb78711db221a82379" ) ]
45
+ [ InlineData ( 128 , "1387b981dbb40f34b915c4ed89fd681a740d3b4869c0b575" , "c5629363d957054eba793093b83739bb" ) ]
46
+ [ InlineData ( 192 , "1387b981dbb40f34b915c4ed89fd681a740d3b4869c0b575" , "c5629363d957054eba793093b83739bbc5629363d957054e" ) ]
47
+ public static void TripleDESRoundTripNoneECB ( int keySize , string expectedCipherHex , string keyHex )
48
+ {
49
+ byte [ ] key = keyHex . HexToByteArray ( ) ;
29
50
30
51
using ( TripleDES alg = TripleDESFactory . Create ( ) )
31
52
{
32
53
alg . Key = key ;
54
+ Assert . Equal ( keySize , alg . KeySize ) ;
55
+
33
56
alg . Padding = PaddingMode . None ;
34
57
alg . Mode = CipherMode . ECB ;
35
58
36
59
byte [ ] plainText = "de7d2dddea96b691e979e647dc9d3ca27d7f1ad673ca9570" . HexToByteArray ( ) ;
37
60
byte [ ] cipher = alg . Encrypt ( plainText ) ;
38
- byte [ ] expectedCipher = "e56f72478c7479d169d54c0548b744af5b53efb1cdd26037" . HexToByteArray ( ) ;
61
+ byte [ ] expectedCipher = expectedCipherHex . HexToByteArray ( ) ;
39
62
Assert . Equal < byte > ( expectedCipher , cipher ) ;
40
63
41
64
byte [ ] decrypted = alg . Decrypt ( cipher ) ;
@@ -44,22 +67,27 @@ public static void TripleDESRoundTrip192BitsNoneECB()
44
67
}
45
68
}
46
69
47
- [ Fact ]
48
- public static void TripleDESRoundTrip192BitsNoneCBC ( )
70
+ [ Theory ]
71
+ [ InlineData ( 192 , "dea36279600f19c602b6ed9bf3ffdac5ebf25c1c470eb61c" , "b43eaf0260813fb47c87ae073a146006d359ad04061eb0e6" ) ]
72
+ [ InlineData ( 128 , "a25e55381f0cc45541741b9ce6e96b7799aa1e0db70780f7" , "b43eaf0260813fb47c87ae073a146006" ) ]
73
+ [ InlineData ( 192 , "a25e55381f0cc45541741b9ce6e96b7799aa1e0db70780f7" , "b43eaf0260813fb47c87ae073a146006b43eaf0260813fb4" ) ]
74
+ public static void TripleDESRoundTripNoneCBC ( int keySize , string expectedCipherHex , string keyHex )
49
75
{
50
- byte [ ] key = "b43eaf0260813fb47c87ae073a146006d359ad04061eb0e6" . HexToByteArray ( ) ;
76
+ byte [ ] key = keyHex . HexToByteArray ( ) ;
51
77
byte [ ] iv = "5fbc5bc21b8597d8" . HexToByteArray ( ) ;
52
78
53
79
using ( TripleDES alg = TripleDESFactory . Create ( ) )
54
80
{
55
81
alg . Key = key ;
82
+ Assert . Equal ( keySize , alg . KeySize ) ;
83
+
56
84
alg . IV = iv ;
57
85
alg . Padding = PaddingMode . None ;
58
86
alg . Mode = CipherMode . CBC ;
59
87
60
88
byte [ ] plainText = "79a86903608e133e020e1dc68c9835250c2f17b0ebeed91b" . HexToByteArray ( ) ;
61
89
byte [ ] cipher = alg . Encrypt ( plainText ) ;
62
- byte [ ] expectedCipher = "dea36279600f19c602b6ed9bf3ffdac5ebf25c1c470eb61c" . HexToByteArray ( ) ;
90
+ byte [ ] expectedCipher = expectedCipherHex . HexToByteArray ( ) ;
63
91
Assert . Equal < byte > ( expectedCipher , cipher ) ;
64
92
65
93
byte [ ] decrypted = alg . Decrypt ( cipher ) ;
@@ -68,20 +96,25 @@ public static void TripleDESRoundTrip192BitsNoneCBC()
68
96
}
69
97
}
70
98
71
- [ Fact ]
72
- public static void TripleDESRoundTrip192BitsZerosECB ( )
99
+ [ Theory ]
100
+ [ InlineData ( 192 , "149ec32f558b27c7e4151e340d8184f18b4e25d2518f69d9" , "9da5b265179d65f634dfc95513f25094411e51bb3be877ef" ) ]
101
+ [ InlineData ( 128 , "02ac5db31cfada874f6042c4e92b09175fd08e93a20f936b" , "9da5b265179d65f634dfc95513f25094" ) ]
102
+ [ InlineData ( 192 , "02ac5db31cfada874f6042c4e92b09175fd08e93a20f936b" , "9da5b265179d65f634dfc95513f250949da5b265179d65f6" ) ]
103
+ public static void TripleDESRoundTripZerosECB ( int keySize , string expectedCipherHex , string keyHex )
73
104
{
74
- byte [ ] key = "9da5b265179d65f634dfc95513f25094411e51bb3be877ef" . HexToByteArray ( ) ;
105
+ byte [ ] key = keyHex . HexToByteArray ( ) ;
75
106
76
107
using ( TripleDES alg = TripleDESFactory . Create ( ) )
77
108
{
78
109
alg . Key = key ;
110
+ Assert . Equal ( keySize , alg . KeySize ) ;
111
+
79
112
alg . Padding = PaddingMode . Zeros ;
80
113
alg . Mode = CipherMode . ECB ;
81
114
82
115
byte [ ] plainText = "77a8b2efb45addb38d7ef3aa9e6ab5d71957445ab8" . HexToByteArray ( ) ;
83
116
byte [ ] cipher = alg . Encrypt ( plainText ) ;
84
- byte [ ] expectedCipher = "149ec32f558b27c7e4151e340d8184f18b4e25d2518f69d9" . HexToByteArray ( ) ;
117
+ byte [ ] expectedCipher = expectedCipherHex . HexToByteArray ( ) ;
85
118
Assert . Equal < byte > ( expectedCipher , cipher ) ;
86
119
87
120
byte [ ] decrypted = alg . Decrypt ( cipher ) ;
@@ -90,14 +123,19 @@ public static void TripleDESRoundTrip192BitsZerosECB()
90
123
}
91
124
}
92
125
93
- [ Fact ]
94
- public static void TripleDESRoundTrip192BitsISO10126ECB ( )
126
+ [ Theory ]
127
+ [ InlineData ( 192 , "9da5b265179d65f634dfc95513f25094411e51bb3be877ef" ) ]
128
+ [ InlineData ( 128 , "9da5b265179d65f634dfc95513f25094" ) ]
129
+ [ InlineData ( 192 , "9da5b265179d65f634dfc95513f250949da5b265179d65f6" ) ]
130
+ public static void TripleDESRoundTripISO10126ECB ( int keySize , string keyHex )
95
131
{
96
- byte [ ] key = "9da5b265179d65f634dfc95513f25094411e51bb3be877ef" . HexToByteArray ( ) ;
132
+ byte [ ] key = keyHex . HexToByteArray ( ) ;
97
133
98
134
using ( TripleDES alg = TripleDESFactory . Create ( ) )
99
135
{
100
136
alg . Key = key ;
137
+ Assert . Equal ( keySize , alg . KeySize ) ;
138
+
101
139
alg . Padding = PaddingMode . ISO10126 ;
102
140
alg . Mode = CipherMode . ECB ;
103
141
@@ -112,21 +150,26 @@ public static void TripleDESRoundTrip192BitsISO10126ECB()
112
150
}
113
151
}
114
152
115
- [ Fact ]
116
- public static void TripleDESRoundTrip192BitsANSIX923ECB ( )
153
+ [ Theory ]
154
+ [ InlineData ( 192 , "149ec32f558b27c7e4151e340d8184f1c90f0a499e20fda9" , "9da5b265179d65f634dfc95513f25094411e51bb3be877ef" ) ]
155
+ [ InlineData ( 128 , "02ac5db31cfada874f6042c4e92b091783620e54a1e75957" , "9da5b265179d65f634dfc95513f25094" ) ]
156
+ [ InlineData ( 192 , "02ac5db31cfada874f6042c4e92b091783620e54a1e75957" , "9da5b265179d65f634dfc95513f250949da5b265179d65f6" ) ]
157
+ public static void TripleDESRoundTripANSIX923ECB ( int keySize , string expectedCipherHex , string keyHex )
117
158
{
118
- byte [ ] key = "9da5b265179d65f634dfc95513f25094411e51bb3be877ef" . HexToByteArray ( ) ;
159
+ byte [ ] key = keyHex . HexToByteArray ( ) ;
119
160
120
161
using ( TripleDES alg = TripleDESFactory . Create ( ) )
121
162
{
122
163
alg . Key = key ;
164
+ Assert . Equal ( keySize , alg . KeySize ) ;
165
+
123
166
alg . Padding = PaddingMode . ANSIX923 ;
124
167
alg . Mode = CipherMode . ECB ;
125
168
126
169
byte [ ] plainText = "77a8b2efb45addb38d7ef3aa9e6ab5d71957445ab8" . HexToByteArray ( ) ;
127
170
byte [ ] cipher = alg . Encrypt ( plainText ) ;
128
-
129
- byte [ ] expectedCipher = "149ec32f558b27c7e4151e340d8184f1c90f0a499e20fda9" . HexToByteArray ( ) ;
171
+
172
+ byte [ ] expectedCipher = expectedCipherHex . HexToByteArray ( ) ;
130
173
Assert . Equal < byte > ( expectedCipher , cipher ) ;
131
174
132
175
byte [ ] decrypted = alg . Decrypt ( cipher ) ;
@@ -161,22 +204,27 @@ public static void TripleDES_FailureToRoundTrip192Bits_DifferentPadding_ANSIX923
161
204
}
162
205
}
163
206
164
- [ Fact ]
165
- public static void TripleDESRoundTrip192BitsZerosCBC ( )
207
+ [ Theory ]
208
+ [ InlineData ( 192 , "65f3dc211876a9daad238aa7d0c7ed7a3662296faf77dff9" , "5e970c0d2323d53b28fa3de507d6d20f9f0cd97123398b4d" ) ]
209
+ [ InlineData ( 128 , "2f55ff6bd8270f1d68dcb342bb674f914d9e1c0e61017a77" , "5e970c0d2323d53b28fa3de507d6d20f" ) ]
210
+ [ InlineData ( 192 , "2f55ff6bd8270f1d68dcb342bb674f914d9e1c0e61017a77" , "5e970c0d2323d53b28fa3de507d6d20f5e970c0d2323d53b" ) ]
211
+ public static void TripleDESRoundTripZerosCBC ( int keySize , string expectedCipherHex , string keyHex )
166
212
{
167
- byte [ ] key = "5e970c0d2323d53b28fa3de507d6d20f9f0cd97123398b4d" . HexToByteArray ( ) ;
213
+ byte [ ] key = keyHex . HexToByteArray ( ) ;
168
214
byte [ ] iv = "95498b5bf570f4c8" . HexToByteArray ( ) ;
169
215
170
216
using ( TripleDES alg = TripleDESFactory . Create ( ) )
171
217
{
172
218
alg . Key = key ;
219
+ Assert . Equal ( keySize , alg . KeySize ) ;
220
+
173
221
alg . IV = iv ;
174
222
alg . Padding = PaddingMode . Zeros ;
175
223
alg . Mode = CipherMode . CBC ;
176
224
177
225
byte [ ] plainText = "f9e9a1385bf3bd056d6a06eac662736891bd3e6837" . HexToByteArray ( ) ;
178
226
byte [ ] cipher = alg . Encrypt ( plainText ) ;
179
- byte [ ] expectedCipher = "65f3dc211876a9daad238aa7d0c7ed7a3662296faf77dff9" . HexToByteArray ( ) ;
227
+ byte [ ] expectedCipher = expectedCipherHex . HexToByteArray ( ) ;
180
228
Assert . Equal < byte > ( expectedCipher , cipher ) ;
181
229
182
230
byte [ ] decrypted = alg . Decrypt ( cipher ) ;
@@ -185,20 +233,25 @@ public static void TripleDESRoundTrip192BitsZerosCBC()
185
233
}
186
234
}
187
235
188
- [ Fact ]
189
- public static void TripleDESRoundTrip192BitsPKCS7ECB ( )
236
+ [ Theory ]
237
+ [ InlineData ( 192 , "7b8d982ee0c14821daf1b8cf4e407c2eb328627b696ac36e" , "155425f12109cd89378795a4ca337b3264689dca497ba2fa" ) ]
238
+ [ InlineData ( 128 , "ce7daa4723c4f880fb44c2809821fc2183b46f0c32084620" , "155425f12109cd89378795a4ca337b32" ) ]
239
+ [ InlineData ( 192 , "ce7daa4723c4f880fb44c2809821fc2183b46f0c32084620" , "155425f12109cd89378795a4ca337b32155425f12109cd89" ) ]
240
+ public static void TripleDESRoundTripPKCS7ECB ( int keySize , string expectedCipherHex , string keyHex )
190
241
{
191
- byte [ ] key = "155425f12109cd89378795a4ca337b3264689dca497ba2fa" . HexToByteArray ( ) ;
242
+ byte [ ] key = keyHex . HexToByteArray ( ) ;
192
243
193
244
using ( TripleDES alg = TripleDESFactory . Create ( ) )
194
245
{
195
246
alg . Key = key ;
247
+ Assert . Equal ( keySize , alg . KeySize ) ;
248
+
196
249
alg . Padding = PaddingMode . PKCS7 ;
197
250
alg . Mode = CipherMode . ECB ;
198
251
199
252
byte [ ] plainText = "5bd3c4e16a723a17ac60dd0efdb158e269cddfd0fa" . HexToByteArray ( ) ;
200
253
byte [ ] cipher = alg . Encrypt ( plainText ) ;
201
- byte [ ] expectedCipher = "7b8d982ee0c14821daf1b8cf4e407c2eb328627b696ac36e" . HexToByteArray ( ) ;
254
+ byte [ ] expectedCipher = expectedCipherHex . HexToByteArray ( ) ;
202
255
Assert . Equal < byte > ( expectedCipher , cipher ) ;
203
256
204
257
byte [ ] decrypted = alg . Decrypt ( cipher ) ;
@@ -207,22 +260,27 @@ public static void TripleDESRoundTrip192BitsPKCS7ECB()
207
260
}
208
261
}
209
262
210
- [ Fact ]
211
- public static void TripleDESRoundTrip192BitsPKCS7CBC ( )
263
+ [ Theory ]
264
+ [ InlineData ( 192 , "446f57875e107702afde16b57eaf250b87b8110bef29af89" , "6b42da08f93e819fbd26fce0785b0eec3d0cb6bfa053c505" ) ]
265
+ [ InlineData ( 128 , "ebf995606ceceddf5c90a7302521bc1f6d31f330969cb768" , "6b42da08f93e819fbd26fce0785b0eec" ) ]
266
+ [ InlineData ( 192 , "ebf995606ceceddf5c90a7302521bc1f6d31f330969cb768" , "6b42da08f93e819fbd26fce0785b0eec6b42da08f93e819f" ) ]
267
+ public static void TripleDESRoundTripPKCS7CBC ( int keySize , string expectedCipherHex , string keyHex )
212
268
{
213
- byte [ ] key = "6b42da08f93e819fbd26fce0785b0eec3d0cb6bfa053c505" . HexToByteArray ( ) ;
269
+ byte [ ] key = keyHex . HexToByteArray ( ) ;
214
270
byte [ ] iv = "8fc67ce5e7f28cde" . HexToByteArray ( ) ;
215
271
216
272
using ( TripleDES alg = TripleDESFactory . Create ( ) )
217
273
{
218
274
alg . Key = key ;
275
+ Assert . Equal ( keySize , alg . KeySize ) ;
276
+
219
277
alg . IV = iv ;
220
278
alg . Padding = PaddingMode . PKCS7 ;
221
279
alg . Mode = CipherMode . CBC ;
222
280
223
281
byte [ ] plainText = "e867f915e275eab27d6951165d26dec6dd0acafcfc" . HexToByteArray ( ) ;
224
282
byte [ ] cipher = alg . Encrypt ( plainText ) ;
225
- byte [ ] expectedCipher = "446f57875e107702afde16b57eaf250b87b8110bef29af89" . HexToByteArray ( ) ;
283
+ byte [ ] expectedCipher = expectedCipherHex . HexToByteArray ( ) ;
226
284
Assert . Equal < byte > ( expectedCipher , cipher ) ;
227
285
228
286
byte [ ] decrypted = alg . Decrypt ( cipher ) ;
0 commit comments