Esempio n. 1
0
        /****************************************************************************/
        /// <summary>
        /// Given an unhashed password and the owner (user) id returns a Password object
        /// </summary>
        /// <param name="password">The password typed in by the user</param>
        /// <param name="owner">An owner or user id. This could be a guid from a NoSql database or an identity column value (INT or BIGINT) from a SQL database</param>
        /// <returns>A Password object. Be sure to Dispose of this object as soon as not longer needed</returns>
        public Password FromOwner(string password, IPasswordOwner owner)
        {
            var unhashed = Encoding.UTF8.GetBytes(password);
            var salt     = _passwordHasher.GenerateSalt(_saltLength);
            var hash     = _passwordHasher.Hash(unhashed, salt, owner.ToArray);

            Array.Clear(unhashed, 0, unhashed.Length);

            return(new Password(hash, salt, owner));
        }
Esempio n. 2
0
        /****************************************************************************/
        /// <summary>
        /// Loads the hashed password associated with the owner/user
        /// </summary>
        /// <param name="owner">Owner or user of the password</param>
        /// <returns>A Password object containing the hashed password</returns>
        public async Task <Password> Load(IPasswordOwner owner)
        {
            var pwd = await _passwordStore.Get(owner, out byte[] salt);

            var unencryptedSalt = await _encryptor.Decrypt(salt);

            var password = new Password(pwd, unencryptedSalt, owner);

            Array.Clear(salt, 0, salt.Length);
            Array.Clear(unencryptedSalt, 0, unencryptedSalt.Length);

            return(password);
        }
Esempio n. 3
0
            public Task Add(byte[] password, byte[] salt, IPasswordOwner owner)
            {
                _passwords.Add(new Password(password, salt, owner));

                return(Task.CompletedTask);
            }
Esempio n. 4
0
            public Task <byte[]> Get(IPasswordOwner owner, out byte[] salt)
            {
                salt = _passwords[0].Salt;

                return(Task.FromResult(_passwords[0].ToArray()));
            }
Esempio n. 5
0
 /****************************************************************************/
 public Password(byte[] hash, byte[] salt, IPasswordOwner owner)
 {
     _hash  = hash.DeepClone();
     _salt  = salt.DeepClone();
     _owner = owner;
 }