private static byte[] GetPublicKeyFromKeyPair(byte[] keyPair) { byte[] publicKey; if (CryptoBlobParser.TryGetPublicKeyFromPrivateKeyBlob(keyPair, out publicKey)) { return(publicKey); } else { throw new ArgumentException("Invalid keypair"); } }
private bool TryReadKeyInfo(out string publicKey, out string publicKeyToken) { try { byte[] publicKeyBytes = null; if (!string.IsNullOrEmpty(this.AssemblyOriginatorKeyFile) && File.Exists(this.AssemblyOriginatorKeyFile)) { if (Path.GetExtension(this.AssemblyOriginatorKeyFile).Equals(".snk", StringComparison.OrdinalIgnoreCase)) { byte[] keyBytes = File.ReadAllBytes(this.AssemblyOriginatorKeyFile); bool publicKeyOnly = keyBytes[0] != 0x07; publicKeyBytes = publicKeyOnly ? keyBytes : GetPublicKeyFromKeyPair(keyBytes); } } else if (!string.IsNullOrEmpty(this.AssemblyKeyContainerName)) { publicKeyBytes = GetPublicKeyFromKeyContainer(this.AssemblyKeyContainerName); } if (publicKeyBytes != null && publicKeyBytes.Length > 0) // If .NET 2.0 isn't installed, we get byte[0] back. { publicKey = ToHex(publicKeyBytes); publicKeyToken = ToHex(CryptoBlobParser.GetStrongNameTokenFromPublicKey(publicKeyBytes)); } else { if (publicKeyBytes != null) { this.Log.LogWarning("Unable to emit public key fields in ThisAssembly class because .NET 2.0 isn't installed."); } publicKey = null; publicKeyToken = null; return(false); } return(true); } catch (NotImplementedException) { publicKey = null; publicKeyToken = null; return(false); } }