public Wallet(WalletOptions options = null) { options = options ?? new WalletOptions(); this.version = options.Version ?? Wallet.DefaultVersion; switch (this.version) { case 2: this.scryptParams = new ScryptParams(); this.scryptParams.Salt = this.scryptParams.Salt ?? PseudoRandom.RandomBytesAsHexString(this.scryptParams.SaltLength); break; default: break; } string passwordKey = default; if (options.PasswordKeys != null && options.PasswordKeys.ContainsKey(this.version)) { passwordKey = options.PasswordKeys[this.version]; } else { passwordKey = Wallet.ComputePasswordKey(new WalletOptions { Version = this.version, Password = options.Password, Scrypt = this.scryptParams }); } var account = new Account(options.SeedHex); var ivHex = options.Iv ?? PseudoRandom.RandomBytesAsHexString(16); var masterKeyHex = string.IsNullOrWhiteSpace(options.MasterKey) ? PseudoRandom.RandomBytesAsHexString(16) : options.MasterKey; this.Options = options; this.account = account; this.ivHex = ivHex; this.Address = this.account.Address; this.programHash = this.account.ProgramHash; this.masterKey = Aes.Encrypt(masterKeyHex, passwordKey, ivHex.FromHexString()); this.seedEncrypted = Aes.Encrypt(options.SeedHex, masterKeyHex, ivHex.FromHexString()); this.Options.Iv = null; this.Options.SeedHex = null; this.Options.Password = null; this.Options.MasterKey = null; this.Options.PasswordKey = null; this.Options.PasswordKeys.Clear(); }
/// <summary> /// Dial a session to a remote NKN address. /// </summary> /// <param name="remoteAddress">The address to open session with</param> /// <param name="options">Session configuration options</param> /// <returns>The session object</returns> public async Task <Session> DialAsync(string remoteAddress, SessionOptions options = null) { options = options ?? new SessionOptions(); var dialTimeout = Ncp.Constants.DefaultInitialRetransmissionTimeout; var sessionId = PseudoRandom.RandomBytesAsHexString(Constants.SessionIdLength); var session = this.MakeSession(remoteAddress, sessionId, options); var sessionKey = Session.MakeKey(remoteAddress, sessionId); this.sessions.Add(sessionKey, session); await session.DialAsync(dialTimeout); return(session); }
public SendOptions() { this.IsEncrypted = true; this.MessageId = PseudoRandom.RandomBytesAsHexString(Constants.MessageIdLength); this.ResponseTimeout = 5_000; }