private bool MasterPasswordMatches( SecureString masterPassword, PasswordDigestDocument password )
        {
            PasswordRequest testRequest =
                new PasswordRequest( password.Key, masterPassword, password.Iteration, password.PasswordGenerator );
            var testDigest = _passwordDerivationEngine.Derive( testRequest ).Digest;

            return testDigest.Equals( password.Digest );
        }
        private DerivedPassword DeriveInternal( PasswordRequest request, byte[ ] passwordBytes )
        {
            byte[ ] derivedPasswordBytes =
                _derivedPasswordFactory.DeriveKey( GetBytes( request.Key ), passwordBytes, request.Iterations, _materializer.BytesNeeded );

            string derivedPassword =
                _materializer.ToString( derivedPasswordBytes );

            byte[ ] digestBytes =
                _digestFactory.DeriveKey( DigestSalt, GetBytes( derivedPassword ), 1, _digestLength );

            return new DerivedPassword( derivedPassword,
                                        new PasswordDigest( request.Key, digestBytes, request.Iterations, request.PasswordGenerator ) );
        }
 public IDerivedPassword Derive( PasswordRequest request )
 {
     return _generators[ request.PasswordGenerator ].Derive( request );
 }
 public DerivedPassword Derive( PasswordRequest request )
 {
     return request.MasterPassword.ConsumeBytes( Encoding.UTF8, bytes => DeriveInternal( request, bytes ) );
 }
        public void DerivationEngineUsesSpecifiedPasswordGeneratorToProduce( )
        {
            // Set up

            PasswordRequest request = new PasswordRequest( Key, Password.ToSecureString( ), 1, PasswordGenerators.LegacyFull );
            // Exercise
            IDerivedPassword generatedPassword = _engine.Derive( request );
            // Verify
            DerivedPassword expected = PasswordGenerators.Generators[ PasswordGenerators.LegacyFull ].Derive( request );
            Assert.That( generatedPassword.Password, Is.EqualTo( expected.Password ) );
            Assert.That( generatedPassword.Digest, Is.EqualTo( expected.Digest ) );
        }