internal override bool VerifyPass(string Password, TEncryptionParameters EncParams, TEncryptionKey Key) { if (!base.VerifyPass(Password, EncParams, Key)) { return(false); } Key.CalcKey(TStandardEncryptionKey.BlockKey, null); byte[] DecriptedVerifier; byte[] DecriptedVerifierHash; using (AesManaged Engine = TEncryptionUtils.CreateEngine(EncParams)) { using (ICryptoTransform Decryptor = Engine.CreateDecryptor(Key.Key, Key.IV)) { DecriptedVerifier = DecryptBytes(EncryptedVerifier, Decryptor, -1); DecriptedVerifierHash = DecryptBytes(EncryptedVerifierHash, Decryptor, -1); } } using (HashAlgorithm hasher = TEncryptionKey.CreateHasher()) { byte[] DecriptedVerifierHash2 = hasher.ComputeHash(DecriptedVerifier); if (!FlxUtils.CompareMem(DecriptedVerifierHash, 0, DecriptedVerifierHash2, 0, VerifierHashSizeBytes)) { return(false); } } return(true); }
internal override bool VerifyPass(string Password, TEncryptionParameters EncParams, TEncryptionKey Key) { if (!base.VerifyPass(Password, EncParams, Key)) { return(false); } using (AesManaged Engine = TEncryptionUtils.CreateEngine(EncParams)) { byte[] DecriptedVerifierHashInput; Key.CalcKey(TAgileEncryptionKey.VerifierHashInputBlockKey, null); using (ICryptoTransform Decryptor = Engine.CreateDecryptor(Key.Key, Key.IV)) { DecriptedVerifierHashInput = DecryptBytes(EncryptedVerifierHashInput, Decryptor, Key.Salt.Length); //this is the value padded to a blocksize multiple. We want only the Salt.Length initial bytes. DecriptedVerifierHashInput = Key.Hash(DecriptedVerifierHashInput); } byte[] DecriptedVerifierHashValue; Key.CalcKey(TAgileEncryptionKey.VerifierHashValueBlockKey, null); using (ICryptoTransform Decryptor = Engine.CreateDecryptor(Key.Key, Key.IV)) { DecriptedVerifierHashValue = DecryptBytes(EncryptedVerifierHashValue, Decryptor, DecriptedVerifierHashInput.Length); //this is the 20 byte value of the hash + 12 "0" so it goes up to 32. (32 is 2*blocksize) } if (!FlxUtils.CompareMem(DecriptedVerifierHashValue, DecriptedVerifierHashInput)) { return(false); } byte[] DecriptedKeyValue; Key.CalcKey(TAgileEncryptionKey.VerifierKeyValueBlockKey, null); using (ICryptoTransform Decryptor = Engine.CreateDecryptor(Key.Key, Key.IV)) { DecriptedKeyValue = DecryptBytes(EncryptedKeyValue, Decryptor, Key.KeySizeInBytes); } Key.Key = DecriptedKeyValue; } return(true); }