Compare commits

...

10 commits

Author SHA1 Message Date
Aslan2142
5a69369fdd Merge branch 'fix-multiline' into 'master'
Fix critical \n \t bug

See merge request Aslan2142/passman!1
2022-08-20 17:23:55 +00:00
Aslan2142
5dce7c0d27 Remove unnecessary console log 2022-08-20 13:22:23 -04:00
Aslan2142
f3ea5d2e38 Update version number to 1.0.4 2022-08-20 13:17:43 -04:00
Aslan2142
a453286ba7 Fix critical bug where a collumn with newline or tab would scramble the data 2022-08-20 13:15:02 -04:00
Aslan2142
7121754106 Fix build 2022-08-20 13:13:54 -04:00
Aslan2142
bf5fc8af29 Updated readme to 1.0.3 2021-01-03 17:07:18 -05:00
Aslan2142
d6e780297e Show that it's asking for password if it's not present in the command line argument 2021-01-02 21:28:10 -05:00
Aslan2142
512445c47c Improved Comments 2020-08-23 03:34:00 +02:00
Aslan2142
7de7a8ef8a Edited help screen.... Again 2020-04-20 08:22:11 +02:00
Aslan2142
e75f10addc Bug Fixed and Fixed Crashes 2020-04-20 08:18:19 +02:00
22 changed files with 123 additions and 53 deletions

0
LICENSE Normal file → Executable file
View file

2
PKGBUILD_amd64 Normal file → Executable file
View file

@ -1,5 +1,5 @@
pkgname=passman pkgname=passman
pkgver=1.0.2 pkgver=1.0.4
pkgrel=1 pkgrel=1
pkgdesc="A Simple Password Manager with AES-256 Encryption" pkgdesc="A Simple Password Manager with AES-256 Encryption"
arch=('x86_64') arch=('x86_64')

2
PKGBUILD_arm64 Normal file → Executable file
View file

@ -1,5 +1,5 @@
pkgname=passman pkgname=passman
pkgver=1.0.2 pkgver=1.0.4
pkgrel=1 pkgrel=1
pkgdesc="A Simple Password Manager with AES-256 Encryption" pkgdesc="A Simple Password Manager with AES-256 Encryption"
arch=('aarch64') arch=('aarch64')

2
README.md Normal file → Executable file
View file

@ -2,7 +2,7 @@
A Simple Password Manager with AES-256 Encryption<br /> A Simple Password Manager with AES-256 Encryption<br />
Files **qaesencryption.cpp** and **qaesencryption.h** are from [This Repo](https://github.com/bricke/Qt-AES) Files **qaesencryption.cpp** and **qaesencryption.h** are from [This Repo](https://github.com/bricke/Qt-AES)
Version 1.0.2<br /> Version 1.0.4<br />
![screenshot.png](screenshot.png) ![screenshot.png](screenshot.png)

2
control_amd64 Normal file → Executable file
View file

@ -1,5 +1,5 @@
Package: passman Package: passman
Version: 1.0.2 Version: 1.0.4
Section: utils Section: utils
Priority: optional Priority: optional
Architecture: amd64 Architecture: amd64

2
control_arm64 Normal file → Executable file
View file

@ -1,5 +1,5 @@
Package: passman Package: passman
Version: 1.0.2 Version: 1.0.4
Section: utils Section: utils
Priority: optional Priority: optional
Architecture: arm64 Architecture: arm64

14
main.cpp Normal file → Executable file
View file

@ -6,8 +6,9 @@
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QString version = "1.0.2"; QString version = "1.0.4";
//Run GUI if no arguments are passed
if (argc == 1) if (argc == 1)
{ {
QApplication a(argc, argv); QApplication a(argc, argv);
@ -25,6 +26,7 @@ int main(int argc, char *argv[])
parameterparser parameter_parser(argc, argv); parameterparser parameter_parser(argc, argv);
passman password_manager; passman password_manager;
//Print help ccreen
if (parameter_parser.has_parameter("help", 'h')) if (parameter_parser.has_parameter("help", 'h'))
{ {
std::cout << "Passman v" << version.toStdString() << " - A Simple Password Manager with AES-256 Encryption by Aslan2142\n\n"; std::cout << "Passman v" << version.toStdString() << " - A Simple Password Manager with AES-256 Encryption by Aslan2142\n\n";
@ -46,13 +48,17 @@ int main(int argc, char *argv[])
return 0; return 0;
} }
//Load password from an argument (if present)
std::string password = parameter_parser.get_value("pass", 'p'); std::string password = parameter_parser.get_value("pass", 'p');
//Wait for password input in case it wasn't present in the argument
if (password.compare("-") == 0) if (password.compare("-") == 0)
{ {
std::cout << "Input Pasword: ";
std::cin >> password; std::cin >> password;
} }
password_manager.key = QString::fromStdString(password); password_manager.key = QString::fromStdString(password);
//Create database
if (parameter_parser.has_parameter("create-database", 'd')) if (parameter_parser.has_parameter("create-database", 'd'))
{ {
if (password_manager.database_exists()) if (password_manager.database_exists())
@ -71,6 +77,7 @@ int main(int argc, char *argv[])
} }
} }
//Print main errors (if occured)
if (!password_manager.load()) if (!password_manager.load())
{ {
std::cerr << "Error Loading Database" << std::endl; std::cerr << "Error Loading Database" << std::endl;
@ -82,6 +89,7 @@ int main(int argc, char *argv[])
return 2; return 2;
} }
//Create new entry
std::string new_entry = parameter_parser.get_value("new", 'n'); std::string new_entry = parameter_parser.get_value("new", 'n');
if (new_entry.compare("-") != 0) if (new_entry.compare("-") != 0)
{ {
@ -98,6 +106,7 @@ int main(int argc, char *argv[])
password_manager.save(); password_manager.save();
} }
//Remove an entry
std::string remove_entry = parameter_parser.get_value("remove", 'r'); std::string remove_entry = parameter_parser.get_value("remove", 'r');
if (remove_entry.compare("-") != 0) if (remove_entry.compare("-") != 0)
{ {
@ -131,11 +140,13 @@ int main(int argc, char *argv[])
password_manager.save(); password_manager.save();
} }
//Backup database
if (parameter_parser.has_parameter("backup", 'b')) if (parameter_parser.has_parameter("backup", 'b'))
{ {
password_manager.backup(); password_manager.backup();
} }
//Show all entries
if (parameter_parser.has_parameter("show-all", 'a')) if (parameter_parser.has_parameter("show-all", 'a'))
{ {
const std::vector<std::array<QString, 4>> database = password_manager.get_database_copy(); const std::vector<std::array<QString, 4>> database = password_manager.get_database_copy();
@ -145,6 +156,7 @@ int main(int argc, char *argv[])
} }
} }
//Search and show entries by website
std::string show_website = parameter_parser.get_value("show", 's'); std::string show_website = parameter_parser.get_value("show", 's');
if (show_website.compare("-") != 0) if (show_website.compare("-") != 0)
{ {

77
mainwindow.cpp Normal file → Executable file
View file

@ -26,7 +26,7 @@ MainWindow::~MainWindow()
void MainWindow::decrypt_database() void MainWindow::decrypt_database()
{ {
//Load and Decrypt Database //Load and decrypt database
password_manager.key = ui->lineEditEncryptionKey->text(); password_manager.key = ui->lineEditEncryptionKey->text();
if (!password_manager.load()) if (!password_manager.load())
@ -45,7 +45,7 @@ void MainWindow::decrypt_database()
ui->labelDatabaseInfo->setText("Database Loaded"); ui->labelDatabaseInfo->setText("Database Loaded");
ui->labelEncryptionInfo->setText("Database Decrypted"); ui->labelEncryptionInfo->setText("Database Decrypted");
//Fill up the Table //Fill up the table
std::vector<std::array<QString, 4>> database = password_manager.get_database_copy(); std::vector<std::array<QString, 4>> database = password_manager.get_database_copy();
ui->tableWidgetCredentials->clear(); ui->tableWidgetCredentials->clear();
@ -62,7 +62,7 @@ void MainWindow::decrypt_database()
saved = true; saved = true;
//Enable/Disable UI Elements //Enable/Disable UI elements
ui->pushButtonUnlock->setEnabled(false); ui->pushButtonUnlock->setEnabled(false);
ui->lineEditEncryptionKey->setEnabled(false); ui->lineEditEncryptionKey->setEnabled(false);
@ -75,12 +75,16 @@ void MainWindow::decrypt_database()
ui->lineEditSearch->setEnabled(true); ui->lineEditSearch->setEnabled(true);
ui->tableWidgetCredentials->setEnabled(true); ui->tableWidgetCredentials->setEnabled(true);
//Set UI collumn names
ui->tableWidgetCredentials->setHorizontalHeaderLabels({"Website", "Username", "Password", "Note"}); ui->tableWidgetCredentials->setHorizontalHeaderLabels({"Website", "Username", "Password", "Note"});
ui->tableWidgetCredentials->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui->tableWidgetCredentials->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
ui->lineEditSearch->setFocus();
} }
void MainWindow::backup_database() void MainWindow::backup_database()
{ {
//Backup the database if it exists
if (password_manager.backup()) if (password_manager.backup())
{ {
ui->labelDatabaseInfo->setText("Database Backup Complete"); ui->labelDatabaseInfo->setText("Database Backup Complete");
@ -91,18 +95,22 @@ void MainWindow::backup_database()
void MainWindow::save_database() void MainWindow::save_database()
{ {
//Clear old database data
password_manager.clear_database(); password_manager.clear_database();
std::array<QString, 4> tmp_row; std::array<QString, 4> tmp_row;
for (int i = 0; i < ui->tableWidgetCredentials->rowCount(); i++) for (int i = 0; i < ui->tableWidgetCredentials->rowCount(); i++)
{ {
//Get the data from the row
for (int j = 0; j < 4; j++) for (int j = 0; j < 4; j++)
{ {
tmp_row[static_cast<ulong>(j)] = ui->tableWidgetCredentials->item(i, j)->text(); tmp_row[static_cast<ulong>(j)] = ui->tableWidgetCredentials->item(i, j)->text();
} }
//Add the row data to the database
password_manager.add_entry(tmp_row[0], tmp_row[1], tmp_row[2], tmp_row[3]); password_manager.add_entry(tmp_row[0], tmp_row[1], tmp_row[2], tmp_row[3]);
} }
//Encrypt and save the database onto a drive
password_manager.encrypt(); password_manager.encrypt();
password_manager.save(); password_manager.save();
@ -113,12 +121,13 @@ void MainWindow::add_entry()
{ {
int row_count = ui->tableWidgetCredentials->rowCount(); int row_count = ui->tableWidgetCredentials->rowCount();
//Add the entry to the end of the database and scroll to the row
ui->tableWidgetCredentials->insertRow(row_count); ui->tableWidgetCredentials->insertRow(row_count);
ui->tableWidgetCredentials->scrollToItem(ui->tableWidgetCredentials->takeItem(row_count, 0)); ui->tableWidgetCredentials->scrollToItem(ui->tableWidgetCredentials->takeItem(row_count, 0));
ui->tableWidgetCredentials->setItem(row_count, 0, new QTableWidgetItem("")); ui->tableWidgetCredentials->setItem(row_count, 0, new QTableWidgetItem(""));
ui->tableWidgetCredentials->setItem(row_count, 1, new QTableWidgetItem("")); ui->tableWidgetCredentials->setItem(row_count, 1, new QTableWidgetItem(""));
ui->tableWidgetCredentials->setItem(row_count, 2, new QTableWidgetItem(password_manager.generate_password(password_length))); ui->tableWidgetCredentials->setItem(row_count, 2, new QTableWidgetItem(password_manager.generate_password(password_length))); //Add generated password
ui->tableWidgetCredentials->setItem(row_count, 3, new QTableWidgetItem("")); ui->tableWidgetCredentials->setItem(row_count, 3, new QTableWidgetItem(""));
saved = false; saved = false;
@ -126,10 +135,27 @@ void MainWindow::add_entry()
void MainWindow::remove_entry() void MainWindow::remove_entry()
{ {
//Get a list of selected database entries
QList<QTableWidgetItem*> selected = ui->tableWidgetCredentials->selectedItems(); QList<QTableWidgetItem*> selected = ui->tableWidgetCredentials->selectedItems();
saved = selected.size() <= 0; if (selected.size() > 0)
{
saved = false;
}
//Get rid of item duplicates caused by multiple collumns
int last_row = -1;
for (int i = 0; i < selected.size(); i++)
{
if (last_row == selected[i]->row())
{
selected.removeAt(i--);
continue;
}
last_row = selected[i]->row();
}
//Remove all selected rows
for (QTableWidgetItem* item : selected) for (QTableWidgetItem* item : selected)
{ {
ui->tableWidgetCredentials->removeRow(item->row()); ui->tableWidgetCredentials->removeRow(item->row());
@ -138,10 +164,27 @@ void MainWindow::remove_entry()
void MainWindow::generate_password() void MainWindow::generate_password()
{ {
//Get a list of selected database entries
QList<QTableWidgetItem*> selected = ui->tableWidgetCredentials->selectedItems(); QList<QTableWidgetItem*> selected = ui->tableWidgetCredentials->selectedItems();
saved = selected.size() <= 0; if (selected.size() > 0)
{
saved = false;
}
//Get rid of item duplicates caused by multiple collumns
int last_row = -1;
for (int i = 0; i < selected.size(); i++)
{
if (last_row == selected[i]->row())
{
selected.removeAt(i--);
continue;
}
last_row = selected[i]->row();
}
//Generate new password for all selected rows
for (QTableWidgetItem* item : selected) for (QTableWidgetItem* item : selected)
{ {
ui->tableWidgetCredentials->setItem(item->row(), 2, new QTableWidgetItem(password_manager.generate_password(password_length))); ui->tableWidgetCredentials->setItem(item->row(), 2, new QTableWidgetItem(password_manager.generate_password(password_length)));
@ -174,6 +217,7 @@ void MainWindow::search(const QString &input)
void MainWindow::closeEvent(QCloseEvent *event) void MainWindow::closeEvent(QCloseEvent *event)
{ {
//Close the program if the newest database is saved, if not show a dialog
if (saved) if (saved)
{ {
event->accept(); event->accept();
@ -206,17 +250,18 @@ void MainWindow::closeEvent(QCloseEvent *event)
void MainWindow::check_database() void MainWindow::check_database()
{ {
if (password_manager.database_exists()) if (password_manager.database_exists())
{ {
return; return;
} }
//Show new database dialog
QInputDialog input_dialog; QInputDialog input_dialog;
input_dialog.resize(400, 200); input_dialog.resize(400, 200);
input_dialog.setWindowTitle("Database not Found"); input_dialog.setWindowTitle("Database not Found");
input_dialog.setLabelText("Enter Password for your new Database:"); input_dialog.setLabelText("Enter Password for your new Database:");
//Close the dialog
if (input_dialog.exec() == 0) if (input_dialog.exec() == 0)
{ {
close(); close();
@ -232,6 +277,7 @@ void MainWindow::check_database()
password_manager.save(); password_manager.save();
} }
//Recheck to see if a new database has been created
check_database(); check_database();
} }
@ -242,12 +288,25 @@ void MainWindow::on_spinBoxPasswordLength_valueChanged(int arg1)
void MainWindow::on_tableWidgetCredentials_itemChanged() void MainWindow::on_tableWidgetCredentials_itemChanged()
{ {
saved = false; saved = false; //Set save indicator to false if database entry has been changed
} }
void MainWindow::on_tableWidgetCredentials_itemSelectionChanged() void MainWindow::on_tableWidgetCredentials_itemSelectionChanged()
{ {
if (ui->tableWidgetCredentials->selectedItems().size() > 1) //Get a list of selected database entries
QList<QTableWidgetItem*> selected = ui->tableWidgetCredentials->selectedItems();
int count = 0;
int last_row = -1;
//Count the number of entries
for (QTableWidgetItem* item : selected)
{
if (last_row != item->row()) count++; //Count only rows(entries) and not the collumns
last_row = item->row();
}
//Set the remove entry button text according to number of selected entries
if (count > 1)
{ {
ui->pushButtonRemoveEntry->setText("Remove Selected Entries"); ui->pushButtonRemoveEntry->setText("Remove Selected Entries");
} else { } else {

30
mainwindow.h Normal file → Executable file
View file

@ -19,27 +19,27 @@ class MainWindow : public QMainWindow
public: public:
explicit MainWindow(QString version, QWidget *parent = nullptr); explicit MainWindow(QString version, QWidget *parent = nullptr);
~MainWindow() override; ~MainWindow() override;
void check_database(); void check_database(); //Shows dialog to make a new database if it doesn't exist
protected: protected:
passman password_manager; passman password_manager; //Password manager object
bool saved = true; bool saved = true; //Indicates if all the database changes has been saved
int password_length = 20; int password_length = 20; //Used by the password generator
void closeEvent(QCloseEvent *event) override; void closeEvent(QCloseEvent *event) override; //Executes when user tries to close the app
protected slots: protected slots:
void decrypt_database(); void decrypt_database(); //Executes when user clicks on decrypt database button
void backup_database(); void backup_database(); //Executes when user clicks on backup database button
void save_database(); void save_database(); //Executes when user clicks on save database button
void add_entry(); void add_entry(); //Executes when user clicks on add entry button
void remove_entry(); void remove_entry(); //Executes when user clicks on remove entry button
void generate_password(); void generate_password(); //Executes when user clicks on generate password button
void search(const QString &input); void search(const QString &input); //Executes when user changes
private slots: private slots:
void on_spinBoxPasswordLength_valueChanged(int arg1); void on_spinBoxPasswordLength_valueChanged(int arg1); //Executes when password length spinbox has been changed
void on_tableWidgetCredentials_itemChanged(); void on_tableWidgetCredentials_itemChanged(); //Executes when database entry has been changed
void on_tableWidgetCredentials_itemSelectionChanged(); void on_tableWidgetCredentials_itemSelectionChanged(); //Executes when database entry selection has been changed
private: private:
Ui::MainWindow *ui; Ui::MainWindow *ui;

0
mainwindow.ui Normal file → Executable file
View file

0
makearchpkg.sh Normal file → Executable file
View file

0
makedebpkg.sh Normal file → Executable file
View file

0
parameterparser.cpp Normal file → Executable file
View file

3
parameterparser.h Normal file → Executable file
View file

@ -4,6 +4,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
//Help to manage the program input parameters
class parameterparser class parameterparser
{ {
public: public:
@ -13,7 +14,7 @@ public:
protected: protected:
std::vector<std::string> arg_names; std::vector<std::string> arg_names;
std::vector<std::string> arg_values; std::vector<std::string> arg_values;
void parse(int argc, char *argv[]); void parse(int argc, char *argv[]); //Parse the parameters and insert values into vectors of string
}; };
#endif // PARAMETERPARSER_H #endif // PARAMETERPARSER_H

7
passman.cpp Normal file → Executable file
View file

@ -2,7 +2,6 @@
passman::passman() : encryption(new QAESEncryption(QAESEncryption::AES_256, QAESEncryption::CBC)) { } passman::passman() : encryption(new QAESEncryption(QAESEncryption::AES_256, QAESEncryption::CBC)) { }
//Save Database to Disk
void passman::save() const void passman::save() const
{ {
QFile output_file(database_path); QFile output_file(database_path);
@ -11,7 +10,6 @@ void passman::save() const
output_file.close(); output_file.close();
} }
//Load Database from Disk
bool passman::load() bool passman::load()
{ {
if (!database_exists()) if (!database_exists())
@ -27,7 +25,6 @@ bool passman::load()
return true; return true;
} }
//Encrypt Database
void passman::encrypt() void passman::encrypt()
{ {
QByteArray data = QString("passwords\n").toLocal8Bit(); QByteArray data = QString("passwords\n").toLocal8Bit();
@ -37,6 +34,8 @@ void passman::encrypt()
{ {
for (QString& entry_column : entry_row) for (QString& entry_column : entry_row)
{ {
entry_column = entry_column.replace("\n", "");
entry_column = entry_column.replace("\t", "");
data.append((entry_column + '\t').toLocal8Bit()); data.append((entry_column + '\t').toLocal8Bit());
} }
data.append(QString('\n').toLocal8Bit()); data.append(QString('\n').toLocal8Bit());
@ -50,7 +49,6 @@ void passman::encrypt()
encrypted_data = data; encrypted_data = data;
} }
//Decrypt Database
bool passman::decrypt() bool passman::decrypt()
{ {
QByteArray data = encrypted_data; QByteArray data = encrypted_data;
@ -96,7 +94,6 @@ bool passman::decrypt()
return stringData.startsWith("password"); return stringData.startsWith("password");
} }
//Make Database Backup
bool passman::backup() const bool passman::backup() const
{ {
if (!database_exists()) if (!database_exists())

35
passman.h Normal file → Executable file
View file

@ -3,6 +3,7 @@
#include <iostream> #include <iostream>
#include <vector> #include <vector>
#include <array>
#include <QString> #include <QString>
#include <QCryptographicHash> #include <QCryptographicHash>
#include <QRandomGenerator> #include <QRandomGenerator>
@ -16,26 +17,26 @@ class passman
public: public:
passman(); passman();
QString database_path = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/credentials.database"; QString database_path = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/credentials.database";
QString key = ""; QString key = ""; //Database encryption key
void save() const; void save() const; //Save the database to the database path on drive
bool load(); bool load(); //Loads the database from the database path on a drive
void encrypt(); void encrypt(); //Encrypts database entries into encrypted data
bool decrypt(); bool decrypt(); //Decrypts encrypted database data into database entries
bool backup() const; bool backup() const; //Backups the database in a backup location on a drive and returns false if there is not a database to backup
void add_entry(QString website_name, QString username, QString password, QString note); void add_entry(QString website_name, QString username, QString password, QString note); //Add new entry to database
void remove_entry(int index); void remove_entry(int index); //Return entry from a database
void alter_entry(int index, QString new_website_name, QString new_username, QString new_password, QString new_note); void alter_entry(int index, QString new_website_name, QString new_username, QString new_password, QString new_note); //Alter database entry
void clear_database(); void clear_database(); //Removes everything from the database
std::array<QString, 4> get_entry_copy(int index) const; std::array<QString, 4> get_entry_copy(int index) const; //Returns entry copy from the database
std::vector<std::array<QString, 4>> get_database_copy() const; std::vector<std::array<QString, 4>> get_database_copy() const; //Returns full database copy
QString generate_password(int length) const; QString generate_password(int length) const; //Returns newly generated password string
bool database_exists() const; bool database_exists() const; //Returns true if database exists on a drive in certain location
protected: protected:
QAESEncryption *encryption; QAESEncryption *encryption; //Pointer to an object used for encryption
QByteArray encrypted_data; //Encrypted Database QByteArray encrypted_data; //Encrypted Database
std::vector<std::array<QString, 4>> decrypted_entries; //Database Entries std::vector<std::array<QString, 4>> decrypted_entries; //Database Entries
QString characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:;.,/=-+*<>{}()[]_%#$@!?^&"; QString characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:;.,/=-+*<>{}()[]_%#$@!?^&"; //List of characters for password generator
QStringList ivs = { QStringList ivs = {
"jW2jT]%0k2#-2R1.d(7'6V0Z|4=-HX2G9@F;561.07@21,NHq42)*896M(18R+9w080*Hs^,45G?;]5R7}'*0Z67?Y7|%SFI**0g", "jW2jT]%0k2#-2R1.d(7'6V0Z|4=-HX2G9@F;561.07@21,NHq42)*896M(18R+9w080*Hs^,45G?;]5R7}'*0Z67?Y7|%SFI**0g",
")OR2*711+M)*a,5D/qB}/#]|fN*30oA<#;>]B80>,4J9@<<;J5;#wL*]p$G9D0i1860;Y<I*.)0diN/yi*08;^hJ596]2NY9&+#l", ")OR2*711+M)*a,5D/qB}/#]|fN*30oA<#;>]B80>,4J9@<<;J5;#wL*]p$G9D0i1860;Y<I*.)0diN/yi*08;^hJ596]2NY9&+#l",
@ -47,7 +48,7 @@ protected:
"72|/3;10O@!(|t)]8}02Gf126N)+6*w6e2P57/dWd*JW5+aR?h31e/=4o5<H@Uzu2<;71Qd63B{k9-PQ_41[5yA'e^?2A27$[8-7", "72|/3;10O@!(|t)]8}02Gf126N)+6*w6e2P57/dWd*JW5+aR?h31e/=4o5<H@Uzu2<;71Qd63B{k9-PQ_41[5yA'e^?2A27$[8-7",
"H(6>8!$l9!4?6_,7L%4}z3Lu8;sb^q}9%lVy6I57L]8<,-ho?310Dd_h|y1#iz%3]rN'zr5T1Bc2uQ5cb!K39386)50c0+%.w.X'", "H(6>8!$l9!4?6_,7L%4}z3Lu8;sb^q}9%lVy6I57L]8<,-ho?310Dd_h|y1#iz%3]rN'zr5T1Bc2uQ5cb!K39386)50c0+%.w.X'",
"2-n$rL3v4T/*/22F%2tN}.yDX78#50z3Z9-B10X5*4]97+R-OK'2^F%7$>95c8jLu531C==1|V7Cd=o;5L6/B17jF2C9<1]R4'DY", "2-n$rL3v4T/*/22F%2tN}.yDX78#50z3Z9-B10X5*4]97+R-OK'2^F%7$>95c8jLu531C==1|V7Cd=o;5L6/B17jF2C9<1]R4'DY",
}; }; //List of initialization vectors for aes encryption/decryption
}; };
#endif // PASSMAN_H #endif // PASSMAN_H

0
passman.pro Normal file → Executable file
View file

0
passman_icon.svg Normal file → Executable file
View file

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before After
Before After

0
qaesencryption.cpp Normal file → Executable file
View file

0
qaesencryption.h Normal file → Executable file
View file

0
resources.qrc Normal file → Executable file
View file

0
screenshot.png Normal file → Executable file
View file

Before

Width:  |  Height:  |  Size: 302 KiB

After

Width:  |  Height:  |  Size: 302 KiB

Before After
Before After