/* 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())); }
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); } ); } } }
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; } } } } }
// 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(); }
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); }