added UUID class for a correct implementation of the entry uuids
git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@96 b624d157-de02-0410-bad0-e51aec6abb33
This commit is contained in:
		
							parent
							
								
									f060033b14
								
							
						
					
					
						commit
						9b6f3c8fce
					
				|  | @ -19,6 +19,58 @@ | |||
|  ***************************************************************************/ | ||||
| 
 | ||||
| #include "Database.h" | ||||
| #include "lib/random.h" | ||||
| 
 | ||||
| KpxUuid::KpxUuid(){ | ||||
| 	generate(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void KpxUuid::generate(){ | ||||
| 	char uuid[16]; | ||||
| 	getRandomBytes(uuid,16); | ||||
| 	quint32 Secs=QDateTime::currentDateTime().toTime_t(); | ||||
| 	quint16 mSecs=QTime::currentTime().msec(); | ||||
| 	mSecs=(mSecs & 0x3FF) | (*((quint16*)(uuid+4)) & 0xFC00); //msec has only 10 Bits, filling the rest with random data
 | ||||
| 	memcpy((void*)uuid,&Secs,4); | ||||
| 	memcpy((void*)(uuid+4),&mSecs,2); | ||||
| 	Data=QByteArray(uuid,16); | ||||
| } | ||||
| 
 | ||||
| QString KpxUuid::toString()const{ | ||||
| 	QString hex; | ||||
| 	Q_ASSERT(Data.length()==16); | ||||
| 	for(int i=0;i<16;i++){ | ||||
| 		QString HexByte; | ||||
| 		HexByte.setNum((unsigned char)*(Data.data()+i),16); | ||||
| 		if(HexByte.length()<2)HexByte="0"+HexByte; | ||||
| 		hex+=HexByte; | ||||
| 	} | ||||
| 	return QString("{%1-%2-%3-%4-%5}") | ||||
| 			.arg(hex.mid(0,8)) | ||||
| 			.arg(hex.mid(8,4)) | ||||
| 			.arg(hex.mid(12,4))	 | ||||
| 			.arg(hex.mid(16,4))											 | ||||
| 			.arg(hex.mid(20,12)); | ||||
| } | ||||
| 
 | ||||
| void KpxUuid::toRaw(void* dst){ | ||||
| 	memcpy(dst,Data.data(),16); | ||||
| } | ||||
| 
 | ||||
| void KpxUuid::fromRaw(void* src){ | ||||
| 	Data=QByteArray((char*)src,16); | ||||
| } | ||||
| 
 | ||||
| bool KpxUuid::operator==(const KpxUuid& other)const{ | ||||
| 	return other.Data==Data; | ||||
| } | ||||
| 
 | ||||
| bool KpxUuid::operator!=(const KpxUuid& other)const{ | ||||
| 	return other.Data!=Data; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| QString KpxDateTime::toString(Qt::DateFormat format) const{ | ||||
| if(*this==Date_Never)return QObject::tr("Never"); | ||||
|  |  | |||
|  | @ -24,10 +24,27 @@ | |||
| #include <QDateTime> | ||||
| #include <QFile> | ||||
| #include <QPixmap> | ||||
| #include <QByteArray> | ||||
| #include "lib/SecString.h" | ||||
| using namespace std; | ||||
| 
 | ||||
| extern const QDateTime Date_Never; | ||||
| 
 | ||||
| class KpxUuid{ | ||||
| public: | ||||
| 	KpxUuid(); | ||||
| 	bool operator==(const KpxUuid&) const; | ||||
| 	bool operator!=(const KpxUuid&) const; | ||||
| 	QString toString() const; | ||||
| 	const unsigned char* data()const | ||||
| 		{return (const unsigned char*) Data.data();} | ||||
| 	void toRaw(void* dst); | ||||
| 	void fromRaw(void* src); | ||||
| private: | ||||
| 	void generate(); | ||||
| 	QByteArray Data; | ||||
| }; | ||||
| 
 | ||||
| class KpxDateTime:public QDateTime{ | ||||
| public: | ||||
| KpxDateTime(){}; | ||||
|  |  | |||
|  | @ -35,6 +35,7 @@ | |||
| #include "PwmConfig.h" | ||||
| #include "PwManager.h" | ||||
| #include "mainwindow.h" | ||||
| #include "Database.h" | ||||
| using namespace std; | ||||
| 
 | ||||
| #ifdef Q_WS_X11 | ||||
|  | @ -82,6 +83,12 @@ bool loadTranslation(QTranslator* tr,const QString& prefix,const QString& Locale | |||
| 
 | ||||
| int main(int argc, char **argv) | ||||
| { | ||||
| for(int i=0;i<100;i++){ | ||||
| 	KpxUuid id; | ||||
| 	cout << (const char*)id.toString().toAscii() << endl; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| QApplication* app=new QApplication(argc,argv); | ||||
| QString ArgFile,ArgCfg,ArgLang,IniFilename; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 tarek_saidi
						tarek_saidi