public void TestBitcoinWIPRoundTrio()
        {
            var p       = new cipher_PubKey();
            var seckey1 = new cipher_SecKey();
            var err     = SKY_cipher_GenerateKeyPair(p, seckey1);
            var wip1    = new _GoString_();

            SKY_cipher_BitcoinWalletImportFormatFromSeckey(seckey1, wip1);
            var seckey2 = new skycoin.cipher_SecKey();

            Assert.AreEqual(err, SKY_OK);
            err = SKY_cipher_SecKeyFromBitcoinWalletImportFormat(wip1.p, seckey2);
            Assert.AreEqual(err, SKY_OK);
            var wip2 = new _GoString_();

            SKY_cipher_BitcoinWalletImportFormatFromSeckey(seckey2, wip2);
            Assert.AreEqual(err, SKY_OK);
            Assert.AreEqual(seckey1.isEqual(seckey2), 1);
            var seckey1_hex = new _GoString_();
            var seckey2_hex = new _GoString_();

            err = SKY_cipher_SecKey_Hex(seckey1, seckey1_hex);
            Assert.AreEqual(err, SKY_OK);
            err = SKY_cipher_SecKey_Hex(seckey2, seckey2_hex);
            Assert.AreEqual(err, SKY_OK);
            Assert.AreEqual(seckey1_hex.p == seckey2_hex.p, true);
            Assert.AreEqual(wip1.p == wip2.p, true);
        }
        public void TestBitcoinAddressFromBytes()
        {
            var s   = new skycoin.cipher_SecKey();
            var p   = new skycoin.cipher_PubKey();
            var err = SKY_cipher_GenerateKeyPair(p, s);

            Assert.AreEqual(err, SKY_OK, "Failed SKY_cipher_GenerateKeyPair");
            var a = new skycoin.cipher__BitcoinAddress();

            SKY_cipher_BitcoinAddressFromPubKey(p, a);
            var pk = new GoSlice();
            var b  = new GoSlice();
            var a2 = new skycoin.cipher__BitcoinAddress();

            SKY_cipher_BitcoinAddress_Bytes(a, b);
            err = SKY_cipher_BitcoinAddressFromBytes(b, a2);
            Assert.AreEqual(err, SKY_OK, "Failed SKY_cipher_BitcoinAddressFromBytes");
            Assert.AreEqual(a2.isEqual(a), 1);

            // Invalid number of bytes
            SKY_cipher_BitcoinAddress_Bytes(a, b);
            b.len = b.len - 2;
            err   = SKY_cipher_BitcoinAddressFromBytes(b, a2);
            Assert.AreEqual(err, SKY_ErrAddressInvalidLength);

            // Invalid checksum
            SKY_cipher_BitcoinAddress_Bytes(a, b);
            b.setAtChar('2', (ulong)b.len - 1);
            err = SKY_cipher_BitcoinAddressFromBytes(b, a2);
            Assert.AreEqual(err, SKY_ErrAddressInvalidChecksum);

            a.Version = 2;
            SKY_cipher_BitcoinAddress_Bytes(a, b);
            err = SKY_cipher_BitcoinAddressFromBytes(b, a2);
            Assert.AreEqual(err, SKY_ErrAddressInvalidVersion);
        }