21
21
namespace Yubico . YubiKey . Piv
22
22
{
23
23
[ Trait ( TraitTypes . Category , TestCategories . Simple ) ]
24
- public class AesMgmtKeyTests : IDisposable
24
+ public class AesMgmtKeyTests : PivSessionIntegrationTestBase
25
25
{
26
26
private readonly Memory < byte > _currentKey ;
27
27
private readonly byte [ ] _currentKeyBytes ;
28
28
private readonly Memory < byte > _newKey ;
29
29
private readonly byte [ ] _newKeyBytes ;
30
- private readonly bool _runTest ;
31
- private readonly IYubiKeyDevice _yubiKey ;
32
30
private int _currentKeyLength ;
33
31
private int _newKeyLength ;
32
+ private KeyType DefaultMgmtKeyType { get ; }
34
33
35
34
public AesMgmtKeyTests ( )
36
35
{
36
+ Skip . If ( ! Device . HasFeature ( YubiKeyFeature . PivAesManagementKey ) ) ;
37
+
37
38
_currentKeyBytes = new byte [ ]
38
39
{
39
40
0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 ,
@@ -43,31 +44,15 @@ public AesMgmtKeyTests()
43
44
} ;
44
45
_newKeyBytes = new byte [ 32 ] ;
45
46
46
- using RandomNumberGenerator random = RandomObjectUtility . GetRandomObject ( null ) ;
47
- {
48
- random . GetBytes ( _newKeyBytes ) ;
49
- }
47
+ using var random = RandomObjectUtility . GetRandomObject ( null ) ;
48
+ random . GetBytes ( _newKeyBytes ) ;
50
49
51
50
_currentKey = new Memory < byte > ( _currentKeyBytes ) ;
52
51
_newKey = new Memory < byte > ( _newKeyBytes ) ;
53
52
_currentKeyLength = 24 ;
54
53
_newKeyLength = 32 ;
55
54
56
- _yubiKey = IntegrationTestDeviceEnumeration . GetTestDevice ( StandardTestDevice . Fw5 ) ;
57
- if ( _yubiKey . HasFeature ( YubiKeyFeature . PivAesManagementKey ) )
58
- {
59
- _runTest = true ;
60
-
61
- ResetPiv ( _yubiKey ) ;
62
- }
63
- }
64
-
65
- public void Dispose ( )
66
- {
67
- if ( _runTest )
68
- {
69
- ResetPiv ( _yubiKey ) ;
70
- }
55
+ DefaultMgmtKeyType = Device . FirmwareVersion >= FirmwareVersion . V5_7_0 ? KeyType . AES192 : KeyType . TripleDES ;
71
56
}
72
57
73
58
[ Theory ]
@@ -79,35 +64,33 @@ public void Dispose()
79
64
[ InlineData ( KeyType . AES256 , 32 , false ) ]
80
65
[ InlineData ( KeyType . TripleDES , 24 , true ) ]
81
66
[ InlineData ( KeyType . TripleDES , 24 , false ) ]
82
- public void ChangeMgmtKey_Auth_Succeeds ( KeyType keyType , int keySize , bool mutualAuth )
67
+ public void ChangeMgmtKey_Auth_Succeeds (
68
+ KeyType keyType ,
69
+ int keySize ,
70
+ bool mutualAuth )
83
71
{
84
- if ( ! _runTest )
85
- {
86
- return ;
87
- }
88
-
89
- AuthenticateManagementKeyResult expectedResult = mutualAuth
72
+ var expectedResult = mutualAuth
90
73
? AuthenticateManagementKeyResult . MutualFullyAuthenticated
91
74
: AuthenticateManagementKeyResult . SingleAuthenticated ;
92
75
93
76
SetKeyLengths ( 24 , keySize ) ;
94
- using ( var pivSession = new PivSession ( _yubiKey ) )
77
+ using ( var pivSession = GetSession ( authenticate : false ) )
95
78
{
96
79
pivSession . KeyCollector = AesMgmtKeyTestsKeyCollectorDelegate ;
97
80
Assert . False ( pivSession . ManagementKeyAuthenticated ) ;
98
- Assert . Equal ( KeyType . TripleDES . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
81
+ Assert . Equal ( DefaultMgmtKeyType . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
99
82
100
83
pivSession . AuthenticateManagementKey ( mutualAuth ) ;
101
84
Assert . True ( pivSession . ManagementKeyAuthenticated ) ;
102
85
Assert . Equal ( expectedResult , pivSession . ManagementKeyAuthenticationResult ) ;
103
- Assert . Equal ( KeyType . TripleDES . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
86
+ Assert . Equal ( DefaultMgmtKeyType . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
104
87
}
105
88
106
- using ( var pivSession = new PivSession ( _yubiKey ) )
89
+ using ( var pivSession = GetSession ( authenticate : false ) )
107
90
{
108
91
pivSession . KeyCollector = AesMgmtKeyTestsKeyCollectorDelegate ;
109
92
Assert . False ( pivSession . ManagementKeyAuthenticated ) ;
110
- Assert . Equal ( KeyType . TripleDES . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
93
+ Assert . Equal ( DefaultMgmtKeyType . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
111
94
112
95
pivSession . ChangeManagementKey ( PivTouchPolicy . None , keyType . GetPivAlgorithm ( ) ) ;
113
96
@@ -117,22 +100,10 @@ public void ChangeMgmtKey_Auth_Succeeds(KeyType keyType, int keySize, bool mutua
117
100
pivSession . ManagementKeyAuthenticationResult ) ;
118
101
Assert . Equal ( keyType . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
119
102
120
- // start temp
121
- // pivSession.AuthenticateManagementKey(mutualAuth);
122
- //
123
- // var setCmd = new SetManagementKeyCommand(
124
- // _newKey.Slice(0, keySize), PivTouchPolicy.Never, keyType);
125
- //
126
- // SetManagementKeyResponse setRsp = pivSession.Connection.SendCommand(setCmd);
127
- // Assert.Equal(ResponseStatus.Success, setRsp.Status);
128
- // Assert.True(pivSession.ManagementKeyAuthenticated);
129
- // Assert.Equal(expectedResult, pivSession.ManagementKeyAuthenticationResult);
130
- // end temp
131
-
132
103
SwapKeys ( ) ;
133
104
}
134
105
135
- using ( var pivSession = new PivSession ( _yubiKey ) )
106
+ using ( var pivSession = GetSession ( authenticate : false ) )
136
107
{
137
108
pivSession . KeyCollector = AesMgmtKeyTestsKeyCollectorDelegate ;
138
109
Assert . False ( pivSession . ManagementKeyAuthenticated ) ;
@@ -154,38 +125,36 @@ public void ChangeMgmtKey_Auth_Succeeds(KeyType keyType, int keySize, bool mutua
154
125
[ InlineData ( KeyType . AES256 , 32 , false ) ]
155
126
[ InlineData ( KeyType . TripleDES , 24 , true ) ]
156
127
[ InlineData ( KeyType . TripleDES , 24 , false ) ]
157
- public void ChangeMgmtKey_TryAuth_Succeeds ( KeyType keyType , int keySize , bool mutualAuth )
128
+ public void ChangeMgmtKey_TryAuth_Succeeds (
129
+ KeyType keyType ,
130
+ int keySize ,
131
+ bool mutualAuth )
158
132
{
159
- if ( ! _runTest )
160
- {
161
- return ;
162
- }
163
-
164
- AuthenticateManagementKeyResult expectedResult = mutualAuth
133
+ var expectedResult = mutualAuth
165
134
? AuthenticateManagementKeyResult . MutualFullyAuthenticated
166
135
: AuthenticateManagementKeyResult . SingleAuthenticated ;
167
136
168
137
SetKeyLengths ( 24 , keySize ) ;
169
- using ( var pivSession = new PivSession ( _yubiKey ) )
138
+ using ( var pivSession = GetSession ( authenticate : false ) )
170
139
{
171
140
pivSession . KeyCollector = AesMgmtKeyTestsKeyCollectorDelegate ;
172
141
Assert . False ( pivSession . ManagementKeyAuthenticated ) ;
173
- Assert . Equal ( KeyType . TripleDES . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
142
+ Assert . Equal ( DefaultManagementKeyType . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
174
143
175
- bool isValid = pivSession . TryAuthenticateManagementKey ( mutualAuth ) ;
144
+ var isValid = pivSession . TryAuthenticateManagementKey ( mutualAuth ) ;
176
145
Assert . True ( isValid ) ;
177
146
Assert . True ( pivSession . ManagementKeyAuthenticated ) ;
178
147
Assert . Equal ( expectedResult , pivSession . ManagementKeyAuthenticationResult ) ;
179
- Assert . Equal ( KeyType . TripleDES . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
148
+ Assert . Equal ( DefaultManagementKeyType . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
180
149
}
181
150
182
- using ( var pivSession = new PivSession ( _yubiKey ) )
151
+ using ( var pivSession = GetSession ( authenticate : false ) )
183
152
{
184
153
pivSession . KeyCollector = AesMgmtKeyTestsKeyCollectorDelegate ;
185
154
Assert . False ( pivSession . ManagementKeyAuthenticated ) ;
186
- Assert . Equal ( KeyType . TripleDES . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
155
+ Assert . Equal ( DefaultManagementKeyType . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
187
156
188
- bool isValid = pivSession . TryChangeManagementKey ( PivTouchPolicy . None , keyType . GetPivAlgorithm ( ) ) ;
157
+ var isValid = pivSession . TryChangeManagementKey ( PivTouchPolicy . None , keyType . GetPivAlgorithm ( ) ) ;
189
158
Assert . True ( isValid ) ;
190
159
191
160
// The Change call will always use mutual auth.
@@ -197,13 +166,13 @@ public void ChangeMgmtKey_TryAuth_Succeeds(KeyType keyType, int keySize, bool mu
197
166
SwapKeys ( ) ;
198
167
}
199
168
200
- using ( var pivSession = new PivSession ( _yubiKey ) )
169
+ using ( var pivSession = GetSession ( authenticate : false ) )
201
170
{
202
171
pivSession . KeyCollector = AesMgmtKeyTestsKeyCollectorDelegate ;
203
172
Assert . False ( pivSession . ManagementKeyAuthenticated ) ;
204
173
Assert . Equal ( keyType . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
205
174
206
- bool isValid = pivSession . TryAuthenticateManagementKey ( mutualAuth ) ;
175
+ var isValid = pivSession . TryAuthenticateManagementKey ( mutualAuth ) ;
207
176
Assert . True ( isValid ) ;
208
177
Assert . True ( pivSession . ManagementKeyAuthenticated ) ;
209
178
Assert . Equal ( expectedResult , pivSession . ManagementKeyAuthenticationResult ) ;
@@ -220,37 +189,35 @@ public void ChangeMgmtKey_TryAuth_Succeeds(KeyType keyType, int keySize, bool mu
220
189
[ InlineData ( KeyType . AES256 , 32 , false ) ]
221
190
[ InlineData ( KeyType . TripleDES , 24 , true ) ]
222
191
[ InlineData ( KeyType . TripleDES , 24 , false ) ]
223
- public void ChangeMgmtKey_TryAuthNoColl_Succeeds ( KeyType keyType , int keySize , bool mutualAuth )
192
+ public void ChangeMgmtKey_TryAuthNoColl_Succeeds (
193
+ KeyType keyType ,
194
+ int keySize ,
195
+ bool mutualAuth )
224
196
{
225
- if ( ! _runTest )
226
- {
227
- return ;
228
- }
229
-
230
- AuthenticateManagementKeyResult expectedResult = mutualAuth
197
+ var expectedResult = mutualAuth
231
198
? AuthenticateManagementKeyResult . MutualFullyAuthenticated
232
199
: AuthenticateManagementKeyResult . SingleAuthenticated ;
233
200
234
201
SetKeyLengths ( 24 , keySize ) ;
235
- using ( var pivSession = new PivSession ( _yubiKey ) )
202
+ using ( var pivSession = GetSession ( authenticate : false ) )
236
203
{
237
204
Assert . False ( pivSession . ManagementKeyAuthenticated ) ;
238
- Assert . Equal ( KeyType . TripleDES . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
205
+ Assert . Equal ( DefaultManagementKeyType . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
239
206
240
- bool isValid =
207
+ var isValid =
241
208
pivSession . TryAuthenticateManagementKey ( _currentKey . Slice ( 0 , _currentKeyLength ) , mutualAuth ) ;
242
209
Assert . True ( isValid ) ;
243
210
Assert . True ( pivSession . ManagementKeyAuthenticated ) ;
244
211
Assert . Equal ( expectedResult , pivSession . ManagementKeyAuthenticationResult ) ;
245
- Assert . Equal ( KeyType . TripleDES . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
212
+ Assert . Equal ( DefaultManagementKeyType . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
246
213
}
247
214
248
- using ( var pivSession = new PivSession ( _yubiKey ) )
215
+ using ( var pivSession = GetSession ( authenticate : false ) )
249
216
{
250
217
Assert . False ( pivSession . ManagementKeyAuthenticated ) ;
251
- Assert . Equal ( KeyType . TripleDES . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
218
+ Assert . Equal ( DefaultManagementKeyType . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
252
219
253
- bool isValid = pivSession . TryChangeManagementKey (
220
+ var isValid = pivSession . TryChangeManagementKey (
254
221
_currentKey . Slice ( 0 , _currentKeyLength ) ,
255
222
_newKey . Slice ( 0 , _newKeyLength ) ,
256
223
PivTouchPolicy . None ,
@@ -266,13 +233,13 @@ public void ChangeMgmtKey_TryAuthNoColl_Succeeds(KeyType keyType, int keySize, b
266
233
SwapKeys ( ) ;
267
234
}
268
235
269
- using ( var pivSession = new PivSession ( _yubiKey ) )
236
+ using ( var pivSession = GetSession ( authenticate : false ) )
270
237
{
271
238
pivSession . KeyCollector = AesMgmtKeyTestsKeyCollectorDelegate ;
272
239
Assert . False ( pivSession . ManagementKeyAuthenticated ) ;
273
240
Assert . Equal ( keyType . GetPivAlgorithm ( ) , pivSession . ManagementKeyAlgorithm ) ;
274
241
275
- bool isValid =
242
+ var isValid =
276
243
pivSession . TryAuthenticateManagementKey ( _currentKey . Slice ( 0 , _currentKeyLength ) , mutualAuth ) ;
277
244
Assert . True ( isValid ) ;
278
245
Assert . True ( pivSession . ManagementKeyAuthenticated ) ;
@@ -281,13 +248,9 @@ public void ChangeMgmtKey_TryAuthNoColl_Succeeds(KeyType keyType, int keySize, b
281
248
}
282
249
}
283
250
284
- public bool AesMgmtKeyTestsKeyCollectorDelegate ( KeyEntryData keyEntryData )
251
+ private bool AesMgmtKeyTestsKeyCollectorDelegate (
252
+ KeyEntryData keyEntryData )
285
253
{
286
- if ( keyEntryData is null )
287
- {
288
- return false ;
289
- }
290
-
291
254
if ( keyEntryData . IsRetry )
292
255
{
293
256
return false ;
@@ -302,13 +265,13 @@ public bool AesMgmtKeyTestsKeyCollectorDelegate(KeyEntryData keyEntryData)
302
265
break ;
303
266
304
267
case KeyEntryRequest . AuthenticatePivManagementKey :
305
- keyEntryData . SubmitValue ( _currentKey . Slice ( 0 , _currentKeyLength ) . Span ) ;
268
+ keyEntryData . SubmitValue ( _currentKey [ .. _currentKeyLength ] . Span ) ;
306
269
break ;
307
270
308
271
case KeyEntryRequest . ChangePivManagementKey :
309
272
keyEntryData . SubmitValues (
310
- _currentKey . Slice ( 0 , _currentKeyLength ) . Span ,
311
- _newKey . Slice ( 0 , _newKeyLength ) . Span ) ;
273
+ _currentKey [ .. _currentKeyLength ] . Span ,
274
+ _newKey [ .. _newKeyLength ] . Span ) ;
312
275
break ;
313
276
}
314
277
@@ -319,28 +282,20 @@ public bool AesMgmtKeyTestsKeyCollectorDelegate(KeyEntryData keyEntryData)
319
282
// swap the lengths.
320
283
private void SwapKeys ( )
321
284
{
322
- byte [ ] swapBuffer = new byte [ 32 ] ;
285
+ var swapBuffer = new byte [ 32 ] ;
323
286
Array . Copy ( _currentKeyBytes , swapBuffer , 32 ) ;
324
287
Array . Copy ( _newKeyBytes , _currentKeyBytes , 32 ) ;
325
288
Array . Copy ( swapBuffer , _newKeyBytes , 32 ) ;
326
289
327
- int swapLength = _currentKeyLength ;
328
- _currentKeyLength = _newKeyLength ;
329
- _newKeyLength = swapLength ;
290
+ ( _currentKeyLength , _newKeyLength ) = ( _newKeyLength , _currentKeyLength ) ;
330
291
}
331
292
332
- private void SetKeyLengths ( int currentKeyLength , int newKeyLength )
293
+ private void SetKeyLengths (
294
+ int currentKeyLength ,
295
+ int newKeyLength )
333
296
{
334
297
_currentKeyLength = currentKeyLength ;
335
298
_newKeyLength = newKeyLength ;
336
299
}
337
-
338
- private static void ResetPiv ( IYubiKeyDevice yubiKey )
339
- {
340
- using ( var pivSession = new PivSession ( yubiKey ) )
341
- {
342
- pivSession . ResetApplication ( ) ;
343
- }
344
- }
345
300
}
346
301
}
0 commit comments