public void TestSECCompressedPublicKey() { // This key should generate a 0x02 compressed public key var privateKeyEven = "18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725".HexToBytes(); // This key should generate a 0x03 compressed public key var privateKeyOdd = "79FE45D61339181238E49424E905446A35497A8ADEA8B7D5241A1E7F2C95A04D".HexToBytes(); // Use Secp256k1 to generate the key because MSFT version does not support import privateKey with // no public key. IECDsa secp256k1 = new Secp256k1DotNet(); var evenKey = secp256k1.CreateKey(privateKeyEven); var msftecdsa = new MsftECDsaCng(); var evenBtc = secp256k1.GetSECCompressedPublicKey(evenKey.PublicKey); var evenMsft = msftecdsa.GetSECCompressedPublicKey(evenKey.PublicKey); Assert.Equal(evenBtc.ToArray(), evenMsft.ToArray()); var oddKey = secp256k1.CreateKey(privateKeyOdd); var oddBtc = secp256k1.GetSECCompressedPublicKey(oddKey.PublicKey); var oddMsft = msftecdsa.GetSECCompressedPublicKey(oddKey.PublicKey); Assert.Equal(oddBtc.ToArray(), oddMsft.ToArray()); }
/// <summary> /// Converts the key to a ECDsaCng key /// </summary> /// <param name="key">Key to convert</param> /// <returns>ECDsaCng Key</returns> public static ECDsaCng ToECDsaCngKey(this Key key) { var dsa = new ECDsaCng(CngKey.Import(MsftECDsaCng.ConvertToCngKeyData(key), CngKeyBlobFormat.EccPrivateBlob)); dsa.HashAlgorithm = CngAlgorithm.Sha256; return(dsa); }
public void TestMsftECsaGenP2PKH() { var privateKey = "18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725".HexToBytes(); // Use Secp256k1 to generate the key because MSFT version does support import privateKey with // no public key. IECDsa secp256k1 = new Secp256k1DotNet(); var key = secp256k1.CreateKey(privateKey); var msftecdsa = new MsftECDsaCng(); string p2pkhAddress = Address.GetP2PKHAddress(key, msftecdsa, Bitcoin.Network.MainNet.P2PKHAddressVersion); p2pkhAddress.Should().BeEquivalentTo("1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs"); }
public void TestSECUncompressedPublicKey() { // This key should generate a 0x02 compressed public key var privateKey = "18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725".HexToBytes(); // Use Secp256k1 to generate the key because MSFT version does not support import privateKey with // no public key. IECDsa secp256k1 = new Secp256k1DotNet(); var key = secp256k1.CreateKey(privateKey); var msftecdsa = new MsftECDsaCng(); var btc = secp256k1.GetSECUncompressedPublicKey(key.PublicKey); var msft = msftecdsa.GetSECUncompressedPublicKey(key.PublicKey); Assert.Equal(btc.ToArray(), msft.ToArray()); }
public void TestMsftSharedContextWithSameKey() { IECDsa signer = new MsftECDsaCng(); var key = signer.CreateKey(); using (var context = new MsftECDsaContext(key)) { for (var loop = 0; loop < 1000; loop++) { using var rnd = RandomNumberGenerator.Create(); var data = new byte[32]; rnd.GetBytes(data); var hash = data.Hash(); var signature = signer.SignHash(hash, context); if (!signer.VerifyHash(hash, signature, context)) { throw new Exception(); } } } }
public void TestMsftRSAccessors() { var signer = new MsftECDsaCng(); this.TestRSAccessors(signer); }
public void TestMsftSignAndVerify() { var signer = new MsftECDsaCng(); var signature = this.TestSign(signer); }