Ejemplo n.º 1
0
        /* Make a new wallet with the given filename and password, returning
         * either the wallet or an error */
        public static IEither <Error, WalletBackend> NewWallet(string filename,
                                                               string password)
        {
            WalletKeys keys = KeyOps.GenerateWalletKeys();

            return(NewWallet(filename, password, keys.GetPrivateKeys()));
        }
Ejemplo n.º 2
0
        public void TestAddressesBothWays()
        {
            for (int i = 0; i < 10; i++)
            {
                WalletKeys w = KeyOps.GenerateWalletKeys();

                /* TRTL, Monero, random different lengths */
                ulong[] prefixes = new ulong[] { 0x3bbb1d, 0x12, 0x0, 0x11, 0x222, 0x3333, 0x44444, 0x555555, 0x6666666 };

                foreach (ulong prefix in prefixes)
                {
                    string derivedAddress1 = Addresses.AddressFromKeys(w.privateSpendKey, w.privateViewKey, prefix);

                    Addresses.KeysFromAddress(derivedAddress1, prefix).Do(
                        error => Assert.Fail($"Failed to parse keys from address: {error}"),
                        keys => {
                        Assert.AreEqual <PublicKey>(w.publicSpendKey, keys.spendKey);
                        Assert.AreEqual <PublicKey>(w.publicViewKey, keys.viewKey);
                    }
                        );

                    string derivedAddress2 = Addresses.AddressFromKeys(w.publicSpendKey, w.publicViewKey, prefix);

                    Addresses.KeysFromAddress(derivedAddress2, prefix).Do(
                        error => Assert.Fail($"Failed to parse keys from address: {error}"),
                        keys => {
                        Assert.AreEqual <PublicKey>(w.publicSpendKey, keys.spendKey);
                        Assert.AreEqual <PublicKey>(w.publicViewKey, keys.viewKey);
                    }
                        );
                }
            }
        }
Ejemplo n.º 3
0
        public void TestAddressesBothWays()
        {
            for (int i = 0; i < 10; i++)
            {
                WalletKeys w = KeyOps.GenerateWalletKeys();

                /* TRTL, Monero, random different lengths */
                ulong[] prefixes = new ulong[] { 0x3bbb1d, 0x12, 0x0, 0x11, 0x222, 0x3333, 0x44444, 0x555555, 0x6666666 };

                foreach (ulong prefix in prefixes)
                {
                    string derivedAddress1 = Addresses.AddressFromKeys(w.spendKeys.privateKey, w.viewKeys.privateKey, prefix);

                    switch (Addresses.KeysFromAddress(derivedAddress1, prefix))
                    {
                    case ILeft <string> error:
                    {
                        Assert.Fail($"Failed to parse keys from address: {error.Value}");
                        break;
                    }

                    case IRight <PublicKeys> keys:
                    {
                        Assert.AreEqual <PublicKey>(keys.Value.spendKey, w.spendKeys.publicKey);
                        Assert.AreEqual <PublicKey>(keys.Value.viewKey, w.viewKeys.publicKey);
                        break;
                    }
                    }

                    string derivedAddress2 = Addresses.AddressFromKeys(w.spendKeys.publicKey, w.viewKeys.publicKey, prefix);

                    switch (Addresses.KeysFromAddress(derivedAddress2, prefix))
                    {
                    case ILeft <string> error:
                    {
                        Assert.Fail($"Failed to parse keys from address: {error.Value}");
                        break;
                    }

                    case IRight <PublicKeys> keys:
                    {
                        Assert.AreEqual <PublicKey>(keys.Value.spendKey, w.spendKeys.publicKey);
                        Assert.AreEqual <PublicKey>(keys.Value.viewKey, w.viewKeys.publicKey);
                        break;
                    }
                    }
                }
            }
        }
Ejemplo n.º 4
0
        // Test key generation
        static void TestKeyGeneration()
        {
            // Generate a set of wallet keys
            WalletKeys Keys = KeyOps.GenerateWalletKeys();

            // Get an address string from the generated wallet keys
            string Address = Addresses.AddressFromKeys(Keys.publicSpendKey, Keys.publicViewKey);

            // Output generated keys to console
            Console.WriteLine($"Private spend key: {Keys.privateSpendKey.ToString()}");
            Console.WriteLine($"Private view key: {Keys.privateViewKey.ToString()}");

            // Output address to console
            Console.WriteLine($"Public address: {Address}");
            Console.WriteLine();
        }
Ejemplo n.º 5
0
        public void TestGenerateWalletKeys()
        {
            WalletKeys keys = KeyOps.GenerateWalletKeys();

            var privateSpendKey = keys.spendKeys.privateKey;
            var privateViewKey  = keys.viewKeys.privateKey;

            /* All newly generated keys should be a deterministic pair */
            Assert.IsTrue(KeyOps.AreKeysDeterministic(privateSpendKey, privateViewKey));

            var publicSpendKey = KeyOps.PrivateKeyToPublicKey(privateSpendKey);
            var publicViewKey  = KeyOps.PrivateKeyToPublicKey(privateViewKey);

            /* We should derive the same public keys from the private keys
             * as the ones returned from GenerateWalletKeys() */
            Assert.AreEqual <PublicKey>(publicSpendKey, keys.spendKeys.publicKey);
            Assert.AreEqual <PublicKey>(publicViewKey, keys.viewKeys.publicKey);
        }