Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CoseHandler.Tests/CoseHandler.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
Expand Down
29 changes: 3 additions & 26 deletions CoseHandler.Tests/SignWithKeyProviderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,7 @@ public void TestSignWithNoSigningKey()
Mock<ICoseSigningKeyProvider> mockedSignerKeyProvider = new(MockBehavior.Strict);
mockedSignerKeyProvider.Setup(x => x.GetProtectedHeaders()).Returns<CoseHeaderMap>(null);
mockedSignerKeyProvider.Setup(x => x.GetUnProtectedHeaders()).Returns<CoseHeaderMap>(null);
mockedSignerKeyProvider.Setup(x => x.HashAlgorithm).Returns(HashAlgorithmName.SHA256);
mockedSignerKeyProvider.Setup(x => x.GetECDsaKey(It.IsAny<bool>())).Returns<ECDsa>(null);
mockedSignerKeyProvider.Setup(x => x.GetRSAKey(It.IsAny<bool>())).Returns<RSA>(null);
mockedSignerKeyProvider.Setup(x => x.IsRSA).Returns(false);

// Setup KeyChain property to return empty list since no keys are available
mockedSignerKeyProvider.Setup(x => x.KeyChain).Returns(new List<AsymmetricAlgorithm>().AsReadOnly());
mockedSignerKeyProvider.Setup(x => x.GetCoseKey()).Returns<CoseKey>(null);

CoseSigningException exceptionText = Assert.ThrowsException<CoseSigningException>(() => CoseHandler.Sign(testPayload.ToArray(), mockedSignerKeyProvider.Object, false, new FileInfo(signedFile)));
exceptionText.Message.Should().Be("Unsupported certificate type for COSE signing.");
Expand All @@ -55,30 +49,13 @@ public void TestSignWithNoSigningKey()
[TestMethod]
public void TestSignWithEmptyPayload()
{
Mock<ICoseSigningKeyProvider> mockedSignerKeyProvider = new(MockBehavior.Strict);
ICoseSigningKeyProvider mockedSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
CoseSign1MessageFactory coseSign1MessageFactory = new();
X509Certificate2 selfSignedCertwithRSA = TestCertificateUtils.CreateCertificate();
ReadOnlyMemory<byte> testPayload = ReadOnlyMemory<byte>.Empty;

string signedFile = Path.GetTempFileName();

mockedSignerKeyProvider.Setup(x => x.GetProtectedHeaders()).Returns<CoseHeaderMap>(null);
mockedSignerKeyProvider.Setup(x => x.GetUnProtectedHeaders()).Returns<CoseHeaderMap>(null);
mockedSignerKeyProvider.Setup(x => x.HashAlgorithm).Returns(HashAlgorithmName.SHA256);
mockedSignerKeyProvider.Setup(x => x.GetECDsaKey(It.IsAny<bool>())).Returns<ECDsa>(null);
mockedSignerKeyProvider.Setup(x => x.GetRSAKey(It.IsAny<bool>())).Returns(selfSignedCertwithRSA.GetRSAPrivateKey());
mockedSignerKeyProvider.Setup(x => x.IsRSA).Returns(true);

// Setup KeyChain property
RSA? publicKey = selfSignedCertwithRSA.GetRSAPublicKey();
System.Collections.ObjectModel.ReadOnlyCollection<AsymmetricAlgorithm> keyChain = publicKey != null ? new List<AsymmetricAlgorithm> { publicKey }.AsReadOnly() : new List<AsymmetricAlgorithm>().AsReadOnly();
mockedSignerKeyProvider.Setup(x => x.KeyChain).Returns(keyChain);

bool isRSA = mockedSignerKeyProvider.Object.IsRSA;

mockedSignerKeyProvider.Object.IsRSA.Should().BeTrue();

ArgumentException exceptionText = Assert.ThrowsException<ArgumentException>(() => CoseHandler.Sign(testPayload.ToArray(), mockedSignerKeyProvider.Object, false, new FileInfo(signedFile)));
ArgumentException exceptionText = Assert.ThrowsException<ArgumentException>(() => CoseHandler.Sign(testPayload.ToArray(), mockedSigningKeyProvider, false, new FileInfo(signedFile)));

exceptionText.Message.Should().Be("Payload not provided.");
}
Expand Down
26 changes: 13 additions & 13 deletions CoseIndirectSignature.Tests/CoseHashEnvelopeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public void Setup()
[Test]
public void TestFactoryDefaultCreatesCoseHashEnvelop()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
using IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
new Random().NextBytes(randomBytes);
Expand Down Expand Up @@ -58,7 +58,7 @@ public void TestFactoryDefaultCreatesCoseHashEnvelop()
[Test]
public void TestFactoryExplicitCreatesCoseHashEnvelop()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
using IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
new Random().NextBytes(randomBytes);
Expand Down Expand Up @@ -125,7 +125,7 @@ public void TestExtensionMethodNullHandling(int testCase)
[Test]
public void ValidCoseHashEnvelopeMinusContentShouldInvalidate()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
CoseSign1MessageFactory factory = new();

byte[] randomBytes = new byte[50];
Expand All @@ -147,7 +147,7 @@ public void ValidCoseHashEnvelopeMinusContentShouldInvalidate()
[Test]
public void ValidCoseHashEnvelopePayloadHashAlgorithmUnprotectedHeaderShouldInvalidate()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
CoseSign1MessageFactory factory = new();

byte[] randomBytes = new byte[50];
Expand Down Expand Up @@ -182,7 +182,7 @@ public void ValidCoseHashEnvelopePayloadHashAlgorithmUnprotectedHeaderShouldInva
[Test]
public void ValidCoseHashEnvelopeInvalidPayloadHashAlgorithmShouldInvalidate()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
CoseSign1MessageFactory factory = new();

byte[] randomBytes = new byte[50];
Expand Down Expand Up @@ -215,7 +215,7 @@ public void ValidCoseHashEnvelopeInvalidPayloadHashAlgorithmShouldInvalidate()
[Test]
public void ValidCoseHashEnvelopePayloadPreImageContentTypeUnprotectedHeaderShouldValidate()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
CoseSign1MessageFactory factory = new();

byte[] randomBytes = new byte[50];
Expand Down Expand Up @@ -250,7 +250,7 @@ public void ValidCoseHashEnvelopePayloadPreImageContentTypeUnprotectedHeaderShou
[Test]
public void ValidCoseHashEnvelopePayloadNoPreImageContentShouldValidate()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
CoseSign1MessageFactory factory = new();

byte[] randomBytes = new byte[50];
Expand Down Expand Up @@ -282,7 +282,7 @@ public void ValidCoseHashEnvelopePayloadNoPreImageContentShouldValidate()
[Test]
public void ValidCoseHashEnvelopePayloadNoPreImageContentCoaPShouldValidate()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
CoseSign1MessageFactory factory = new();

byte[] randomBytes = new byte[50];
Expand Down Expand Up @@ -318,7 +318,7 @@ public void ValidCoseHashEnvelopePayloadNoPreImageContentCoaPShouldValidate()
[Test]
public void ValidCoseHashEnvelopePayloadNoPreImageContentCoaPUnprotectedShouldValidate()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
CoseSign1MessageFactory factory = new();

byte[] randomBytes = new byte[50];
Expand Down Expand Up @@ -354,7 +354,7 @@ public void ValidCoseHashEnvelopePayloadNoPreImageContentCoaPUnprotectedShouldVa
[Test]
public void ValidCoseHashEnvelopePayloadLocationProtectedHeaderShouldValidate()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
CoseSign1MessageFactory factory = new();

byte[] randomBytes = new byte[50];
Expand All @@ -379,7 +379,7 @@ public void ValidCoseHashEnvelopePayloadLocationProtectedHeaderShouldValidate()
[Test]
public void ValidCoseHashEnvelopePayloadLocationUnProtectedHeaderShouldInvalidate()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
CoseSign1MessageFactory factory = new();

byte[] randomBytes = new byte[50];
Expand Down Expand Up @@ -416,7 +416,7 @@ public void ValidCoseHashEnvelopePayloadLocationUnProtectedHeaderShouldInvalidat
[Test]
public void CoseMessage1MinusContentShouldNotHashMatch()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
CoseSign1MessageFactory factory = new();

byte[] randomBytes = new byte[50];
Expand All @@ -434,7 +434,7 @@ public void CoseMessage1MinusContentShouldNotHashMatch()
[Test]
public void CoseMessage1BadAlgorithmShouldNotHashMatch()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
CoseSign1MessageFactory factory = new();

byte[] randomBytes = new byte[50];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsPublishable>false</IsPublishable>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public void Setup()
[Test]
public void TestTryGetIndirectSignatureAlgorithmSuccess()
{
ICoseSigningKeyProvider coseSigningKeyProvider = SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
new Random().NextBytes(randomBytes);
Expand All @@ -34,7 +34,7 @@ public void TestTryGetIndirectSignatureAlgorithmSuccess()
[Test]
public void TestTryGetIndirectSignatureAlgorithmFailure()
{
ICoseSigningKeyProvider coseSigningKeyProvider = SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();

// no content type
Mock<ICoseHeaderExtender> removeContentTypeHeaderExtender = new(MockBehavior.Strict);
Expand Down Expand Up @@ -91,7 +91,7 @@ public void TestTryGetIndirectSignatureAlgorithmFailure()
[Test]
public void TestIsIndirectSignatureSuccess()
{
ICoseSigningKeyProvider coseSigningKeyProvider = SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
new Random().NextBytes(randomBytes);
Expand All @@ -104,7 +104,7 @@ public void TestIsIndirectSignatureSuccess()
[Test]
public void TestIsIndirectSignatureFailure()
{
ICoseSigningKeyProvider coseSigningKeyProvider = SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
new Random().NextBytes(randomBytes);
Expand All @@ -116,7 +116,7 @@ public void TestIsIndirectSignatureFailure()
[Test]
public void TestSignatureMatchesStreamSuccess()
{
ICoseSigningKeyProvider coseSigningKeyProvider = SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
new Random().NextBytes(randomBytes);
Expand All @@ -129,7 +129,7 @@ public void TestSignatureMatchesStreamSuccess()
[Test]
public void TestSignatureMatchesStreamFailure()
{
ICoseSigningKeyProvider coseSigningKeyProvider = SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
byte[] randomBytes2 = new byte[50];
Expand All @@ -156,7 +156,7 @@ public void TestSignatureMatchesStreamFailure()
[Test]
public void TestSignatureMatchesBytesSuccess()
{
ICoseSigningKeyProvider coseSigningKeyProvider = SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
new Random().NextBytes(randomBytes);
Expand All @@ -168,7 +168,7 @@ public void TestSignatureMatchesBytesSuccess()
[Test]
public void TestSignatureMatchesBytesFailure()
{
ICoseSigningKeyProvider coseSigningKeyProvider = SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
byte[] randomBytes2 = new byte[50];
Expand All @@ -191,7 +191,7 @@ public void TestSignatureMatchesBytesFailure()
[Test]
public void TestTryGetHashAlgorithmSuccess()
{
ICoseSigningKeyProvider coseSigningKeyProvider = SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
new Random().NextBytes(randomBytes);
Expand All @@ -215,7 +215,7 @@ public void TestTryGetHashAlgorithmSuccess()
[TestCase(8, Description = "TryGet - Null")]
public void TestGetCoseHashVScenarios(int testCase)
{
ICoseSigningKeyProvider coseSigningKeyProvider = SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
IndirectSignatureFactory signaturefactory = new();
CoseSign1MessageFactory messageFactory = new();
byte[] randomBytes = new byte[50];
Expand Down Expand Up @@ -279,7 +279,7 @@ public void TestGetCoseHashVScenarios(int testCase)
[Test]
public void TestTryGetHashAlgorithmFailure()
{
ICoseSigningKeyProvider coseSigningKeyProvider = SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
byte[] randomBytes2 = new byte[50];
Expand Down Expand Up @@ -307,24 +307,4 @@ public void TestTryGetHashAlgorithmFailure()
CoseSign1MessageIndirectSignatureExtensions.TryGetHashAlgorithm(IndirectSignature, out hashAlgorithm).Should().BeFalse();
hashAlgorithm.Should().BeNull();
}

private static ICoseSigningKeyProvider SetupMockSigningKeyProvider([CallerMemberName] string testName = "none")
{
Mock<ICoseSigningKeyProvider> mockedSignerKeyProvider = new(MockBehavior.Strict);
X509Certificate2 selfSignedCertWithRSA = TestCertificateUtils.CreateCertificate(testName);

mockedSignerKeyProvider.Setup(x => x.GetProtectedHeaders()).Returns<CoseHeaderMap>(null);
mockedSignerKeyProvider.Setup(x => x.GetUnProtectedHeaders()).Returns<CoseHeaderMap>(null);
mockedSignerKeyProvider.Setup(x => x.HashAlgorithm).Returns(HashAlgorithmName.SHA256);
mockedSignerKeyProvider.Setup(x => x.GetECDsaKey(It.IsAny<bool>())).Returns<ECDsa>(null);
mockedSignerKeyProvider.Setup(x => x.GetRSAKey(It.IsAny<bool>())).Returns(selfSignedCertWithRSA.GetRSAPrivateKey());
mockedSignerKeyProvider.Setup(x => x.IsRSA).Returns(true);

// Setup KeyChain property to return the public key from the certificate
RSA? publicKey = selfSignedCertWithRSA.GetRSAPublicKey();
System.Collections.ObjectModel.ReadOnlyCollection<AsymmetricAlgorithm> keyChain = publicKey != null ? new List<AsymmetricAlgorithm> { publicKey }.AsReadOnly() : new List<AsymmetricAlgorithm>().AsReadOnly();
mockedSignerKeyProvider.Setup(x => x.KeyChain).Returns(keyChain);

return mockedSignerKeyProvider.Object;
}
}
10 changes: 5 additions & 5 deletions CoseIndirectSignature.Tests/IndirectSignatureFactoryTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public void TestConstructors()
[Test]
public async Task TestCreateIndirectSignatureAsync()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
using IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
new Random().NextBytes(randomBytes);
Expand Down Expand Up @@ -150,7 +150,7 @@ public async Task TestCreateIndirectSignatureAsync()
[Test]
public async Task TestCreateIndirectSignatureHashProvidedAsync()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
using IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
new Random().NextBytes(randomBytes);
Expand Down Expand Up @@ -240,7 +240,7 @@ public async Task TestCreateIndirectSignatureHashProvidedAsync()
[Test]
public async Task TestCreateIndirectSignatureBytesAsync()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
using IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
new Random().NextBytes(randomBytes);
Expand Down Expand Up @@ -326,7 +326,7 @@ public async Task TestCreateIndirectSignatureBytesAsync()
[Test]
public async Task TestCreateIndirectSignatureBytesHashProvidedAsync()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
using IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
new Random().NextBytes(randomBytes);
Expand Down Expand Up @@ -422,7 +422,7 @@ public void TestCreateIndirectSignatureUnsupportedAlgorithmFailure()
[Test]
public void TestCreateIndirectSignatureAlreadyProvided()
{
ICoseSigningKeyProvider coseSigningKeyProvider = TestUtils.SetupMockSigningKeyProvider();
ICoseSigningKeyProvider coseSigningKeyProvider = TestCertificateUtils.SetupMockSigningKeyProvider();
using IndirectSignatureFactory factory = new();
byte[] randomBytes = new byte[50];
new Random().NextBytes(randomBytes);
Expand Down
Loading
Loading