From 613fb99716c29f9dcf125a0b547e2ccae5eafac9 Mon Sep 17 00:00:00 2001 From: Andrea Scarpino Date: Thu, 21 Apr 2016 23:59:10 +0200 Subject: [PATCH] Use QByteArray to store the master key Fixes #1 --- qml/pages/MainPage.qml | 2 +- src/mpwmanager.cpp | 26 ++++++++++++++++---------- src/mpwmanager.h | 3 +-- translations/harbour-mpw.ts | 2 +- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/qml/pages/MainPage.qml b/qml/pages/MainPage.qml index d8fd5da..b3ef8ca 100644 --- a/qml/pages/MainPage.qml +++ b/qml/pages/MainPage.qml @@ -119,7 +119,7 @@ Page { onStatusChanged: { if (status === PageStatus.Activating) { - var isReady = manager.getName() !== "" && manager.getKey() !== ""; + var isReady = manager.getName() !== ""; site.enabled = isReady; if (!isReady) { diff --git a/src/mpwmanager.cpp b/src/mpwmanager.cpp index 1a03ce0..92af58b 100644 --- a/src/mpwmanager.cpp +++ b/src/mpwmanager.cpp @@ -40,11 +40,6 @@ MPWManager::~MPWManager() { } -QString MPWManager::getKey() const -{ - return m_key; -} - QString MPWManager::getName() const { return m_name; @@ -54,8 +49,14 @@ void MPWManager::setUserData(const QString &name, const QString &password) { m_name = name; - m_key = QString::fromLatin1((const char*) mpw_masterKeyForUser(name.toLatin1().data(), - password.toLatin1().data(), MPAlgorithmVersionCurrent)); + const uint8_t* k = mpw_masterKeyForUser(name.toUtf8().data(), password.toUtf8().data(), + MPAlgorithmVersionCurrent); + + if (k) { + m_key = QByteArray::fromRawData((const char*) k, MP_dkLen); + } else { + qCritical() << "Error during master key generation"; + } } QString MPWManager::getPassword(const QString &site, PasswordType type, const int counter) const @@ -73,7 +74,12 @@ QString MPWManager::getPassword(const QString &site, PasswordType type, const in default: qCritical() << "Unrecognized password type" << type; } - return QString::fromLatin1(mpw_passwordForSite((const unsigned char*) m_key.toLatin1().data(), - site.toLatin1().data(), t, counter, MPSiteVariantPassword, NULL, - MPAlgorithmVersionCurrent)); + const char* p = mpw_passwordForSite((const unsigned char*) m_key.data(), site.toUtf8().data(), + t, counter, MPSiteVariantPassword, NULL, MPAlgorithmVersionCurrent); + + if (p) { + return QString::fromUtf8(p); + } else { + return QString(); + } } diff --git a/src/mpwmanager.h b/src/mpwmanager.h index 1236fcd..97338cc 100644 --- a/src/mpwmanager.h +++ b/src/mpwmanager.h @@ -39,13 +39,12 @@ public: explicit MPWManager(QObject *parent = 0); virtual ~MPWManager(); - Q_INVOKABLE QString getKey() const; Q_INVOKABLE QString getName() const; Q_INVOKABLE void setUserData(const QString &name, const QString &password); Q_INVOKABLE QString getPassword(const QString &site, PasswordType type, const int counter) const; private: - QString m_key; + QByteArray m_key; QString m_name; }; diff --git a/translations/harbour-mpw.ts b/translations/harbour-mpw.ts index 363db1e..0b6f8ac 100644 --- a/translations/harbour-mpw.ts +++ b/translations/harbour-mpw.ts @@ -39,7 +39,7 @@ - + Please fill your name and master key in the Settings page! -- 2.23.0