Skip to content

Commit bddb018

Browse files
authored
Merge pull request #197
Consolidated public, private key and certificate test data into manageable class
2 parents 5f44cd0 + 3b1c965 commit bddb018

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+1225
-671
lines changed

Yubico.YubiKey/src/Yubico/YubiKey/Piv/PivAlgorithm.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,15 @@ public enum PivAlgorithm
8585
/// </summary>
8686
EccP384 = 0x14,
8787

88+
/// <summary>
89+
/// Indicates that the algorithm is ECC and the parameters are P-521,
90+
/// </summary>
91+
EccP521 = 0x15,
92+
8893
/// <summary>
8994
/// Indicates that the slot contains a PIN or PUK (slots 80 and 81).
9095
/// While not a cryptographic algorithm, it is used in the PIV Metadata.
9196
/// </summary>
92-
Pin = 0xFF
97+
Pin = 0xFF,
9398
}
9499
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,14 +283,14 @@ private static bool LoadAttestationPair(PivAlgorithm algorithm, bool isValidCert
283283
var collectorObj = new Simple39KeyCollector();
284284
pivSession.KeyCollector = collectorObj.Simple39KeyCollectorDelegate;
285285

286-
if (SampleKeyPairs.GetKeysAndCertPem(algorithm, isValidCert, out string certPem, out _, out string privateKeyPem) == false)
286+
if (SampleKeyPairs.GetKeysAndCertPem(algorithm, isValidCert, out var certPem, out _, out var privateKeyPem) == false)
287287
{
288288
return false;
289289
}
290290

291-
var cert = new CertConverter(certPem.ToCharArray());
291+
var cert = new CertConverter(certPem!.ToCharArray());
292292
X509Certificate2 certObj = cert.GetCertObject();
293-
var privateKey = new KeyConverter(privateKeyPem.ToCharArray());
293+
var privateKey = new KeyConverter(privateKeyPem!.ToCharArray());
294294
PivPrivateKey pivPrivateKey = privateKey.GetPivPrivateKey();
295295

296296
pivSession.ReplaceAttestationKeyAndCertificate(pivPrivateKey, certObj);

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ public void SingleCertSize_3052(StandardTestDevice testDeviceType)
3232
using RandomNumberGenerator rng = RandomObjectUtility.GetRandomObject(null);
3333
using X509Certificate2 caCert = GetCACert();
3434

35-
_ = SampleKeyPairs.GetKeysAndCertPem(PivAlgorithm.Rsa2048, false, out _, out string pubKey, out string priKey);
36-
var convertPublic = new KeyConverter(pubKey.ToCharArray());
35+
_ = SampleKeyPairs.GetKeysAndCertPem(PivAlgorithm.Rsa2048, false, out _, out var pubKey, out var priKey);
36+
var convertPublic = new KeyConverter(pubKey!.ToCharArray());
3737
RSA dotNetPublicKey = convertPublic.GetRsaObject();
38-
var convertPrivate = new KeyConverter(priKey.ToCharArray());
38+
var convertPrivate = new KeyConverter(priKey!.ToCharArray());
3939
PivPrivateKey pivPrivateKey = convertPrivate.GetPivPrivateKey();
4040

4141
IYubiKeyDevice testDevice = IntegrationTestDeviceEnumeration.GetTestDevice(testDeviceType);
@@ -88,10 +88,10 @@ public void MultipleCerts_3052(StandardTestDevice testDeviceType)
8888
using RandomNumberGenerator rng = RandomObjectUtility.GetRandomObject(null);
8989
using X509Certificate2 caCert = GetCACert();
9090

91-
_ = SampleKeyPairs.GetKeysAndCertPem(PivAlgorithm.Rsa2048, false, out _, out string pubKey, out string priKey);
92-
var convertPublic = new KeyConverter(pubKey.ToCharArray());
91+
_ = SampleKeyPairs.GetKeysAndCertPem(PivAlgorithm.Rsa2048, false, out _, out var pubKey, out var priKey);
92+
var convertPublic = new KeyConverter(pubKey!.ToCharArray());
9393
RSA dotNetPublicKey = convertPublic.GetRsaObject();
94-
var convertPrivate = new KeyConverter(priKey.ToCharArray());
94+
var convertPrivate = new KeyConverter(priKey!.ToCharArray());
9595
PivPrivateKey pivPrivateKey = convertPrivate.GetPivPrivateKey();
9696

9797
IYubiKeyDevice testDevice = IntegrationTestDeviceEnumeration.GetTestDevice(testDeviceType);
@@ -132,10 +132,10 @@ public void AllSlot_2079(StandardTestDevice testDeviceType)
132132
using RandomNumberGenerator rng = RandomObjectUtility.GetRandomObject(null);
133133
using X509Certificate2 caCert = GetCACert();
134134

135-
_ = SampleKeyPairs.GetKeysAndCertPem(PivAlgorithm.Rsa2048, false, out _, out string pubKey, out string priKey);
136-
var convertPublic = new KeyConverter(pubKey.ToCharArray());
135+
_ = SampleKeyPairs.GetKeysAndCertPem(PivAlgorithm.Rsa2048, false, out _, out var pubKey, out var priKey);
136+
var convertPublic = new KeyConverter(pubKey!.ToCharArray());
137137
RSA dotNetPublicKey = convertPublic.GetRsaObject();
138-
var convertPrivate = new KeyConverter(priKey.ToCharArray());
138+
var convertPrivate = new KeyConverter(priKey!.ToCharArray());
139139
PivPrivateKey pivPrivateKey = convertPrivate.GetPivPrivateKey();
140140

141141
IYubiKeyDevice testDevice = IntegrationTestDeviceEnumeration.GetTestDevice(testDeviceType);
@@ -226,11 +226,11 @@ private static X509Certificate2 GetCertWithRandomExtension(
226226
private static X509Certificate2 GetCACert()
227227
{
228228
_ = SampleKeyPairs.GetKeysAndCertPem(
229-
PivAlgorithm.Rsa2048, true, out string certPem, out _, out string privateKeyPem);
229+
PivAlgorithm.Rsa2048, true, out var certPem, out _, out var privateKeyPem);
230230

231-
var cert = new CertConverter(certPem.ToCharArray());
231+
var cert = new CertConverter(certPem!.ToCharArray());
232232
X509Certificate2 certObj = cert.GetCertObject();
233-
var privateKey = new KeyConverter(privateKeyPem.ToCharArray());
233+
var privateKey = new KeyConverter(privateKeyPem!.ToCharArray());
234234
RSA dotnetObj = privateKey.GetRsaObject();
235235
X509Certificate2 certCopy = certObj.CopyWithPrivateKey(dotnetObj);
236236

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ public class CertTests
3131
[InlineData(StandardTestDevice.Fw5, PivAlgorithm.Rsa4096)]
3232
public void GetCert_Succeeds(StandardTestDevice targetDevice, PivAlgorithm algorithm)
3333
{
34-
_ = SampleKeyPairs.GetKeysAndCertPem(algorithm, true, out var certPem, out string _, out var privateKeyPem);
34+
_ = SampleKeyPairs.GetKeysAndCertPem(algorithm, true, out var certPem, out var _, out var privateKeyPem);
3535

36-
var certConverter = new CertConverter(certPem.ToCharArray());
36+
var certConverter = new CertConverter(certPem!.ToCharArray());
3737
var certificate = certConverter.GetCertObject();
38-
var privateKey = new KeyConverter(privateKeyPem.ToCharArray());
38+
var privateKey = new KeyConverter(privateKeyPem!.ToCharArray());
3939
var pivPrivateKey = privateKey.GetPivPrivateKey();
4040
var testDevice = IntegrationTestDeviceEnumeration.GetTestDevice(targetDevice);
4141

@@ -62,9 +62,9 @@ public void GetCert_NoAuth_Succeeds(StandardTestDevice targetDevice, PivAlgorith
6262
var isValid = SampleKeyPairs.GetKeysAndCertPem(algorithm, true, out var certPem, out _, out var privateKeyPem);
6363
Assert.True(isValid);
6464

65-
var certConverter = new CertConverter(certPem.ToCharArray());
65+
var certConverter = new CertConverter(certPem!.ToCharArray());
6666
var certificate = certConverter.GetCertObject();
67-
var privateKey = new KeyConverter(privateKeyPem.ToCharArray());
67+
var privateKey = new KeyConverter(privateKeyPem!.ToCharArray());
6868
var pivPrivateKey = privateKey.GetPivPrivateKey();
6969

7070
byte slotNumber = 0x8B;

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public void Decrypt_1024_Succeeds(PivPinPolicy pinPolicy, StandardTestDevice tes
4141
};
4242

4343
_ = SampleKeyPairs.GetKeysAndCertPem(PivAlgorithm.Rsa1024, false, out _, out _, out var privateKeyPem);
44-
var privateKey = new KeyConverter(privateKeyPem.ToCharArray());
44+
var privateKey = new KeyConverter(privateKeyPem!.ToCharArray());
4545
var pivPrivateKey = privateKey.GetPivPrivateKey();
4646

4747
var testDevice = IntegrationTestDeviceEnumeration.GetTestDevice(testDeviceType);
@@ -82,7 +82,7 @@ public void Decrypt_2048_Succeeds(PivPinPolicy pinPolicy, StandardTestDevice tes
8282
};
8383

8484
_ = SampleKeyPairs.GetKeysAndCertPem(PivAlgorithm.Rsa2048, false, out _, out _, out var privateKeyPem);
85-
var privateKey = new KeyConverter(privateKeyPem.ToCharArray());
85+
var privateKey = new KeyConverter(privateKeyPem!.ToCharArray());
8686
var pivPrivateKey = privateKey.GetPivPrivateKey();
8787

8888
var testDevice = IntegrationTestDeviceEnumeration.GetTestDevice(testDeviceType);
@@ -127,8 +127,8 @@ public void EncryptCSharp_Decrypt_Correct(PivAlgorithm algorithm, byte slotNumbe
127127
GetArbitraryData(dataToEncrypt);
128128

129129
_ = SampleKeyPairs.GetKeysAndCertPem(algorithm, false, out _, out var pubKeyPem, out var priKeyPem);
130-
var pubKey = new KeyConverter(pubKeyPem.ToCharArray());
131-
var priKey = new KeyConverter(priKeyPem.ToCharArray());
130+
var pubKey = new KeyConverter(pubKeyPem!.ToCharArray());
131+
var priKey = new KeyConverter(priKeyPem!.ToCharArray());
132132

133133
using var rsaObject = pubKey.GetRsaObject();
134134
var encryptedData = rsaObject.Encrypt(dataToEncrypt, rsaPadding);

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@
1313
// limitations under the License.
1414

1515
using System;
16-
using System.Security.Cryptography.X509Certificates;
1716
using Xunit;
1817
using Yubico.Core.Tlv;
1918
using Yubico.YubiKey.Piv.Commands;
2019
using Yubico.YubiKey.Scp;
21-
using Yubico.YubiKey.Scp03;
2220
using Yubico.YubiKey.TestUtilities;
2321

2422
namespace Yubico.YubiKey.Piv
@@ -33,7 +31,7 @@ public void Cert_Auth_Req(StandardTestDevice testDeviceType)
3331
out var cert, out var privateKey);
3432
Assert.True(isValid);
3533

36-
var certDer = cert.GetRawCertData();
34+
var certDer = cert!.GetRawCertData();
3735
byte[] feData = { 0xFE, 0x00 };
3836
var tlvWriter = new TlvWriter();
3937
using (tlvWriter.WriteNestedTlv(0x53))
@@ -54,7 +52,7 @@ public void Cert_Auth_Req(StandardTestDevice testDeviceType)
5452

5553
pivSession.KeyCollector = MgmtKeyOnlyKeyCollectorDelegate;
5654
pivSession.AuthenticateManagementKey();
57-
pivSession.ImportPrivateKey(PivSlot.Authentication, privateKey, PivPinPolicy.Never,
55+
pivSession.ImportPrivateKey(PivSlot.Authentication, privateKey!, PivPinPolicy.Never,
5856
PivTouchPolicy.Never);
5957
}
6058

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@ public void KeyAndCertImport(PivAlgorithm algorithm, StandardTestDevice testDevi
5959
var collectorObj = new Simple39KeyCollector();
6060
pivSession.KeyCollector = collectorObj.Simple39KeyCollectorDelegate;
6161

62-
isValid = SampleKeyPairs.GetMatchingKeyAndCert(algorithm, out X509Certificate2 cert, out PivPrivateKey privateKey);
62+
isValid = SampleKeyPairs.GetMatchingKeyAndCert(algorithm, out var cert, out var privateKey);
6363
Assert.True(isValid);
6464

65-
pivSession.ImportPrivateKey(0x90, privateKey);
66-
pivSession.ImportCertificate(0x90, cert);
65+
pivSession.ImportPrivateKey(0x90, privateKey!);
66+
pivSession.ImportCertificate(0x90, cert!);
6767
}
6868

6969
[SkippableTheory(typeof(NotSupportedException), typeof(DeviceNotFoundException))]
@@ -76,14 +76,14 @@ public void CertImport(PivAlgorithm algorithm, StandardTestDevice testDeviceType
7676
IYubiKeyDevice testDevice = IntegrationTestDeviceEnumeration.GetTestDevice(testDeviceType);
7777
Assert.True(testDevice.EnabledUsbCapabilities.HasFlag(YubiKeyCapabilities.Piv));
7878

79-
var isValid = SampleKeyPairs.GetMatchingKeyAndCert(algorithm, out X509Certificate2 cert, out PivPrivateKey _);
79+
var isValid = SampleKeyPairs.GetMatchingKeyAndCert(algorithm, out var cert, out var _);
8080
Assert.True(isValid);
8181

8282
using var pivSession = new PivSession(testDevice);
8383
var collectorObj = new Simple39KeyCollector();
8484
pivSession.KeyCollector = collectorObj.Simple39KeyCollectorDelegate;
8585

86-
pivSession.ImportCertificate(0x90, cert);
86+
pivSession.ImportCertificate(0x90, cert!);
8787
}
8888
}
8989
}

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ public class KeyAgreeTests
3131
[InlineData(PivAlgorithm.EccP384, PivPinPolicy.Never, StandardTestDevice.Fw5)]
3232
public void KeyAgree_Succeeds(PivAlgorithm algorithm, PivPinPolicy pinPolicy, StandardTestDevice testDeviceType)
3333
{
34-
_ = SampleKeyPairs.GetKeysAndCertPem(algorithm, false, out _, out string publicKeyPem, out _);
35-
var keyConverter = new KeyConverter(publicKeyPem.ToCharArray());
34+
_ = SampleKeyPairs.GetKeysAndCertPem(algorithm, false, out _, out var publicKeyPem, out _);
35+
var keyConverter = new KeyConverter(publicKeyPem!.ToCharArray());
3636
var pivPublicKey = keyConverter.GetPivPublicKey();
3737
var eccPublicKey = (PivEccPublicKey)pivPublicKey;
3838
var expectedSecretLength = (eccPublicKey.PublicPoint.Length - 1) / 2;
3939

40-
var isValid = SampleKeyPairs.GetKeysAndCertPem(algorithm, true, out _, out _, out string privateKeyPem);
40+
var isValid = SampleKeyPairs.GetKeysAndCertPem(algorithm, true, out _, out _, out var privateKeyPem);
4141
Assert.True(isValid);
42-
var privateKey = new KeyConverter(privateKeyPem.ToCharArray());
42+
var privateKey = new KeyConverter(privateKeyPem!.ToCharArray());
4343
PivPrivateKey pivPrivateKey = privateKey.GetPivPrivateKey();
4444

4545
IYubiKeyDevice testDevice = IntegrationTestDeviceEnumeration.GetTestDevice(testDeviceType);
@@ -67,9 +67,9 @@ public void KeyAgree_Succeeds(PivAlgorithm algorithm, PivPinPolicy pinPolicy, St
6767
public void KeyAgree_MatchesCSharp(PivAlgorithm algorithm, byte slotNumber, int digestAlgorithm, StandardTestDevice testDeviceType)
6868
{
6969
// Build the correspondent objects.
70-
bool isValid = SampleKeyPairs.GetKeysAndCertPem(algorithm, true, out _, out _, out string privateKeyPem);
70+
bool isValid = SampleKeyPairs.GetKeysAndCertPem(algorithm, true, out _, out _, out var privateKeyPem);
7171
Assert.True(isValid);
72-
var privateKey = new KeyConverter(privateKeyPem.ToCharArray());
72+
var privateKey = new KeyConverter(privateKeyPem!.ToCharArray());
7373

7474
PivPublicKey correspondentPub = privateKey.GetPivPublicKey();
7575
var correspondentEcc = (PivEccPublicKey)correspondentPub;
@@ -81,7 +81,7 @@ public void KeyAgree_MatchesCSharp(PivAlgorithm algorithm, byte slotNumber, int
8181

8282
// Build the YubiKey objects.
8383
_ = SampleKeyPairs.GetKeysAndCertPem(algorithm, false, out _, out _, out privateKeyPem);
84-
privateKey = new KeyConverter(privateKeyPem.ToCharArray());
84+
privateKey = new KeyConverter(privateKeyPem!.ToCharArray());
8585
PivPrivateKey pivPrivateKey = privateKey.GetPivPrivateKey();
8686

8787
ecDsaObject = privateKey.GetEccObject();
@@ -125,8 +125,8 @@ public void KeyAgree_MatchesCSharp(PivAlgorithm algorithm, byte slotNumber, int
125125
[InlineData(StandardTestDevice.Fw5)]
126126
public void NoKeyInSlot_KeyAgree_Exception(StandardTestDevice testDeviceType)
127127
{
128-
_ = SampleKeyPairs.GetKeysAndCertPem(PivAlgorithm.EccP384, false, out _, out string publicKeyPem, out _);
129-
var publicKey = new KeyConverter(publicKeyPem.ToCharArray());
128+
_ = SampleKeyPairs.GetKeysAndCertPem(PivAlgorithm.EccP384, false, out _, out var publicKeyPem, out _);
129+
var publicKey = new KeyConverter(publicKeyPem!.ToCharArray());
130130
PivPublicKey pivPublicKey = publicKey.GetPivPublicKey();
131131

132132
IYubiKeyDevice testDevice = IntegrationTestDeviceEnumeration.GetTestDevice(testDeviceType);

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,8 @@ public void MoveKey_WithImportedKey(PivAlgorithm expectedAlgorithm)
7575

7676
DeleteKeys(pivSession, sourceSlot, destinationSlot);
7777

78-
var keyConverter = SampleKeyPairs.GetKeyConverter(expectedAlgorithm);
79-
var importedPrivateKey = keyConverter.GetPivPrivateKey();
80-
var importedPublicKey = keyConverter.GetPivPublicKey();
78+
var importedPrivateKey = SampleKeyPairs.GetPivPrivateKey(expectedAlgorithm);
79+
var importedPublicKey = SampleKeyPairs.GetPivPublicKey(expectedAlgorithm);
8180

8281
pivSession.ImportPrivateKey(sourceSlot, importedPrivateKey);
8382

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ public class OaepTests
2626
[InlineData(StandardTestDevice.Fw5)]
2727
public void Parse_FromRsaClass(StandardTestDevice testDeviceType)
2828
{
29-
_ = SampleKeyPairs.GetKeysAndCertPem(PivAlgorithm.Rsa1024, false, out _, out string publicKeyPem, out string privateKeyPem);
29+
_ = SampleKeyPairs.GetKeysAndCertPem(PivAlgorithm.Rsa1024, false, out _, out var publicKeyPem, out var privateKeyPem);
3030

31-
var publicKey = new KeyConverter(publicKeyPem.ToCharArray());
32-
var privateKey = new KeyConverter(privateKeyPem.ToCharArray());
31+
var publicKey = new KeyConverter(publicKeyPem!.ToCharArray());
32+
var privateKey = new KeyConverter(privateKeyPem!.ToCharArray());
3333

3434
byte[] dataToEncrypt = {
3535
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,

0 commit comments

Comments
 (0)