Skip to content

Commit b02e470

Browse files
committed
SHA1 primary check fails if there are multiple primary signatures, which shouldn't happen in the first place.
1 parent b3ccc02 commit b02e470

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

AuthenticodeLint/Rules/10000-Sha1PrimarySignatureRule.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,16 @@ public class Sha1PrimarySignatureRule : IAuthenticodeSignatureRule
1313

1414
public RuleResult Validate(IReadOnlyList<ISignature> graph, SignatureLogger verboseWriter, CheckConfiguration configuration)
1515
{
16-
var primary = graph.SingleOrDefault();
17-
//There are zero signatures.
18-
if (primary == null)
16+
if (graph.Count == 0)
1917
{
2018
return RuleResult.Fail;
2119
}
20+
if (graph.Count > 1)
21+
{
22+
verboseWriter.LogMessage("Multiple primary signatures exist.");
23+
return RuleResult.Fail;
24+
}
25+
var primary = graph[0];
2226
if (primary.DigestAlgorithm.Value != KnownOids.SHA1)
2327
{
2428
verboseWriter.LogSignatureMessage(primary, $"Expected {nameof(KnownOids.SHA1)} digest algorithm but is {primary.DigestAlgorithm.FriendlyName}.");

AuthenticodeLintTests/Rules/Sha1PrimarySignatureRuleTests.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,25 @@ public void ShouldPassOnSha1Algorithm()
4646
Assert.Equal(RuleResult.Pass, result);
4747
Assert.Empty(logger.Messages);
4848
}
49+
50+
51+
[Fact]
52+
public void ShouldFailOnMultiplePrimarySignatures()
53+
{
54+
var signature1 = new FakeSignature
55+
{
56+
DigestAlgorithm = new Oid(KnownOids.SHA1)
57+
};
58+
var signature2 = new FakeSignature
59+
{
60+
DigestAlgorithm = new Oid(KnownOids.SHA256)
61+
};
62+
var check = new Sha1PrimarySignatureRule();
63+
var logger = new MemorySignatureLogger();
64+
var result = check.Validate(new List<ISignature> { signature1, signature2 }, logger, Configuration);
65+
Assert.Equal(RuleResult.Fail, result);
66+
Assert.Contains("Multiple primary signatures exist.", logger.Messages);
67+
68+
}
4969
}
5070
}

0 commit comments

Comments
 (0)