Fix: Entropy collection didn't work for pronounceable password generator
git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@273 b624d157-de02-0410-bad0-e51aec6abb33
This commit is contained in:
parent
0c6cd885f6
commit
456bb2dc33
|
@ -1,5 +1,5 @@
|
||||||
<html><pre>Copyright (C) 2005-2007 Tarek Saidi <tarek.saidi@arcor.de>
|
<html><pre>Copyright (C) 2005-2008 Tarek Saidi <tarek.saidi@arcor.de>
|
||||||
Copyright (C) 2007-2008 Felix Geyer <debfx-keepassx@fobos.de>
|
Copyright (C) 2007-2009 Felix Geyer <debfx-keepassx {at} fobos.de>
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -37,64 +37,65 @@
|
||||||
class AESencrypt
|
class AESencrypt
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
aes_encrypt_ctx cx[1];
|
AESencrypt(void) { aes_init(); };
|
||||||
AESencrypt(void) { aes_init(); };
|
|
||||||
#if defined(AES_128)
|
#if defined(AES_128)
|
||||||
AESencrypt(const unsigned char key[])
|
AESencrypt(const unsigned char key[])
|
||||||
{ aes_encrypt_key128(key, cx); }
|
{ aes_encrypt_key128(key, cx); }
|
||||||
AES_RETURN key128(const unsigned char key[])
|
inline AES_RETURN key128(const unsigned char key[])
|
||||||
{ return aes_encrypt_key128(key, cx); }
|
{ return aes_encrypt_key128(key, cx); }
|
||||||
#endif
|
#endif
|
||||||
#if defined(AES_192)
|
#if defined(AES_192)
|
||||||
AES_RETURN key192(const unsigned char key[])
|
inline AES_RETURN key192(const unsigned char key[])
|
||||||
{ return aes_encrypt_key192(key, cx); }
|
{ return aes_encrypt_key192(key, cx); }
|
||||||
#endif
|
#endif
|
||||||
#if defined(AES_256)
|
#if defined(AES_256)
|
||||||
AES_RETURN key256(const unsigned char key[])
|
inline AES_RETURN key256(const unsigned char key[])
|
||||||
{ return aes_encrypt_key256(key, cx); }
|
{ return aes_encrypt_key256(key, cx); }
|
||||||
#endif
|
#endif
|
||||||
#if defined(AES_VAR)
|
#if defined(AES_VAR)
|
||||||
AES_RETURN key(const unsigned char key[], int key_len)
|
inline AES_RETURN key(const unsigned char key[], int key_len)
|
||||||
{ return aes_encrypt_key(key, key_len, cx); }
|
{ return aes_encrypt_key(key, key_len, cx); }
|
||||||
#endif
|
#endif
|
||||||
AES_RETURN encrypt(const unsigned char in[], unsigned char out[]) const
|
inline AES_RETURN encrypt(const unsigned char in[], unsigned char out[]) const
|
||||||
{ return aes_encrypt(in, out, cx); }
|
{ return aes_encrypt(in, out, cx); }
|
||||||
#ifndef AES_MODES
|
#ifndef AES_MODES
|
||||||
AES_RETURN ecb_encrypt(const unsigned char in[], unsigned char out[], int nb) const
|
inline AES_RETURN ecb_encrypt(const unsigned char in[], unsigned char out[], int nb) const
|
||||||
{ while(nb--)
|
{ while(nb--)
|
||||||
{ aes_encrypt(in, out, cx), in += AES_BLOCK_SIZE, out += AES_BLOCK_SIZE; }
|
{ aes_encrypt(in, out, cx), in += AES_BLOCK_SIZE, out += AES_BLOCK_SIZE; }
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef AES_MODES
|
#ifdef AES_MODES
|
||||||
AES_RETURN mode_reset(void) { return aes_mode_reset(cx); }
|
inline AES_RETURN mode_reset(void) { return aes_mode_reset(cx); }
|
||||||
|
|
||||||
AES_RETURN ecb_encrypt(const unsigned char in[], unsigned char out[], int nb) const
|
inline AES_RETURN ecb_encrypt(const unsigned char in[], unsigned char out[], int nb) const
|
||||||
{ return aes_ecb_encrypt(in, out, nb, cx); }
|
{ return aes_ecb_encrypt(in, out, nb, cx); }
|
||||||
|
|
||||||
AES_RETURN cbc_encrypt(const unsigned char in[], unsigned char out[], int nb,
|
inline AES_RETURN cbc_encrypt(const unsigned char in[], unsigned char out[], int nb,
|
||||||
unsigned char iv[]) const
|
unsigned char iv[]) const
|
||||||
{ return aes_cbc_encrypt(in, out, nb, iv, cx); }
|
{ return aes_cbc_encrypt(in, out, nb, iv, cx); }
|
||||||
|
|
||||||
AES_RETURN cfb_encrypt(const unsigned char in[], unsigned char out[], int nb,
|
inline AES_RETURN cfb_encrypt(const unsigned char in[], unsigned char out[], int nb,
|
||||||
unsigned char iv[])
|
unsigned char iv[])
|
||||||
{ return aes_cfb_encrypt(in, out, nb, iv, cx); }
|
{ return aes_cfb_encrypt(in, out, nb, iv, cx); }
|
||||||
|
|
||||||
AES_RETURN cfb_decrypt(const unsigned char in[], unsigned char out[], int nb,
|
inline AES_RETURN cfb_decrypt(const unsigned char in[], unsigned char out[], int nb,
|
||||||
unsigned char iv[])
|
unsigned char iv[])
|
||||||
{ return aes_cfb_decrypt(in, out, nb, iv, cx); }
|
{ return aes_cfb_decrypt(in, out, nb, iv, cx); }
|
||||||
|
|
||||||
AES_RETURN ofb_crypt(const unsigned char in[], unsigned char out[], int nb,
|
inline AES_RETURN ofb_crypt(const unsigned char in[], unsigned char out[], int nb,
|
||||||
unsigned char iv[])
|
unsigned char iv[])
|
||||||
{ return aes_ofb_crypt(in, out, nb, iv, cx); }
|
{ return aes_ofb_crypt(in, out, nb, iv, cx); }
|
||||||
|
|
||||||
typedef void ctr_fn(unsigned char ctr[]);
|
typedef void ctr_fn(unsigned char ctr[]);
|
||||||
|
|
||||||
AES_RETURN ctr_crypt(const unsigned char in[], unsigned char out[], int nb,
|
inline AES_RETURN ctr_crypt(const unsigned char in[], unsigned char out[], int nb,
|
||||||
unsigned char iv[], ctr_fn cf)
|
unsigned char iv[], ctr_fn cf)
|
||||||
{ return aes_ctr_crypt(in, out, nb, iv, cf, cx); }
|
{ return aes_ctr_crypt(in, out, nb, iv, cf, cx); }
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
private:
|
||||||
|
aes_encrypt_ctx cx[1];
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -104,43 +105,44 @@ public:
|
||||||
class AESdecrypt
|
class AESdecrypt
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
aes_decrypt_ctx cx[1];
|
AESdecrypt(void) { aes_init(); };
|
||||||
AESdecrypt(void) { aes_init(); };
|
|
||||||
#if defined(AES_128)
|
#if defined(AES_128)
|
||||||
AESdecrypt(const unsigned char key[])
|
AESdecrypt(const unsigned char key[])
|
||||||
{ aes_decrypt_key128(key, cx); }
|
{ aes_decrypt_key128(key, cx); }
|
||||||
AES_RETURN key128(const unsigned char key[])
|
inline AES_RETURN key128(const unsigned char key[])
|
||||||
{ return aes_decrypt_key128(key, cx); }
|
{ return aes_decrypt_key128(key, cx); }
|
||||||
#endif
|
#endif
|
||||||
#if defined(AES_192)
|
#if defined(AES_192)
|
||||||
AES_RETURN key192(const unsigned char key[])
|
inline AES_RETURN key192(const unsigned char key[])
|
||||||
{ return aes_decrypt_key192(key, cx); }
|
{ return aes_decrypt_key192(key, cx); }
|
||||||
#endif
|
#endif
|
||||||
#if defined(AES_256)
|
#if defined(AES_256)
|
||||||
AES_RETURN key256(const unsigned char key[])
|
inline AES_RETURN key256(const unsigned char key[])
|
||||||
{ return aes_decrypt_key256(key, cx); }
|
{ return aes_decrypt_key256(key, cx); }
|
||||||
#endif
|
#endif
|
||||||
#if defined(AES_VAR)
|
#if defined(AES_VAR)
|
||||||
AES_RETURN key(const unsigned char key[], int key_len)
|
inline AES_RETURN key(const unsigned char key[], int key_len)
|
||||||
{ return aes_decrypt_key(key, key_len, cx); }
|
{ return aes_decrypt_key(key, key_len, cx); }
|
||||||
#endif
|
#endif
|
||||||
AES_RETURN decrypt(const unsigned char in[], unsigned char out[]) const
|
inline AES_RETURN decrypt(const unsigned char in[], unsigned char out[]) const
|
||||||
{ return aes_decrypt(in, out, cx); }
|
{ return aes_decrypt(in, out, cx); }
|
||||||
#ifndef AES_MODES
|
#ifndef AES_MODES
|
||||||
AES_RETURN ecb_decrypt(const unsigned char in[], unsigned char out[], int nb) const
|
inline AES_RETURN ecb_decrypt(const unsigned char in[], unsigned char out[], int nb) const
|
||||||
{ while(nb--)
|
{ while(nb--)
|
||||||
{ aes_decrypt(in, out, cx), in += AES_BLOCK_SIZE, out += AES_BLOCK_SIZE; }
|
{ aes_decrypt(in, out, cx), in += AES_BLOCK_SIZE, out += AES_BLOCK_SIZE; }
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef AES_MODES
|
#ifdef AES_MODES
|
||||||
|
|
||||||
AES_RETURN ecb_decrypt(const unsigned char in[], unsigned char out[], int nb) const
|
inline AES_RETURN ecb_decrypt(const unsigned char in[], unsigned char out[], int nb) const
|
||||||
{ return aes_ecb_decrypt(in, out, nb, cx); }
|
{ return aes_ecb_decrypt(in, out, nb, cx); }
|
||||||
|
|
||||||
AES_RETURN cbc_decrypt(const unsigned char in[], unsigned char out[], int nb,
|
inline AES_RETURN cbc_decrypt(const unsigned char in[], unsigned char out[], int nb,
|
||||||
unsigned char iv[]) const
|
unsigned char iv[]) const
|
||||||
{ return aes_cbc_decrypt(in, out, nb, iv, cx); }
|
{ return aes_cbc_decrypt(in, out, nb, iv, cx); }
|
||||||
#endif
|
#endif
|
||||||
|
private:
|
||||||
|
aes_decrypt_ctx cx[1];
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
/* nettle, low-level cryptographics library
|
/* nettle, low-level cryptographics library
|
||||||
*
|
*
|
||||||
* Copyright (C) 2001 Niels Möller
|
* Copyright (C) 2001 Niels Müler
|
||||||
*
|
*
|
||||||
* The nettle library is free software; you can redistribute it and/or modify
|
* The nettle library is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
|
|
@ -187,6 +187,14 @@ void CGenPwDialog::OnRadio2StateChanged(bool state){
|
||||||
|
|
||||||
void CGenPwDialog::OnGeneratePw()
|
void CGenPwDialog::OnGeneratePw()
|
||||||
{
|
{
|
||||||
|
if(Check_CollectEntropy->isChecked()){
|
||||||
|
if((Check_CollectOncePerSession->isChecked() && !EntropyCollected) || !Check_CollectOncePerSession->isChecked()){
|
||||||
|
CollectEntropyDlg dlg(this);
|
||||||
|
dlg.exec();
|
||||||
|
EntropyCollected=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int length = Spin_Num->value();
|
int length = Spin_Num->value();
|
||||||
QString password;
|
QString password;
|
||||||
|
|
||||||
|
@ -407,14 +415,6 @@ QString CGenPwDialog::generatePasswordInternal(int length){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Check_CollectEntropy->isChecked()){
|
|
||||||
if((Check_CollectOncePerSession->isChecked() && !EntropyCollected) || !Check_CollectOncePerSession->isChecked()){
|
|
||||||
CollectEntropyDlg dlg(this);
|
|
||||||
dlg.exec();
|
|
||||||
EntropyCollected=true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString password(length, '\0');
|
QString password(length, '\0');
|
||||||
|
|
||||||
if (ensureEveryGroup){
|
if (ensureEveryGroup){
|
||||||
|
|
Loading…
Reference in New Issue