Пример #1
0
        public void Hash160Test()
        {
            var data    = Encoding.ASCII.GetBytes("hello");
            var hash160 = HashUtilities.Hash160(data);

            var actual   = HexUtilities.BytesToHexString(hash160);
            var expected = "b6a9c8c230722b7c748331a8b450f05566dc7d0f";

            Assert.AreEqual(expected, actual);
        }
Пример #2
0
        public void RipeMd160Test()
        {
            var data          = Encoding.ASCII.GetBytes("hello");
            var ripeMd160Hash = HashUtilities.RipeMd160(data);

            var actual   = HexUtilities.BytesToHexString(ripeMd160Hash);
            var expected = "108f07b8382412612c048d07d13f814118445acd";

            Assert.AreEqual(expected, actual);
        }
Пример #3
0
        public void DoubleSha256Test()
        {
            var data          = Encoding.ASCII.GetBytes("hello");
            var dblSha256Hash = HashUtilities.DoubleSha256(data);

            var actual   = HexUtilities.BytesToHexString(dblSha256Hash);
            var expected = "9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50";

            Assert.AreEqual(expected, actual);
        }
Пример #4
0
        public void Sha256Test()
        {
            var data       = Encoding.ASCII.GetBytes("hello");
            var sha256Hash = HashUtilities.Sha256(data);

            var actual   = HexUtilities.BytesToHexString(sha256Hash);
            var expected = "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824";

            Assert.AreEqual(expected, actual);
        }
Пример #5
0
        public void BigIntegerToBytesTest()
        {
            // Uncompressed Public Key
            var xValStr  = "50863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352";
            var yValStr  = "2CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6";
            var expected = "0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6";

            var xVal  = BigIntegerUtilities.CreateFromUnsignedBigEndianHexString(xValStr);
            var yVal  = BigIntegerUtilities.CreateFromUnsignedBigEndianHexString(yValStr);
            var bytes = new byte[65]; // type byte + 32 bytes for X + 32 bytes for Y

            bytes[0] = 0x04;
            xVal.PositiveValToBigEndianBytes(bytes, 1, 32);
            yVal.PositiveValToBigEndianBytes(bytes, 33, 32);
            var hexStr = HexUtilities.BytesToHexString(bytes, false);

            Assert.AreEqual(expected, hexStr);

            // Arbitrary data to arbitrary position in buffer
            var str1 = "010203040506";
            var str2 = "ABCDEF";

            expected = "010203040506000000ABCDEF";

            var val1 = BigIntegerUtilities.CreateFromUnsignedBigEndianHexString(str1);
            var val2 = BigIntegerUtilities.CreateFromUnsignedBigEndianHexString(str2);

            bytes = new byte[12];
            val1.PositiveValToBigEndianBytes(bytes, 0, 6);
            val2.PositiveValToBigEndianBytes(bytes, 9, 3);
            hexStr = HexUtilities.BytesToHexString(bytes, false);
            Assert.AreEqual(expected, hexStr);

            // Arbitrary data to arbitrary position in buffer, right aligned
            str1     = "010203040506";
            str2     = "ABCDEF";
            expected = "010203040506000000ABCDEF";

            val1  = BigIntegerUtilities.CreateFromUnsignedBigEndianHexString(str1);
            val2  = BigIntegerUtilities.CreateFromUnsignedBigEndianHexString(str2);
            bytes = new byte[12];
            val1.PositiveValToBigEndianBytes(bytes, 0, 6);
            val2.PositiveValToBigEndianBytes(bytes, 6, 6);
            hexStr = HexUtilities.BytesToHexString(bytes, false);
            Assert.AreEqual(expected, hexStr);
        }
Пример #6
0
        public void BytesToHexStringTest()
        {
            var bytes    = new byte[] { 0x01, 0x80, 0xFF };
            var hexLower = HexUtilities.BytesToHexString(bytes, true);

            Assert.AreEqual("0180ff", hexLower);
            var hexUpper = HexUtilities.BytesToHexString(bytes, false);

            Assert.AreEqual("0180FF", hexUpper);

            bytes = new byte[0];
            var hexEmpty = HexUtilities.BytesToHexString(bytes);

            Assert.AreEqual(string.Empty, hexEmpty);

            bytes = new byte[] { 0x00, 0x00 };
            var hexZero = HexUtilities.BytesToHexString(bytes);

            Assert.AreEqual("0000", hexZero);
        }
Пример #7
0
        public void PubKeyBytesTest()
        {
            var uncompressed = "049d5ca49670cbe4c3bfa84c96a8c87df086c6ea6a24ba6b809c9de234496808d56fa15cc7f3d38cda98dee2419f415b7513dde1301f8643cd9245aea7f3f911f9";
            var compressed   = "039d5ca49670cbe4c3bfa84c96a8c87df086c6ea6a24ba6b809c9de234496808d5";
            var prvKey       = new PrivateKey(BigInteger.Pow(999, 3), false, false);
            var pubKey       = prvKey.GetPublicKey();
            var bytes        = pubKey.GetPublicKeyBytes();

            Assert.AreEqual(uncompressed, HexUtilities.BytesToHexString(bytes));
            prvKey = new PrivateKey(BigInteger.Pow(999, 3), false, true);
            pubKey = prvKey.GetPublicKey();
            bytes  = pubKey.GetPublicKeyBytes();
            Assert.AreEqual(compressed, HexUtilities.BytesToHexString(bytes));

            uncompressed = "04a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b";
            compressed   = "03a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5";
            prvKey       = new PrivateKey(123, false, false);
            pubKey       = prvKey.GetPublicKey();
            bytes        = pubKey.GetPublicKeyBytes();
            Assert.AreEqual(uncompressed, HexUtilities.BytesToHexString(bytes));
            prvKey = new PrivateKey(123, false, true);
            pubKey = prvKey.GetPublicKey();
            bytes  = pubKey.GetPublicKeyBytes();
            Assert.AreEqual(compressed, HexUtilities.BytesToHexString(bytes));

            uncompressed = "04aee2e7d843f7430097859e2bc603abcc3274ff8169c1a469fee0f20614066f8e21ec53f40efac47ac1c5211b2123527e0e9b57ede790c4da1e72c91fb7da54a3";
            compressed   = "03aee2e7d843f7430097859e2bc603abcc3274ff8169c1a469fee0f20614066f8e";
            prvKey       = new PrivateKey(42424242, false, false);
            pubKey       = prvKey.GetPublicKey();
            bytes        = pubKey.GetPublicKeyBytes();
            Assert.AreEqual(uncompressed, HexUtilities.BytesToHexString(bytes));
            prvKey = new PrivateKey(42424242, false, true);
            pubKey = prvKey.GetPublicKey();
            bytes  = pubKey.GetPublicKeyBytes();
            Assert.AreEqual(compressed, HexUtilities.BytesToHexString(bytes));
        }
Пример #8
0
        public void AddressTest()
        {
            // Uncompressed Public Key
            var ecdsaPrivateKey = "18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725";
            var expectedPubXVal = "50863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352";
            var expectedPubYVal = "2CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6";
            var expectedPubKey  = "0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6";
            var expectedAddress = "16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM";

            var prvKeyVal = BigIntegerUtilities.CreateFromUnsignedBigEndianHexString(ecdsaPrivateKey);
            var prvKey    = new PrivateKey(prvKeyVal, false, false);
            var pubKey    = prvKey.GetPublicKey();

            Assert.AreEqual(expectedPubXVal, pubKey.X.PositiveValToHexString(false));
            Assert.AreEqual(expectedPubYVal, pubKey.Y.PositiveValToHexString(false));

            var pubKeyBytes  = pubKey.GetPublicKeyBytes();
            var pubKeyString = HexUtilities.BytesToHexString(pubKeyBytes, false);

            Assert.AreEqual(expectedPubKey, pubKeyString);
            var address = pubKey.GetAddress();

            Assert.AreEqual(expectedAddress, address);
        }