コード例 #1
0
ファイル: UserWallet.cs プロジェクト: 4T-Shirt/AntShares
 public static UserWallet CreateDatabase(string path, string password)
 {
     SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder();
     sb.AttachDBFilename = path;
     sb.DataSource = @"(LocalDB)\v11.0";
     sb.IntegratedSecurity = true;
     using (WalletDataContext ctx = new WalletDataContext(sb.ToString()))
     using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
     {
         byte[] passwordKey = password.ToAesKey();
         byte[] masterKey = new byte[32];
         byte[] iv = new byte[16];
         rng.GetNonZeroBytes(masterKey);
         rng.GetNonZeroBytes(iv);
         masterKey.AesEncrypt(passwordKey, iv);
         Array.Clear(passwordKey, 0, passwordKey.Length);
         ctx.Database.Delete();
         ctx.Database.Create();
         ctx.Keys.Add(new Key
         {
             Name = Key.MasterKey,
             Value = masterKey
         });
         ctx.Keys.Add(new Key
         {
             Name = Key.IV,
             Value = iv
         });
         ctx.SaveChanges();
     }
     UserWallet wallet = OpenDatabase(path, password);
     wallet.CreateEntry();
     return wallet;
 }
コード例 #2
0
ファイル: UserWallet.cs プロジェクト: 4T-Shirt/AntShares
 protected override void SaveEncryptedEntry(UInt160 scriptHash, byte[] redeemScript, byte[] encryptedPrivateKey)
 {
     using (WalletDataContext ctx = new WalletDataContext(connectionString))
     {
         byte[] scriptHashBytes = scriptHash.ToArray();
         Account account = ctx.Accounts.FirstOrDefault(p => p.ScriptHash == scriptHashBytes);
         if (account == null)
         {
             account = ctx.Accounts.Add(new Account
             {
                 ScriptHash = scriptHash.ToArray(),
                 RedeemScript = redeemScript,
                 PrivateKeyEncrypted = encryptedPrivateKey
             });
         }
         else
         {
             account.RedeemScript = redeemScript;
             account.PrivateKeyEncrypted = encryptedPrivateKey;
         }
         ctx.SaveChanges();
     }
 }
コード例 #3
0
ファイル: UserWallet.cs プロジェクト: 4T-Shirt/AntShares
 protected override void DeleteEntry(UInt160 scriptHash)
 {
     using (WalletDataContext ctx = new WalletDataContext(connectionString))
     {
         Account account = ctx.Accounts.FirstOrDefault(p => p.ScriptHash == scriptHash.ToArray());
         if (account != null)
         {
             ctx.Accounts.Remove(account);
             ctx.SaveChanges();
         }
     }
 }