Skip to content

Commit feda5f4

Browse files
committed
Updated AssemblyStrongNameRule to verify public key tokens
1 parent 826ff35 commit feda5f4

File tree

5 files changed

+24
-1
lines changed

5 files changed

+24
-1
lines changed

src/NuGetPackageVerifier/CompositeRules/AdxVerificationCompositeRule.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class AdxVerificationCompositeRule : IPackageVerifierRule
2020
new AssemblyHasProductAttributeRule(),
2121
new AssemblyHasServicingAttributeRule(),
2222
new AssemblyHasVersionAttributesRule(),
23+
new AssemblyStrongNameRule(),
2324
new SatellitePackageRule(),
2425
new StrictSemanticVersionValidationRule(),
2526
};

src/NuGetPackageVerifier/CompositeRules/DefaultCompositeRule.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class DefaultCompositeRule : IPackageVerifierRule
2121
new AssemblyHasProductAttributeRule(),
2222
new AssemblyHasServicingAttributeRule(),
2323
new AssemblyHasVersionAttributesRule(),
24+
new AssemblyStrongNameRule(),
2425
new SatellitePackageRule(),
2526
new StrictSemanticVersionValidationRule(),
2627
};

src/NuGetPackageVerifier/CompositeRules/NonAdxVerificationCompositeRule.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ public class NonAdxVerificationCompositeRule : IPackageVerifierRule
1212
{
1313
IPackageVerifierRule[] _rules = new IPackageVerifierRule[]
1414
{
15-
new AssemblyStrongNameRule(),
1615
new AuthenticodeSigningRule(),
1716
};
1817

src/NuGetPackageVerifier/PackageIssueFactory.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,11 @@ public static PackageVerifierIssue AssemblyNotStrongNameSigned(string assemblyPa
9595
return new PackageVerifierIssue("SIGN_STRONGNAME", assemblyPath, string.Format("The managed assembly '{0}' in this package is either not signed or is delay signed. HRESULT=0x{1:X}", assemblyPath, hResult), MyPackageIssueLevel.Error);
9696
}
9797

98+
public static PackageVerifierIssue AssemblyHasWrongPublicKeyToken(string assemblyPath, string expectedToken)
99+
{
100+
return new PackageVerifierIssue("WRONG_PUBLICKEYTOKEN", assemblyPath, string.Format("The managed assembly '{0}' in this package does not have the expected public key token ({1}).", assemblyPath, expectedToken), MyPackageIssueLevel.Error);
101+
}
102+
98103
public static PackageVerifierIssue NotSemanticVersion(SemanticVersion version)
99104
{
100105
return new PackageVerifierIssue("VERSION_NOTSEMANTIC",

src/NuGetPackageVerifier/Rules/AssemblyStrongNameRule.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System;
55
using System.Collections.Generic;
66
using System.IO;
7+
using System.Reflection;
78
using System.Runtime.CompilerServices;
89
using System.Runtime.InteropServices;
910
using NuGet.Packaging;
@@ -13,6 +14,8 @@ namespace NuGetPackageVerifier.Rules
1314
{
1415
public class AssemblyStrongNameRule : IPackageVerifierRule
1516
{
17+
private static string _publicKeyToken = "ADB9793829DDAE60";
18+
1619
public IEnumerable<PackageVerifierIssue> Validate(
1720
FileInfo nupkgFile,
1821
IPackageMetadata package,
@@ -31,6 +34,7 @@ public IEnumerable<PackageVerifierIssue> Validate(
3134

3235
var isManagedCode = false;
3336
var isStrongNameSigned = false;
37+
var hasCorrectPublicKeyToken = false;
3438
var hresult = 0;
3539

3640
try
@@ -54,6 +58,13 @@ public IEnumerable<PackageVerifierIssue> Validate(
5458
{
5559
isStrongNameSigned = true;
5660
}
61+
62+
var testAssembly = AssemblyName.GetAssemblyName(assemblyPath);
63+
var tokenHexString = BitConverter.ToString(testAssembly.GetPublicKeyToken()).Replace("-", "");
64+
if (_publicKeyToken.Equals(tokenHexString))
65+
{
66+
hasCorrectPublicKeyToken = true;
67+
}
5768
}
5869
}
5970
catch (Exception ex)
@@ -68,10 +79,16 @@ public IEnumerable<PackageVerifierIssue> Validate(
6879
File.Delete(assemblyPath);
6980
}
7081
}
82+
7183
if (isManagedCode && !isStrongNameSigned)
7284
{
7385
yield return PackageIssueFactory.AssemblyNotStrongNameSigned(currentFile, hresult);
7486
}
87+
88+
if (isManagedCode && !hasCorrectPublicKeyToken)
89+
{
90+
yield return PackageIssueFactory.AssemblyHasWrongPublicKeyToken(currentFile, _publicKeyToken);
91+
}
7592
}
7693
}
7794
}

0 commit comments

Comments
 (0)