コード例 #1
0
ファイル: Wallet.cs プロジェクト: hiksa/nkn-sdk-net
        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();
        }
コード例 #2
0
ファイル: MultiClient.cs プロジェクト: hiksa/nkn-sdk-net
        /// <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);
        }
コード例 #3
0
ファイル: SendOptions.cs プロジェクト: hiksa/nkn-sdk-net
 public SendOptions()
 {
     this.IsEncrypted     = true;
     this.MessageId       = PseudoRandom.RandomBytesAsHexString(Constants.MessageIdLength);
     this.ResponseTimeout = 5_000;
 }