public static byte[] Sign(this ISignable signable, Account account) { using (account.Decrypt()) { return signable.Sign(account.PrivateKey, account.PublicKey.EncodePoint(false).Skip(1).ToArray()); } }
private void OnCreateAccount(WalletAccount account) { byte[] decryptedPrivateKey = new byte[96]; Buffer.BlockCopy(account.PublicKey.EncodePoint(false), 1, decryptedPrivateKey, 0, 64); using (account.Decrypt()) { Buffer.BlockCopy(account.PrivateKey, 0, decryptedPrivateKey, 64, 32); } byte[] encryptedPrivateKey = EncryptPrivateKey(decryptedPrivateKey); Array.Clear(decryptedPrivateKey, 0, decryptedPrivateKey.Length); using (WalletDataContext ctx = new WalletDataContext(DbPath)) { Account db_account = ctx.Accounts.FirstOrDefault(p => p.PublicKeyHash.SequenceEqual(account.PublicKeyHash.ToArray())); if (db_account == null) { db_account = ctx.Accounts.Add(new Account { PrivateKeyEncrypted = encryptedPrivateKey, PublicKeyHash = account.PublicKeyHash.ToArray() }).Entity; } else { db_account.PrivateKeyEncrypted = encryptedPrivateKey; } ctx.SaveChanges(); } }
public bool Sign(SignatureContext context) { bool fSuccess = false; foreach (UInt160 scriptHash in context.ScriptHashes) { Contract contract = GetContract(scriptHash); if (contract == null) { continue; } Account account = GetAccountByScriptHash(scriptHash); if (account == null) { continue; } byte[] signature; using (account.Decrypt()) { signature = context.Signable.Sign(account.PrivateKey, account.PublicKey.EncodePoint(false).Skip(1).ToArray()); } fSuccess |= context.Add(contract.RedeemScript, account.PublicKey, signature); } return(fSuccess); }
protected override void SaveAccount(Account account) { byte[] decryptedPrivateKey = new byte[96]; Buffer.BlockCopy(account.PublicKey, 0, decryptedPrivateKey, 0, 64); using (account.Decrypt()) { Buffer.BlockCopy(account.PrivateKey, 0, decryptedPrivateKey, 64, 32); } byte[] encryptedPrivateKey = EncryptPrivateKey(decryptedPrivateKey); Array.Clear(decryptedPrivateKey, 0, decryptedPrivateKey.Length); using (WalletDataContext ctx = new WalletDataContext(connectionString)) { DbAccount db_account = ctx.Accounts.FirstOrDefault(p => p.PublicKeyHash == account.PublicKeyHash.ToArray()); if (db_account == null) { db_account = ctx.Accounts.Add(new DbAccount { PrivateKeyEncrypted = encryptedPrivateKey, PublicKeyHash = account.PublicKeyHash.ToArray() }); } else { db_account.PrivateKeyEncrypted = encryptedPrivateKey; } ctx.SaveChanges(); } }
public bool Sign(SignatureContext context) { bool fSuccess = false; foreach (UInt160 scriptHash in context.ScriptHashes) { Contract contract = GetContract(scriptHash); if (contract == null) { continue; } Account account = GetAccountByScriptHash(scriptHash); if (account == null) { continue; } byte[] signature; using (account.Decrypt()) { signature = context.Signable.Sign(account.PrivateKey, account.PublicKey); } fSuccess |= context.Add(contract.RedeemScript, ECPoint.FromBytes(account.PublicKey, ECCurve.Secp256r1), signature); } return(fSuccess); }
public ViewPrivateKeyDialog(Account account, UInt160 scriptHash) { InitializeComponent(); textBox3.Text = Wallet.ToAddress(scriptHash); textBox4.Text = account.PublicKey.EncodePoint(true).ToHexString(); using (account.Decrypt()) { textBox1.Text = account.PrivateKey.ToHexString(); } textBox2.Text = account.Export(); }