#include "dialog.h" #include "ui_dialog.h" #include #include #include #include #include #include #include #include #include #include #include #include "polynomial.h" #include "executionresult.h" using namespace std; using namespace pol; const int iterations = 20; Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); setWindowTitle("*** Criptosistema ***"); ui->pushButton_2->setEnabled(false); ui->pushButton_3->setEnabled(false); connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(GenerarClaves())); } Dialog::~Dialog() { delete ui; } bool Dialog::identicalFiles(QString f1, QString f2) { QCryptographicHash hash1( QCryptographicHash::Sha1 ); QCryptographicHash hash2( QCryptographicHash::Sha1 ); QFile file1( f1 ); if ( file1.open( QIODevice::ReadOnly ) ) { hash1.addData( file1.readAll() ); } else { // Handle "cannot open file" error } QFile file2( f2 ); if ( file2.open( QIODevice::ReadOnly ) ) { hash2.addData( file2.readAll() ); } else { // Handle "cannot open file" error } if (hash1.result() == hash2.result()){ qDebug(" hash1.result() == hash2.result()"); return true; } else{ qDebug(" diferentes"); return false; } } void Dialog::GenerarClaves() { QMessageBox::information(this,"Alarta","Generando la clave......!!!"); /////////////// int numTasks = 100000; QProgressDialog progress("Task in progress...", "Cancel", 0, numTasks, this); progress.setWindowModality(Qt::WindowModal); for (int i = 0; i < numTasks; i++) { progress.setValue(i); if (progress.wasCanceled()) break; } progress.setValue(numTasks); // int invalidCount = 0; hash_nm::precalc_mul_table(); QTime timer; QHash results; int keyTime = 0; int encryptionTime = 0; int decryptionTime = 0; // repeticiones //for (int i = 0; i < 50; i++){ for(int i=1;i<=8;i++) { QString messageFile = "message"; QString textEncrip = "encryptedMessage"; QString textDecrip = "decryptedMessage"; messageFile.append(QString::number(i)); textEncrip.append(QString::number(i)); textDecrip.append(QString::number(i)); qDebug("generar archivo..."); // generar registros en archivo de texto QString fileName = "registro-superficie-"; fileName.append(messageFile+"-"); fileName.append(QDateTime::currentDateTime().toString("dd.MM.yy.hh.mm.ss")); fileName.append(".txt"); messageFile.append(".txt"); textEncrip.append(".txt"); textDecrip.append(".txt"); //qDebug("antes del while"); int validCount = 0; while ( true ) { FILE *fout = fopen(qPrintable(textEncrip), "wb"); QFile file( qPrintable(messageFile) ); if ( file.open(QIODevice::ReadWrite) ) { QTextStream stream( &file ); stream << "something" << endl; } //File in("message1.txt", READ); //qDebug(qPrintable(messageFile)); File in(qPrintable(messageFile), READ); pol_t kx = get_rand_pol(KEY_DEG, false); pol_t ky = get_rand_pol(KEY_DEG, false); // generacion de clave? timer.start(); pol3v_t D = get_open_key(kx, ky); keyTime = timer.elapsed(); //gets the runtime in ms // cifrado timer.start(); encrypt(in, fout, D); encryptionTime = timer.elapsed(); //gets the runtime in ms fclose(fout); in.~File(); FILE *fin = fopen(qPrintable(textEncrip), "rb"); File out(qPrintable(textDecrip), WRITE); // descifrado timer.start(); decrypt(fin, out, kx, ky); decryptionTime = timer.elapsed(); //gets the runtime in ms fclose(fin); out.close(); // verificacion //if (identicalFiles("message1.txt", "decryptedMessage.txt")){ if (Dialog::identicalFiles(qPrintable(messageFile), qPrintable(textDecrip))) { validCount++; ExecutionResult * execution = new ExecutionResult(keyTime, encryptionTime, decryptionTime); results.insert(validCount, execution); } else{ invalidCount++; } //validCount++; if (validCount == 1) { //qDebug("generar archivo..."); // generar registros en archivo de texto //QString fileName = "registro-"; //fileName.append(QDateTime::currentDateTime().toString("dd.MM.yy.hh.mm.ss")); //fileName.append(".txt"); QFile registerFile(fileName); if (registerFile.open(QFile::WriteOnly)) { QTextStream out(®isterFile); //out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7; // writes "Result: 3.14 2.7 " QString line; for (int j = 1; j <= validCount; j++) { ExecutionResult * x = results.value(j); int k = x->getKeyGenerationTime(); //qDebug("k: %d",k); int e = x->getEncryptionTime(); //qDebug("e: %d",e); int d = x->getDecryptionTime(); //qDebug("d: %d",d); line = QString::number(k) + " " + QString::number(e) + " " + QString::number(d) + "\n"; //qDebug(qPrintable(line)); out << line; line.clear(); } } qDebug("Fin del while"); break; } } } qDebug("invalidCount %d", invalidCount); qDebug("Salida Final."); for (int i= 0; i< 76; i++){ int value = this->ui->progressBar->value(); this->ui->progressBar->setValue(value+1); for (int j = 0; j< 2000; j++){ cout << value+1 << endl; cout << "------" << endl; } } QMessageBox::information(this,"Alarta","Listo......!!!"); this->ui->progressBar->deleteLater(); QString style = "QPushButton{ background-color: rgb(38, 90, 136); background-position: 0 -15px; color: rgb(255, 255, 255);}"; ui->pushButton_2->setStyleSheet(style); ui->pushButton_3->setStyleSheet(style); ui->pushButton_2->setEnabled(true); ui->pushButton_3->setEnabled(true); QString stylee = "QPushButton{ }"; ui->pushButton->setStyleSheet(stylee); ui->pushButton->setEnabled(false); }