diff --git a/src/Database.h b/src/Database.h index 7ffbd2f..9e85d0a 100644 --- a/src/Database.h +++ b/src/Database.h @@ -396,4 +396,12 @@ public: virtual bool createKeyFile(const QString& filename,int length=32, bool Hex=false)=0; }; +class IKdbSettings{ + public: + virtual void setCryptAlgorithm(CryptAlgorithm algo)=0; + virtual CryptAlgorithm cryptAlgorithm()=0; + virtual unsigned int keyTransfRounds()=0; + virtual void setKeyTransfRounds(unsigned int rounds)=0; +}; + #endif diff --git a/src/StandardDatabase.h b/src/StandardDatabase.h index b7f0c9f..8ade8e2 100644 --- a/src/StandardDatabase.h +++ b/src/StandardDatabase.h @@ -48,7 +48,7 @@ void memcpyToLEnd32(char* src,const quint32* dst); void memcpyToLEnd16(char* src,const quint16* dst); //! Implementation of the standard KeePassX database. -class StandardDatabase:public ICustomIcons,public IDatabase, public IFilePasswordAuth{ +class StandardDatabase:public ICustomIcons,public IDatabase, public IFilePasswordAuth, public IKdbSettings{ Q_OBJECT public: class StdGroup; @@ -160,6 +160,10 @@ public: virtual QList search(IGroupHandle* Group,const QString& SearchString, bool CaseSensitve, bool RegExp,bool Recursive,bool* Fields); virtual QFile* file(){return File;} virtual bool changeFile(const QString& filename); + virtual void setCryptAlgorithm(CryptAlgorithm algo){Algorithm=algo;} + virtual CryptAlgorithm cryptAlgorithm(){return Algorithm;} + virtual unsigned int keyTransfRounds(){return KeyTransfRounds;} + virtual void setKeyTransfRounds(unsigned int rounds){KeyTransfRounds=rounds;} virtual QList entries(); virtual QList entries(IGroupHandle* Group); diff --git a/src/crypto/yarrow.cpp b/src/crypto/yarrow.cpp index f43ff70..3132d38 100644 --- a/src/crypto/yarrow.cpp +++ b/src/crypto/yarrow.cpp @@ -401,9 +401,11 @@ yarrow256_force_reseed(struct yarrow256_ctx *ctx) struct yarrow256_ctx WeakCtx; struct yarrow256_ctx StrongCtx; struct yarrow_source WeakSrc[2]; +struct yarrow_source StrongSrc[2]; void initYarrow(){ yarrow256_init(&WeakCtx,2,WeakSrc); + yarrow256_init(&StrongCtx,2,StrongSrc); quint8 buffer[100]; srand(time(0)); for(int i=0;i<100;i++) @@ -416,5 +418,14 @@ void initYarrow(){ } void randomize(void* buffer, unsigned int length){ - yarrow256_random(&WeakCtx,length,(quint8*)buffer); + if(!yarrow256_is_seeded(&StrongCtx)) + yarrow256_random(&WeakCtx,length,(quint8*)buffer); + else + yarrow256_random(&StrongCtx,length,(quint8*)buffer); +} + +void strongRandomize(void* buffer, unsigned int length){ + Q_ASSERT(yarrow256_is_seeded(&StrongCtx)); + for(int i=0; i -#include -#include -//Added by qt3to4: + +#include +#include +#include +#include #include #include "main.h" #include "DatabaseSettingsDlg.h" @@ -29,66 +30,51 @@ CDbSettingsDlg::CDbSettingsDlg(QWidget* parent,IDatabase* db, bool modal, Qt::WFlags fl) : QDialog(parent,fl) { -setupUi(this); -database=db; -connect( ButtonOK, SIGNAL( clicked() ), this, SLOT( OnOK() ) ); -connect( ButtonCancel, SIGNAL( clicked() ), this, SLOT( OnCancel() ) ); + setupUi(this); + database=dynamic_cast(db); + createBanner(&BannerPixmap,Icon_Settings32x32,tr("Settings"),width()); + ComboAlgo->insertItem(0,tr("AES(Rijndael): 256 Bit (default)")); + ComboAlgo->insertItem(1,tr("Twofish: 256 Bit")); + ComboAlgo->setCurrentIndex(database->cryptAlgorithm()); //Achtung: AlgoID muss gleich dem ComboBox Index sein! + EditRounds->setText(QString::number(database->keyTransfRounds())); + connect( ButtonOK, SIGNAL( clicked() ), this, SLOT( OnOK() ) ); + connect( ButtonCancel, SIGNAL( clicked() ), this, SLOT( OnCancel() ) ); } CDbSettingsDlg::~CDbSettingsDlg() { } -void CDbSettingsDlg::showEvent(QShowEvent *event){ -//@NICHTVERGESSEN - /* -if(event->spontaneous()==false){ -createBanner(Banner,Icon_Settings32x32,tr("Settings")); -ComboAlgo->insertItem(0,tr("AES(Rijndael): 256 Bit (default)")); -ComboAlgo->insertItem(1,tr("Twofish: 256 Bit")); -ComboAlgo->setCurrentIndex(database->CryptoAlgorithmus); //Achtung: AlgoID muss gleich dem ComboBox Index sein! -EditRounds->setText(QString::number(database->KeyEncRounds)); - -} - */ +void CDbSettingsDlg::paintEvent(QPaintEvent *event){ + QDialog::paintEvent(event); + QPainter painter(this); + painter.setClipRegion(event->region()); + painter.drawPixmap(QPoint(0,0),BannerPixmap); } void CDbSettingsDlg::OnCancel() { -done(0); + done(0); } void CDbSettingsDlg::OnOK() { -if(EditRounds->text()==""){ -QMessageBox::warning(NULL,tr("Warning"),tr("Please determine the number of encryption rounds."),tr("OK")); -return; -} -bool valid; -int rounds=EditRounds->text().toUInt(&valid,10); -if(valid==false){ -QMessageBox::warning(NULL,tr("Error"),tr("'%1' is not valid integer value.").arg(EditRounds->text()),tr("OK")); -return; -} -if(rounds==0){ -QMessageBox::warning(NULL,tr("Error"),tr("The number of encryption rounds have to be greater than 0."),tr("OK")); -return; -} - -//@NICHTVERGESSEN -//database->KeyEncRounds=rounds; -//database->CryptoAlgorithmus=ComboAlgo->currentIndex(); - -done(1); -} - - - - - -/*$SPECIALIZATION$*/ - - -//#include "databasesettingsdlg.moc" - + if(EditRounds->text()==""){ + QMessageBox::warning(NULL,tr("Warning"),tr("Please determine the number of encryption rounds."),tr("OK")); + return; + } + bool valid; + int rounds=EditRounds->text().toUInt(&valid,10); + if(valid==false){ + QMessageBox::warning(NULL,tr("Error"),tr("'%1' is not valid integer value.").arg(EditRounds->text()),tr("OK")); + return; + } + if(rounds==0){ + QMessageBox::warning(NULL,tr("Error"),tr("The number of encryption rounds have to be greater than 0."),tr("OK")); + return; + } + database->setKeyTransfRounds(rounds); + database->setCryptAlgorithm((CryptAlgorithm)ComboAlgo->currentIndex()); + done(1); +} \ No newline at end of file diff --git a/src/dialogs/DatabaseSettingsDlg.h b/src/dialogs/DatabaseSettingsDlg.h index 6b78196..2a8abe5 100755 --- a/src/dialogs/DatabaseSettingsDlg.h +++ b/src/dialogs/DatabaseSettingsDlg.h @@ -1,6 +1,6 @@ /*************************************************************************** - * Copyright (C) 2005 by Tarek Saidi * - * tarek@linux * + * Copyright (C) 2005-2006 by Tarek Saidi * + * tarek.saidi@arcor.de * * * * 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 * @@ -17,39 +17,30 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ + #ifndef DBSETTINGSDLG_H #define DBSETTINGSDLG_H + #include "ui_DatabaseSettingsDlg.h" #include "main.h" #include "Database.h" -//Added by qt3to4: -#include +#include class CDbSettingsDlg : public QDialog, public Ui_dbsettingdlg_base { - Q_OBJECT - -public: - CDbSettingsDlg(QWidget* parent,IDatabase* db, bool modal = FALSE, Qt::WFlags fl = 0 ); - ~CDbSettingsDlg(); - virtual void showEvent(QShowEvent *); - /*$PUBLIC_FUNCTIONS$*/ - -public slots: - /*$PUBLIC_SLOTS$*/ - -protected: - /*$PROTECTED_FUNCTIONS$*/ - -protected slots: - /*$PROTECTED_SLOTS$*/ - -public slots: - virtual void OnCancel(); - virtual void OnOK(); - -private: - IDatabase* database; + Q_OBJECT + public: + CDbSettingsDlg(QWidget* parent,IDatabase* db, bool modal = FALSE, Qt::WFlags fl = 0 ); + ~CDbSettingsDlg(); + virtual void paintEvent(QPaintEvent *); + + public slots: + virtual void OnCancel(); + virtual void OnOK(); + + private: + IKdbSettings* database; + QPixmap BannerPixmap; }; #endif diff --git a/src/forms/DatabaseSettingsDlg.ui b/src/forms/DatabaseSettingsDlg.ui index 5139c6f..d837baa 100644 --- a/src/forms/DatabaseSettingsDlg.ui +++ b/src/forms/DatabaseSettingsDlg.ui @@ -60,22 +60,6 @@ Algorithm: - - - - 390 - 0 - 20 - 20 - - - - ? - - - - - @@ -110,22 +94,6 @@ - - - - 0 - 0 - 440 - 51 - - - - image0 - - - true - - diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 3fd6ad2..e09f965 100755 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -436,12 +436,15 @@ void KeepassMainWindow::OnFileNewKxdb(){ void KeepassMainWindow::OnFileOpen(){ - QString filename=QFileDialog::getOpenFileName(this,tr("Open Database..."),QDir::homePath(),"*.kdb"); - if(filename!=QString()){ - if(FileOpen) - if(!closeDatabase())return; - openDatabase(filename); - } + QFileDialog FileDlg(this,tr("Open Database..."),QDir::homePath()); + FileDlg.setFilters(QStringList()<< tr("KeePass Databases (*.kdb)")<< tr("All Files (*)")); + FileDlg.setFileMode(QFileDialog::ExistingFile); + FileDlg.setAcceptMode(QFileDialog::AcceptOpen); + if(!FileDlg.exec())return; + if(!FileDlg.selectedFiles().size())return; + if(FileOpen) + if(!closeDatabase())return; + openDatabase(FileDlg.selectedFiles()[0]); } void KeepassMainWindow::OnFileClose(){