Skip to content

Commit 80f09a9

Browse files
committed
tests: refactor piv tests to reuse base class
1 parent 745b9b1 commit 80f09a9

21 files changed

+748
-1463
lines changed

Yubico.YubiKey/tests/integration/Yubico/YubiKey/Piv/AesMgmtKeyTests.cs

Lines changed: 56 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,20 @@
2121
namespace Yubico.YubiKey.Piv
2222
{
2323
[Trait(TraitTypes.Category, TestCategories.Simple)]
24-
public class AesMgmtKeyTests : IDisposable
24+
public class AesMgmtKeyTests : PivSessionIntegrationTestBase
2525
{
2626
private readonly Memory<byte> _currentKey;
2727
private readonly byte[] _currentKeyBytes;
2828
private readonly Memory<byte> _newKey;
2929
private readonly byte[] _newKeyBytes;
30-
private readonly bool _runTest;
31-
private readonly IYubiKeyDevice _yubiKey;
3230
private int _currentKeyLength;
3331
private int _newKeyLength;
32+
private KeyType DefaultMgmtKeyType { get; }
3433

3534
public AesMgmtKeyTests()
3635
{
36+
Skip.If(!Device.HasFeature(YubiKeyFeature.PivAesManagementKey));
37+
3738
_currentKeyBytes = new byte[]
3839
{
3940
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
@@ -43,31 +44,15 @@ public AesMgmtKeyTests()
4344
};
4445
_newKeyBytes = new byte[32];
4546

46-
using RandomNumberGenerator random = RandomObjectUtility.GetRandomObject(null);
47-
{
48-
random.GetBytes(_newKeyBytes);
49-
}
47+
using var random = RandomObjectUtility.GetRandomObject(null);
48+
random.GetBytes(_newKeyBytes);
5049

5150
_currentKey = new Memory<byte>(_currentKeyBytes);
5251
_newKey = new Memory<byte>(_newKeyBytes);
5352
_currentKeyLength = 24;
5453
_newKeyLength = 32;
5554

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;
7156
}
7257

7358
[Theory]
@@ -79,35 +64,33 @@ public void Dispose()
7964
[InlineData(KeyType.AES256, 32, false)]
8065
[InlineData(KeyType.TripleDES, 24, true)]
8166
[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)
8371
{
84-
if (!_runTest)
85-
{
86-
return;
87-
}
88-
89-
AuthenticateManagementKeyResult expectedResult = mutualAuth
72+
var expectedResult = mutualAuth
9073
? AuthenticateManagementKeyResult.MutualFullyAuthenticated
9174
: AuthenticateManagementKeyResult.SingleAuthenticated;
9275

9376
SetKeyLengths(24, keySize);
94-
using (var pivSession = new PivSession(_yubiKey))
77+
using (var pivSession = GetSession(authenticate: false))
9578
{
9679
pivSession.KeyCollector = AesMgmtKeyTestsKeyCollectorDelegate;
9780
Assert.False(pivSession.ManagementKeyAuthenticated);
98-
Assert.Equal(KeyType.TripleDES.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
81+
Assert.Equal(DefaultMgmtKeyType.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
9982

10083
pivSession.AuthenticateManagementKey(mutualAuth);
10184
Assert.True(pivSession.ManagementKeyAuthenticated);
10285
Assert.Equal(expectedResult, pivSession.ManagementKeyAuthenticationResult);
103-
Assert.Equal(KeyType.TripleDES.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
86+
Assert.Equal(DefaultMgmtKeyType.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
10487
}
10588

106-
using (var pivSession = new PivSession(_yubiKey))
89+
using (var pivSession = GetSession(authenticate: false))
10790
{
10891
pivSession.KeyCollector = AesMgmtKeyTestsKeyCollectorDelegate;
10992
Assert.False(pivSession.ManagementKeyAuthenticated);
110-
Assert.Equal(KeyType.TripleDES.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
93+
Assert.Equal(DefaultMgmtKeyType.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
11194

11295
pivSession.ChangeManagementKey(PivTouchPolicy.None, keyType.GetPivAlgorithm());
11396

@@ -117,22 +100,10 @@ public void ChangeMgmtKey_Auth_Succeeds(KeyType keyType, int keySize, bool mutua
117100
pivSession.ManagementKeyAuthenticationResult);
118101
Assert.Equal(keyType.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
119102

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-
132103
SwapKeys();
133104
}
134105

135-
using (var pivSession = new PivSession(_yubiKey))
106+
using (var pivSession = GetSession(authenticate: false))
136107
{
137108
pivSession.KeyCollector = AesMgmtKeyTestsKeyCollectorDelegate;
138109
Assert.False(pivSession.ManagementKeyAuthenticated);
@@ -154,38 +125,36 @@ public void ChangeMgmtKey_Auth_Succeeds(KeyType keyType, int keySize, bool mutua
154125
[InlineData(KeyType.AES256, 32, false)]
155126
[InlineData(KeyType.TripleDES, 24, true)]
156127
[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)
158132
{
159-
if (!_runTest)
160-
{
161-
return;
162-
}
163-
164-
AuthenticateManagementKeyResult expectedResult = mutualAuth
133+
var expectedResult = mutualAuth
165134
? AuthenticateManagementKeyResult.MutualFullyAuthenticated
166135
: AuthenticateManagementKeyResult.SingleAuthenticated;
167136

168137
SetKeyLengths(24, keySize);
169-
using (var pivSession = new PivSession(_yubiKey))
138+
using (var pivSession = GetSession(authenticate: false))
170139
{
171140
pivSession.KeyCollector = AesMgmtKeyTestsKeyCollectorDelegate;
172141
Assert.False(pivSession.ManagementKeyAuthenticated);
173-
Assert.Equal(KeyType.TripleDES.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
142+
Assert.Equal(DefaultManagementKeyType.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
174143

175-
bool isValid = pivSession.TryAuthenticateManagementKey(mutualAuth);
144+
var isValid = pivSession.TryAuthenticateManagementKey(mutualAuth);
176145
Assert.True(isValid);
177146
Assert.True(pivSession.ManagementKeyAuthenticated);
178147
Assert.Equal(expectedResult, pivSession.ManagementKeyAuthenticationResult);
179-
Assert.Equal(KeyType.TripleDES.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
148+
Assert.Equal(DefaultManagementKeyType.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
180149
}
181150

182-
using (var pivSession = new PivSession(_yubiKey))
151+
using (var pivSession = GetSession(authenticate: false))
183152
{
184153
pivSession.KeyCollector = AesMgmtKeyTestsKeyCollectorDelegate;
185154
Assert.False(pivSession.ManagementKeyAuthenticated);
186-
Assert.Equal(KeyType.TripleDES.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
155+
Assert.Equal(DefaultManagementKeyType.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
187156

188-
bool isValid = pivSession.TryChangeManagementKey(PivTouchPolicy.None, keyType.GetPivAlgorithm());
157+
var isValid = pivSession.TryChangeManagementKey(PivTouchPolicy.None, keyType.GetPivAlgorithm());
189158
Assert.True(isValid);
190159

191160
// The Change call will always use mutual auth.
@@ -197,13 +166,13 @@ public void ChangeMgmtKey_TryAuth_Succeeds(KeyType keyType, int keySize, bool mu
197166
SwapKeys();
198167
}
199168

200-
using (var pivSession = new PivSession(_yubiKey))
169+
using (var pivSession = GetSession(authenticate: false))
201170
{
202171
pivSession.KeyCollector = AesMgmtKeyTestsKeyCollectorDelegate;
203172
Assert.False(pivSession.ManagementKeyAuthenticated);
204173
Assert.Equal(keyType.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
205174

206-
bool isValid = pivSession.TryAuthenticateManagementKey(mutualAuth);
175+
var isValid = pivSession.TryAuthenticateManagementKey(mutualAuth);
207176
Assert.True(isValid);
208177
Assert.True(pivSession.ManagementKeyAuthenticated);
209178
Assert.Equal(expectedResult, pivSession.ManagementKeyAuthenticationResult);
@@ -220,37 +189,35 @@ public void ChangeMgmtKey_TryAuth_Succeeds(KeyType keyType, int keySize, bool mu
220189
[InlineData(KeyType.AES256, 32, false)]
221190
[InlineData(KeyType.TripleDES, 24, true)]
222191
[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)
224196
{
225-
if (!_runTest)
226-
{
227-
return;
228-
}
229-
230-
AuthenticateManagementKeyResult expectedResult = mutualAuth
197+
var expectedResult = mutualAuth
231198
? AuthenticateManagementKeyResult.MutualFullyAuthenticated
232199
: AuthenticateManagementKeyResult.SingleAuthenticated;
233200

234201
SetKeyLengths(24, keySize);
235-
using (var pivSession = new PivSession(_yubiKey))
202+
using (var pivSession = GetSession(authenticate: false))
236203
{
237204
Assert.False(pivSession.ManagementKeyAuthenticated);
238-
Assert.Equal(KeyType.TripleDES.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
205+
Assert.Equal(DefaultManagementKeyType.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
239206

240-
bool isValid =
207+
var isValid =
241208
pivSession.TryAuthenticateManagementKey(_currentKey.Slice(0, _currentKeyLength), mutualAuth);
242209
Assert.True(isValid);
243210
Assert.True(pivSession.ManagementKeyAuthenticated);
244211
Assert.Equal(expectedResult, pivSession.ManagementKeyAuthenticationResult);
245-
Assert.Equal(KeyType.TripleDES.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
212+
Assert.Equal(DefaultManagementKeyType.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
246213
}
247214

248-
using (var pivSession = new PivSession(_yubiKey))
215+
using (var pivSession = GetSession(authenticate: false))
249216
{
250217
Assert.False(pivSession.ManagementKeyAuthenticated);
251-
Assert.Equal(KeyType.TripleDES.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
218+
Assert.Equal(DefaultManagementKeyType.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
252219

253-
bool isValid = pivSession.TryChangeManagementKey(
220+
var isValid = pivSession.TryChangeManagementKey(
254221
_currentKey.Slice(0, _currentKeyLength),
255222
_newKey.Slice(0, _newKeyLength),
256223
PivTouchPolicy.None,
@@ -266,13 +233,13 @@ public void ChangeMgmtKey_TryAuthNoColl_Succeeds(KeyType keyType, int keySize, b
266233
SwapKeys();
267234
}
268235

269-
using (var pivSession = new PivSession(_yubiKey))
236+
using (var pivSession = GetSession(authenticate: false))
270237
{
271238
pivSession.KeyCollector = AesMgmtKeyTestsKeyCollectorDelegate;
272239
Assert.False(pivSession.ManagementKeyAuthenticated);
273240
Assert.Equal(keyType.GetPivAlgorithm(), pivSession.ManagementKeyAlgorithm);
274241

275-
bool isValid =
242+
var isValid =
276243
pivSession.TryAuthenticateManagementKey(_currentKey.Slice(0, _currentKeyLength), mutualAuth);
277244
Assert.True(isValid);
278245
Assert.True(pivSession.ManagementKeyAuthenticated);
@@ -281,13 +248,9 @@ public void ChangeMgmtKey_TryAuthNoColl_Succeeds(KeyType keyType, int keySize, b
281248
}
282249
}
283250

284-
public bool AesMgmtKeyTestsKeyCollectorDelegate(KeyEntryData keyEntryData)
251+
private bool AesMgmtKeyTestsKeyCollectorDelegate(
252+
KeyEntryData keyEntryData)
285253
{
286-
if (keyEntryData is null)
287-
{
288-
return false;
289-
}
290-
291254
if (keyEntryData.IsRetry)
292255
{
293256
return false;
@@ -302,13 +265,13 @@ public bool AesMgmtKeyTestsKeyCollectorDelegate(KeyEntryData keyEntryData)
302265
break;
303266

304267
case KeyEntryRequest.AuthenticatePivManagementKey:
305-
keyEntryData.SubmitValue(_currentKey.Slice(0, _currentKeyLength).Span);
268+
keyEntryData.SubmitValue(_currentKey[.._currentKeyLength].Span);
306269
break;
307270

308271
case KeyEntryRequest.ChangePivManagementKey:
309272
keyEntryData.SubmitValues(
310-
_currentKey.Slice(0, _currentKeyLength).Span,
311-
_newKey.Slice(0, _newKeyLength).Span);
273+
_currentKey[.._currentKeyLength].Span,
274+
_newKey[.._newKeyLength].Span);
312275
break;
313276
}
314277

@@ -319,28 +282,20 @@ public bool AesMgmtKeyTestsKeyCollectorDelegate(KeyEntryData keyEntryData)
319282
// swap the lengths.
320283
private void SwapKeys()
321284
{
322-
byte[] swapBuffer = new byte[32];
285+
var swapBuffer = new byte[32];
323286
Array.Copy(_currentKeyBytes, swapBuffer, 32);
324287
Array.Copy(_newKeyBytes, _currentKeyBytes, 32);
325288
Array.Copy(swapBuffer, _newKeyBytes, 32);
326289

327-
int swapLength = _currentKeyLength;
328-
_currentKeyLength = _newKeyLength;
329-
_newKeyLength = swapLength;
290+
(_currentKeyLength, _newKeyLength) = (_newKeyLength, _currentKeyLength);
330291
}
331292

332-
private void SetKeyLengths(int currentKeyLength, int newKeyLength)
293+
private void SetKeyLengths(
294+
int currentKeyLength,
295+
int newKeyLength)
333296
{
334297
_currentKeyLength = currentKeyLength;
335298
_newKeyLength = newKeyLength;
336299
}
337-
338-
private static void ResetPiv(IYubiKeyDevice yubiKey)
339-
{
340-
using (var pivSession = new PivSession(yubiKey))
341-
{
342-
pivSession.ResetApplication();
343-
}
344-
}
345300
}
346301
}

0 commit comments

Comments
 (0)