Skip to content

Make it possible to opt out of PublicSign=false when using some full keys #12515

@omajid

Description

@omajid

Arcade forces anyone using the Open and MicrosoftAspNetCore strong name keys to use PublicSign=false.

MicrosoftAspNetcore:

<When Condition="'$(StrongNameKeyId)' == 'MicrosoftAspNetCore'">
<PropertyGroup>
<AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)snk/AspNetCore.snk</AssemblyOriginatorKeyFile>
<PublicKey>$(MicrosoftAspNetCorePublicKey)</PublicKey>
<PublicKeyToken>adb9793829ddae60</PublicKeyToken>
<PublicSign>false</PublicSign> <!-- The MicrosoftAspNetCore strong name key is a full key -->
</PropertyGroup>

Open:

<When Condition="'$(StrongNameKeyId)' == 'Open'">
<PropertyGroup>
<AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)snk/Open.snk</AssemblyOriginatorKeyFile>
<PublicKey>$(OpenPublicKey)</PublicKey>
<PublicKeyToken>cc7b13ffcd2ddd51</PublicKeyToken>
<DelaySign>false</DelaySign>
<PublicSign>false</PublicSign> <!-- The Open strong name key is a full key -->
</PropertyGroup>

That sounds like a good idea, in general. Unfortunately, there are some environments where full signing (which requires SHA1) is not available. One example is CentOS Stream 9: dotnet/runtime#65874. Forcing full signing just cause build to fail with a stack trace that looks like this:

/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error : Unhandled exception. Interop+Crypto+OpenSslCryptographicException: error:03000098:digital envelope routines::invalid digest [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]                                                                                                                                                            
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Interop.Crypto.RsaSignHash(SafeEvpPKeyHandle pkey, RSASignaturePaddingMode paddingMode, IntPtr digestAlgorithm, ReadOnlySpan`1 hash, Span`1 destination) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]                                                                                                                         
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at System.Security.Cryptography.RSAOpenSsl.TrySignHash(ReadOnlySpan`1 hash, Span`1 destination, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding, Boolean allocateSignature, Int32& bytesWritten, Byte[]& signature) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]                                                    
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at System.Security.Cryptography.RSAOpenSsl.SignHash(Byte[] hash, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]                                                                                                                                                      
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Microsoft.CodeAnalysis.SigningUtilities.CalculateRsaSignature(IEnumerable`1 content, RSAParameters privateKey) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]     
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Microsoft.CodeAnalysis.DesktopStrongNameProvider.<>c__DisplayClass12_0.<SignBuilder>b__0(IEnumerable`1 content) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]    
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at System.Reflection.PortableExecutable.PEBuilder.Sign(BlobBuilder peImage, Blob strongNameSignatureFixup, Func`2 signatureProvider) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]                                                                                                                                                
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Microsoft.Cci.PeWriter.WritePeToStream(EmitContext context, CommonMessageProvider messageProvider, Func`1 getPeStream, Func`1 getPortablePdbStreamOpt, PdbWriter nativePdbWriterOpt, String pdbPathOpt, Boolean metadataOnly, Boolean isDeterministic, Boolean emitTestCoverageData, Nullable`1 privateKeyOpt, CancellationToken cancellationToken) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]                                                                                            
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Microsoft.CodeAnalysis.Compilation.SerializePeToStream(CommonPEModuleBuilder moduleBeingBuilt, DiagnosticBag metadataDiagnostics, CommonMessageProvider messageProvider, Func`1 getPeStream, Func`1 getMetadataPeStreamOpt, Func`1 getPortablePdbStreamOpt, PdbWriter nativePdbWriterOpt, String pdbPathOpt, RebuildData rebuildData, Boolean metadataOnly, Boolean includePrivateMembers, Boolean isDeterministic, Boolean emitTestCoverageData, Nullable`1 privateKeyOpt, CancellationToken cancellationToken) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]                                                                                             
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Microsoft.CodeAnalysis.Compilation.SerializeToPeStream(CommonPEModuleBuilder moduleBeingBuilt, EmitStreamProvider peStreamProvider, EmitStreamProvider metadataPEStreamProvider, EmitStreamProvider pdbStreamProvider, RebuildData rebuildData, Func`2 testSymWriterFactory, DiagnosticBag diagnostics, EmitOptions emitOptions, Nullable`1 privateKeyOpt, CancellationToken cancellationToken) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]                                                
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Microsoft.CodeAnalysis.CommonCompiler.CompileAndEmit(TouchedFileLoggertouchedFilesLogger, Compilation& compilation, ImmutableArray`1 analyzers, ImmutableArray`1 generators, ImmutableArray`1 additionalTextFiles, AnalyzerConfigSet analyzerConfigSet, ImmutableArray`1 sourceFileAnalyzerConfigOptions, ImmutableArray`1 embeddedTexts, DiagnosticBag diagnostics, ErrorLogger errorLogger, CancellationToken cancellationToken, CancellationTokenSource& analyzerCts, AnalyzerDriver& analyzerDriver, Nullable`1& generatorTimingInfo) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]                                                                   
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Microsoft.CodeAnalysis.CommonCompiler.RunCore(TextWriter consoleOutput, ErrorLogger errorLogger, CancellationToken cancellationToken) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]   
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Microsoft[576/1833]sis.CommonCompiler.Run(TextWriter consoleOutput, CancellationToken cancellationToken) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc.<>c__DisplayClass1_0.<Run>b__0(TextWriter tw) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc.Run(String[] args, BuildPaths buildPaths, TextWriter textWriter, IAnalyzerAssemblyLoaderanalyzerLoader) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Microsoft.CodeAnalysis.CommandLine.BuildClient.RunCompilation(IEnumerable`1 originalArguments, BuildPaths buildPaths, TextWriter textWriter, String pipeName) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Microsoft.CodeAnalysis.CommandLine.BuildClient.Run(IEnumerable`1 arguments, RequestLanguage language, CompileFunc compileFunc, CompileOnServerFunc compileOnServerFunc) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Microsoft.CodeAnalysis.CSharp.CommandLine.Program.MainCore(String[] args) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]
/home/dotnet/source-build-reference-packages/.dotnet/sdk/8.0.100-alpha.1.23061.8/Roslyn/Microsoft.CSharp.Core.targets(80,5): error :    at Microsoft.CodeAnalysis.CSharp.CommandLine.Program.Main(String[] args) [/home/dotnet/source-build-reference-packages/src/referencePackages/src/microsoft.extensions.configuration.abstractions/2.1.1/Microsoft.Extensions.Configuration.Abstractions.2.1.1.csproj::TargetFramework=netstandard2.0]

I think we should allow making this pluggable and support using PublicSign=true even for the Open key.

What would be a good idea to do this? Would this be acceptable?

<PublicSign Condition="$(PublicSign) = ''">false</PublicSign>

If so, I can do a PR for this.

See dotnet/source-build#2907

cc @crummel @MichaelSimons @mthalman

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions