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
master
sniperbeamer 16 years ago
parent 0c6cd885f6
commit 456bb2dc33
  1. 4
      share/keepassx/license.html
  2. 122
      src/crypto/aescpp.h
  3. 2
      src/crypto/yarrow_macros.h
  4. 16
      src/dialogs/PasswordGenDlg.cpp

@ -1,5 +1,5 @@
<html><pre>Copyright (C) 2005-2007 Tarek Saidi &lt;tarek.saidi@arcor.de&gt; <html><pre>Copyright (C) 2005-2008 Tarek Saidi &lt;tarek.saidi@arcor.de&gt;
Copyright (C) 2007-2008 Felix Geyer &lt;debfx-keepassx@fobos.de&gt; Copyright (C) 2007-2009 Felix Geyer &lt;debfx-keepassx {at} fobos.de&gt;
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){