public PublicKey Open() { var dialog = new OpenFileDialog() { Filter = PickFilenameConstants.StrongNameKeyFilter, RestoreDirectory = true, }; if (dialog.ShowDialog() != DialogResult.OK) { return(null); } if (string.IsNullOrEmpty(dialog.FileName)) { return(null); } try { var snk = new StrongNameKey(dialog.FileName); return(new PublicKey(snk.PublicKey)); } catch { } try { var snk = new StrongNamePublicKey(dialog.FileName); return(new PublicKey(snk.CreatePublicKey())); } catch { } MsgBox.Instance.Show(string.Format(dnSpy_AsmEditor_Resources.Error_NotSNKFile, dialog.FileName), MsgBoxButton.OK, ownerWindow); return(null); }
public void CanSignAssembly(string inputAssembly, string outputAssembly) { string keyFile = Path.Combine(KeyDir, "test.snk"); var key = new StrongNameKey(keyFile); var signer = new StrongNameSigner(); signer.SignAssembly(inputAssembly, key, outputAssembly); if (Environment.OSVersion.Platform == PlatformID.Win32NT) { int exitCode = Exec.RunNetFxTool("sn.exe", new[] { "-v", outputAssembly }); exitCode.Should() .Be(0); } PEReader assemblyReader = GetPEReader(outputAssembly); assemblyReader.PEHeaders.CorHeader.Flags.Should() .HaveFlag(CorFlags.StrongNameSigned); AssemblyName assemblyName = GetAssemblyName(assemblyReader.GetMetadataReader()); StrongNamePublicKey publicKey = key.GetPublicKey(); assemblyName.GetPublicKey() .Should() .BeEquivalentTo(publicKey.CreatePublicKey()); assemblyName.GetPublicKeyToken() .Should() .BeEquivalentTo(publicKey.CreatePublicKeyToken()); }
public static byte[] CreatePublicKeyToken(this StrongNamePublicKey key) { byte[] publicKey = key.CreatePublicKey(); string hashAlg; switch (key.HashAlgorithm) { case AssemblyHashAlgorithm.SHA1: hashAlg = HashAlgorithmName.SHA1.Name; break; case AssemblyHashAlgorithm.SHA_256: hashAlg = HashAlgorithmName.SHA256.Name; break; case AssemblyHashAlgorithm.SHA_384: hashAlg = HashAlgorithmName.SHA384.Name; break; case AssemblyHashAlgorithm.SHA_512: hashAlg = HashAlgorithmName.SHA512.Name; break; default: throw new ArgumentOutOfRangeException(); } var ha = HashAlgorithm.Create("SHA1"); byte[] hash = ha.ComputeHash(publicKey); var keyToken = new byte[8]; Buffer.BlockCopy(hash, (hash.Length - 8), keyToken, 0, 8); Array.Reverse(keyToken, 0, 8); return(keyToken); }
public void CanDelaySignAssembly(string inputAssembly, string outputAssembly) { string keyFile = Path.Combine(KeyDir, "test_public_sha1.snk"); var publicKey = new StrongNamePublicKey(keyFile); var signer = new StrongNameSigner(); signer.DelaySignAssembly(inputAssembly, publicKey, outputAssembly); PEReader assemblyReader = GetPEReader(outputAssembly); assemblyReader.PEHeaders.CorHeader.Flags.Should() .NotHaveFlag(CorFlags.StrongNameSigned); AssemblyName assemblyName = GetAssemblyName(assemblyReader.GetMetadataReader()); assemblyName.GetPublicKey() .Should() .BeEquivalentTo(publicKey.CreatePublicKey()); assemblyName.GetPublicKeyToken() .Should() .BeEquivalentTo(publicKey.CreatePublicKeyToken()); }