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());
        }
Esempio n. 2
0
        /// <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());
        }
Esempio n. 5
0
        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();
                    }
                }
            }
        }
Esempio n. 6
0
        public void TestMsftRSAccessors()
        {
            var signer = new MsftECDsaCng();

            this.TestRSAccessors(signer);
        }
Esempio n. 7
0
 public void TestMsftSignAndVerify()
 {
     var signer    = new MsftECDsaCng();
     var signature = this.TestSign(signer);
 }