mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-02-17 21:04:19 -05:00
Merge pull request #1207 from weslly/rename-totp-class
Rename QTotp class name to Totp
This commit is contained in:
commit
42abc858a4
@ -42,8 +42,8 @@ Entry::Entry()
|
|||||||
m_data.iconNumber = DefaultIconNumber;
|
m_data.iconNumber = DefaultIconNumber;
|
||||||
m_data.autoTypeEnabled = true;
|
m_data.autoTypeEnabled = true;
|
||||||
m_data.autoTypeObfuscation = 0;
|
m_data.autoTypeObfuscation = 0;
|
||||||
m_data.totpStep = QTotp::defaultStep;
|
m_data.totpStep = Totp::defaultStep;
|
||||||
m_data.totpDigits = QTotp::defaultDigits;
|
m_data.totpDigits = Totp::defaultDigits;
|
||||||
|
|
||||||
connect(m_attributes, SIGNAL(modified()), this, SIGNAL(modified()));
|
connect(m_attributes, SIGNAL(modified()), this, SIGNAL(modified()));
|
||||||
connect(m_attributes, SIGNAL(defaultKeyModified()), SLOT(emitDataChanged()));
|
connect(m_attributes, SIGNAL(defaultKeyModified()), SLOT(emitDataChanged()));
|
||||||
@ -317,7 +317,7 @@ QString Entry::totp() const
|
|||||||
if (hasTotp()) {
|
if (hasTotp()) {
|
||||||
QString seed = totpSeed();
|
QString seed = totpSeed();
|
||||||
quint64 time = QDateTime::currentDateTime().toTime_t();
|
quint64 time = QDateTime::currentDateTime().toTime_t();
|
||||||
QString output = QTotp::generateTotp(seed.toLatin1(), time, m_data.totpDigits, m_data.totpStep);
|
QString output = Totp::generateTotp(seed.toLatin1(), time, m_data.totpDigits, m_data.totpStep);
|
||||||
|
|
||||||
return QString(output);
|
return QString(output);
|
||||||
} else {
|
} else {
|
||||||
@ -328,15 +328,15 @@ QString Entry::totp() const
|
|||||||
void Entry::setTotp(const QString& seed, quint8& step, quint8& digits)
|
void Entry::setTotp(const QString& seed, quint8& step, quint8& digits)
|
||||||
{
|
{
|
||||||
if (step == 0) {
|
if (step == 0) {
|
||||||
step = QTotp::defaultStep;
|
step = Totp::defaultStep;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (digits == 0) {
|
if (digits == 0) {
|
||||||
digits = QTotp::defaultDigits;
|
digits = Totp::defaultDigits;
|
||||||
}
|
}
|
||||||
QString data;
|
QString data;
|
||||||
|
|
||||||
const QTotp::Encoder & enc = QTotp::encoders.value(digits, QTotp::defaultEncoder);
|
const Totp::Encoder & enc = Totp::encoders.value(digits, Totp::defaultEncoder);
|
||||||
|
|
||||||
if (m_attributes->hasKey("otp")) {
|
if (m_attributes->hasKey("otp")) {
|
||||||
data = QString("key=%1&step=%2&size=%3").arg(seed).arg(step).arg(enc.digits == 0 ? digits : enc.digits);
|
data = QString("key=%1&step=%2&size=%3").arg(seed).arg(step).arg(enc.digits == 0 ? digits : enc.digits);
|
||||||
@ -365,24 +365,24 @@ QString Entry::totpSeed() const
|
|||||||
secret = m_attributes->value("TOTP Seed");
|
secret = m_attributes->value("TOTP Seed");
|
||||||
}
|
}
|
||||||
|
|
||||||
m_data.totpDigits = QTotp::defaultDigits;
|
m_data.totpDigits = Totp::defaultDigits;
|
||||||
m_data.totpStep = QTotp::defaultStep;
|
m_data.totpStep = Totp::defaultStep;
|
||||||
|
|
||||||
if (m_attributes->hasKey("TOTP Settings")) {
|
if (m_attributes->hasKey("TOTP Settings")) {
|
||||||
// this regex must be kept in sync with the set of allowed short names QTotp::shortNameToEncoder
|
// this regex must be kept in sync with the set of allowed short names Totp::shortNameToEncoder
|
||||||
QRegularExpression rx(QString("(\\d+);((?:\\d+)|S)"));
|
QRegularExpression rx(QString("(\\d+);((?:\\d+)|S)"));
|
||||||
QRegularExpressionMatch m = rx.match(m_attributes->value("TOTP Settings"));
|
QRegularExpressionMatch m = rx.match(m_attributes->value("TOTP Settings"));
|
||||||
if (m.hasMatch()) {
|
if (m.hasMatch()) {
|
||||||
m_data.totpStep = m.captured(1).toUInt();
|
m_data.totpStep = m.captured(1).toUInt();
|
||||||
if (QTotp::shortNameToEncoder.contains(m.captured(2))) {
|
if (Totp::shortNameToEncoder.contains(m.captured(2))) {
|
||||||
m_data.totpDigits = QTotp::shortNameToEncoder[m.captured(2)];
|
m_data.totpDigits = Totp::shortNameToEncoder[m.captured(2)];
|
||||||
} else {
|
} else {
|
||||||
m_data.totpDigits = m.captured(2).toUInt();
|
m_data.totpDigits = m.captured(2).toUInt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return QTotp::parseOtpString(secret, m_data.totpDigits, m_data.totpStep);
|
return Totp::parseOtpString(secret, m_data.totpDigits, m_data.totpStep);
|
||||||
}
|
}
|
||||||
|
|
||||||
quint8 Entry::totpStep() const
|
quint8 Entry::totpStep() const
|
||||||
|
@ -46,7 +46,7 @@ void SetupTotpDialog::setupTotp()
|
|||||||
quint8 digits;
|
quint8 digits;
|
||||||
|
|
||||||
if (m_ui->radioSteam->isChecked()) {
|
if (m_ui->radioSteam->isChecked()) {
|
||||||
digits = QTotp::ENCODER_STEAM;
|
digits = Totp::ENCODER_STEAM;
|
||||||
} else if (m_ui->radio8Digits->isChecked()) {
|
} else if (m_ui->radio8Digits->isChecked()) {
|
||||||
digits = 8;
|
digits = 8;
|
||||||
} else {
|
} else {
|
||||||
@ -54,7 +54,7 @@ void SetupTotpDialog::setupTotp()
|
|||||||
}
|
}
|
||||||
|
|
||||||
quint8 step = m_ui->stepSpinBox->value();
|
quint8 step = m_ui->stepSpinBox->value();
|
||||||
QString seed = QTotp::parseOtpString(m_ui->seedEdit->text(), digits, step);
|
QString seed = Totp::parseOtpString(m_ui->seedEdit->text(), digits, step);
|
||||||
m_entry->setTotp(seed, step, digits);
|
m_entry->setTotp(seed, step, digits);
|
||||||
emit m_parent->entrySelectionChanged();
|
emit m_parent->entrySelectionChanged();
|
||||||
close();
|
close();
|
||||||
@ -63,16 +63,16 @@ void SetupTotpDialog::setupTotp()
|
|||||||
void SetupTotpDialog::toggleDefault(bool status)
|
void SetupTotpDialog::toggleDefault(bool status)
|
||||||
{
|
{
|
||||||
if (status) {
|
if (status) {
|
||||||
setStep(QTotp::defaultStep);
|
setStep(Totp::defaultStep);
|
||||||
setDigits(QTotp::defaultDigits);
|
setDigits(Totp::defaultDigits);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetupTotpDialog::toggleSteam(bool status)
|
void SetupTotpDialog::toggleSteam(bool status)
|
||||||
{
|
{
|
||||||
if (status) {
|
if (status) {
|
||||||
setStep(QTotp::defaultStep);
|
setStep(Totp::defaultStep);
|
||||||
setDigits(QTotp::ENCODER_STEAM);
|
setDigits(Totp::ENCODER_STEAM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,9 +95,9 @@ void SetupTotpDialog::setSeed(QString value)
|
|||||||
void SetupTotpDialog::setSettings(quint8 digits) {
|
void SetupTotpDialog::setSettings(quint8 digits) {
|
||||||
quint8 step = m_ui->stepSpinBox->value();
|
quint8 step = m_ui->stepSpinBox->value();
|
||||||
|
|
||||||
bool isDefault = ((step == QTotp::defaultStep) &&
|
bool isDefault = ((step == Totp::defaultStep) &&
|
||||||
(digits == QTotp::defaultDigits));
|
(digits == Totp::defaultDigits));
|
||||||
bool isSteam = (digits == QTotp::ENCODER_STEAM);
|
bool isSteam = (digits == Totp::ENCODER_STEAM);
|
||||||
|
|
||||||
if (isSteam) {
|
if (isSteam) {
|
||||||
m_ui->radioSteam->setChecked(true);
|
m_ui->radioSteam->setChecked(true);
|
||||||
|
@ -28,8 +28,8 @@
|
|||||||
#include <QtEndian>
|
#include <QtEndian>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
const quint8 QTotp::defaultStep = 30;
|
const quint8 Totp::defaultStep = 30;
|
||||||
const quint8 QTotp::defaultDigits = 6;
|
const quint8 Totp::defaultDigits = 6;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Custom encoder types. Each should be unique and >= 128 and < 255
|
* Custom encoder types. Each should be unique and >= 128 and < 255
|
||||||
@ -38,11 +38,11 @@ const quint8 QTotp::defaultDigits = 6;
|
|||||||
/**
|
/**
|
||||||
* Encoder for Steam Guard TOTP
|
* Encoder for Steam Guard TOTP
|
||||||
*/
|
*/
|
||||||
const quint8 QTotp::ENCODER_STEAM = 254;
|
const quint8 Totp::ENCODER_STEAM = 254;
|
||||||
|
|
||||||
const QTotp::Encoder QTotp::defaultEncoder = { "", "", "0123456789", 0, 0, false };
|
const Totp::Encoder Totp::defaultEncoder = { "", "", "0123456789", 0, 0, false };
|
||||||
const QMap<quint8, QTotp::Encoder> QTotp::encoders{
|
const QMap<quint8, Totp::Encoder> Totp::encoders{
|
||||||
{ QTotp::ENCODER_STEAM, { "steam", "S", "23456789BCDFGHJKMNPQRTVWXY", 5, 30, true } },
|
{ Totp::ENCODER_STEAM, { "steam", "S", "23456789BCDFGHJKMNPQRTVWXY", 5, 30, true } },
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -52,23 +52,23 @@ const QMap<quint8, QTotp::Encoder> QTotp::encoders{
|
|||||||
* NOTE: when updating this map, a corresponding edit to the settings regex must be made
|
* NOTE: when updating this map, a corresponding edit to the settings regex must be made
|
||||||
* in Entry::totpSeed()
|
* in Entry::totpSeed()
|
||||||
*/
|
*/
|
||||||
const QMap<QString, quint8> QTotp::shortNameToEncoder{
|
const QMap<QString, quint8> Totp::shortNameToEncoder{
|
||||||
{ "S", QTotp::ENCODER_STEAM },
|
{ "S", Totp::ENCODER_STEAM },
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* These map the "encoder=" URL parameter of the "otp" field to our internal encoder number
|
* These map the "encoder=" URL parameter of the "otp" field to our internal encoder number
|
||||||
* that overloads the digits field. Make sure that the key matches the name value
|
* that overloads the digits field. Make sure that the key matches the name value
|
||||||
* in the corresponding Encoder
|
* in the corresponding Encoder
|
||||||
*/
|
*/
|
||||||
const QMap<QString, quint8> QTotp::nameToEncoder{
|
const QMap<QString, quint8> Totp::nameToEncoder{
|
||||||
{ "steam", QTotp::ENCODER_STEAM },
|
{ "steam", Totp::ENCODER_STEAM },
|
||||||
};
|
};
|
||||||
|
|
||||||
QTotp::QTotp()
|
Totp::Totp()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QTotp::parseOtpString(QString key, quint8& digits, quint8& step)
|
QString Totp::parseOtpString(QString key, quint8& digits, quint8& step)
|
||||||
{
|
{
|
||||||
QUrl url(key);
|
QUrl url(key);
|
||||||
|
|
||||||
@ -128,7 +128,7 @@ QString QTotp::parseOtpString(QString key, quint8& digits, quint8& step)
|
|||||||
return seed;
|
return seed;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QTotp::generateTotp(const QByteArray key,
|
QString Totp::generateTotp(const QByteArray key,
|
||||||
quint64 time,
|
quint64 time,
|
||||||
const quint8 numDigits = defaultDigits,
|
const quint8 numDigits = defaultDigits,
|
||||||
const quint8 step = defaultStep)
|
const quint8 step = defaultStep)
|
||||||
@ -176,7 +176,7 @@ QString QTotp::generateTotp(const QByteArray key,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// See: https://github.com/google/google-authenticator/wiki/Key-Uri-Format
|
// See: https://github.com/google/google-authenticator/wiki/Key-Uri-Format
|
||||||
QUrl QTotp::generateOtpString(const QString& secret,
|
QUrl Totp::generateOtpString(const QString& secret,
|
||||||
const QString& type,
|
const QString& type,
|
||||||
const QString& issuer,
|
const QString& issuer,
|
||||||
const QString& username,
|
const QString& username,
|
||||||
|
@ -25,10 +25,10 @@
|
|||||||
|
|
||||||
class QUrl;
|
class QUrl;
|
||||||
|
|
||||||
class QTotp
|
class Totp
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QTotp();
|
Totp();
|
||||||
static QString parseOtpString(QString rawSecret, quint8& digits, quint8& step);
|
static QString parseOtpString(QString rawSecret, quint8& digits, quint8& step);
|
||||||
static QString generateTotp(const QByteArray key, quint64 time, const quint8 numDigits, const quint8 step);
|
static QString generateTotp(const QByteArray key, quint64 time, const quint8 numDigits, const quint8 step);
|
||||||
static QUrl generateOtpString(const QString& secret,
|
static QUrl generateOtpString(const QString& secret,
|
||||||
|
@ -41,21 +41,21 @@ void TestTotp::testParseSecret()
|
|||||||
QString secret = "otpauth://totp/"
|
QString secret = "otpauth://totp/"
|
||||||
"ACME%20Co:john@example.com?secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=ACME%20Co&algorithm="
|
"ACME%20Co:john@example.com?secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=ACME%20Co&algorithm="
|
||||||
"SHA1&digits=6&period=30";
|
"SHA1&digits=6&period=30";
|
||||||
QCOMPARE(QTotp::parseOtpString(secret, digits, step), QString("HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ"));
|
QCOMPARE(Totp::parseOtpString(secret, digits, step), QString("HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ"));
|
||||||
QCOMPARE(digits, quint8(6));
|
QCOMPARE(digits, quint8(6));
|
||||||
QCOMPARE(step, quint8(30));
|
QCOMPARE(step, quint8(30));
|
||||||
|
|
||||||
digits = QTotp::defaultDigits;
|
digits = Totp::defaultDigits;
|
||||||
step = QTotp::defaultStep;
|
step = Totp::defaultStep;
|
||||||
secret = "key=HXDMVJECJJWSRBY%3d&step=25&size=8";
|
secret = "key=HXDMVJECJJWSRBY%3d&step=25&size=8";
|
||||||
QCOMPARE(QTotp::parseOtpString(secret, digits, step), QString("HXDMVJECJJWSRBY="));
|
QCOMPARE(Totp::parseOtpString(secret, digits, step), QString("HXDMVJECJJWSRBY="));
|
||||||
QCOMPARE(digits, quint8(8));
|
QCOMPARE(digits, quint8(8));
|
||||||
QCOMPARE(step, quint8(25));
|
QCOMPARE(step, quint8(25));
|
||||||
|
|
||||||
digits = 0;
|
digits = 0;
|
||||||
step = 0;
|
step = 0;
|
||||||
secret = "gezdgnbvgy3tqojqgezdgnbvgy3tqojq";
|
secret = "gezdgnbvgy3tqojqgezdgnbvgy3tqojq";
|
||||||
QCOMPARE(QTotp::parseOtpString(secret, digits, step), QString("gezdgnbvgy3tqojqgezdgnbvgy3tqojq"));
|
QCOMPARE(Totp::parseOtpString(secret, digits, step), QString("gezdgnbvgy3tqojqgezdgnbvgy3tqojq"));
|
||||||
QCOMPARE(digits, quint8(6));
|
QCOMPARE(digits, quint8(6));
|
||||||
QCOMPARE(step, quint8(30));
|
QCOMPARE(step, quint8(30));
|
||||||
}
|
}
|
||||||
@ -68,26 +68,26 @@ void TestTotp::testTotpCode()
|
|||||||
QByteArray seed = QString("GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ").toLatin1();
|
QByteArray seed = QString("GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ").toLatin1();
|
||||||
|
|
||||||
quint64 time = 1234567890;
|
quint64 time = 1234567890;
|
||||||
QString output = QTotp::generateTotp(seed, time, 6, 30);
|
QString output = Totp::generateTotp(seed, time, 6, 30);
|
||||||
QCOMPARE(output, QString("005924"));
|
QCOMPARE(output, QString("005924"));
|
||||||
|
|
||||||
time = 1111111109;
|
time = 1111111109;
|
||||||
output = QTotp::generateTotp(seed, time, 6, 30);
|
output = Totp::generateTotp(seed, time, 6, 30);
|
||||||
QCOMPARE(output, QString("081804"));
|
QCOMPARE(output, QString("081804"));
|
||||||
|
|
||||||
time = 1111111111;
|
time = 1111111111;
|
||||||
output = QTotp::generateTotp(seed, time, 8, 30);
|
output = Totp::generateTotp(seed, time, 8, 30);
|
||||||
QCOMPARE(output, QString("14050471"));
|
QCOMPARE(output, QString("14050471"));
|
||||||
|
|
||||||
time = 2000000000;
|
time = 2000000000;
|
||||||
output = QTotp::generateTotp(seed, time, 8, 30);
|
output = Totp::generateTotp(seed, time, 8, 30);
|
||||||
QCOMPARE(output, QString("69279037"));
|
QCOMPARE(output, QString("69279037"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestTotp::testEncoderData()
|
void TestTotp::testEncoderData()
|
||||||
{
|
{
|
||||||
for (quint8 key: QTotp::encoders.keys()) {
|
for (quint8 key: Totp::encoders.keys()) {
|
||||||
const QTotp::Encoder& enc = QTotp::encoders.value(key);
|
const Totp::Encoder& enc = Totp::encoders.value(key);
|
||||||
QVERIFY2(enc.digits != 0,
|
QVERIFY2(enc.digits != 0,
|
||||||
qPrintable(QString("Custom encoders cannot have zero-value for digits field: %1(%2)")
|
qPrintable(QString("Custom encoders cannot have zero-value for digits field: %1(%2)")
|
||||||
.arg(enc.name)
|
.arg(enc.name)
|
||||||
@ -100,47 +100,47 @@ void TestTotp::testEncoderData()
|
|||||||
qPrintable(QString("Custom encoders must have a shortName: %1(%2)")
|
qPrintable(QString("Custom encoders must have a shortName: %1(%2)")
|
||||||
.arg(enc.name)
|
.arg(enc.name)
|
||||||
.arg(key)));
|
.arg(key)));
|
||||||
QVERIFY2(QTotp::shortNameToEncoder.contains(enc.shortName),
|
QVERIFY2(Totp::shortNameToEncoder.contains(enc.shortName),
|
||||||
qPrintable(QString("No shortNameToEncoder entry found for custom encoder: %1(%2) %3")
|
qPrintable(QString("No shortNameToEncoder entry found for custom encoder: %1(%2) %3")
|
||||||
.arg(enc.name)
|
.arg(enc.name)
|
||||||
.arg(key)
|
.arg(key)
|
||||||
.arg(enc.shortName)));
|
.arg(enc.shortName)));
|
||||||
QVERIFY2(QTotp::shortNameToEncoder[enc.shortName] == key,
|
QVERIFY2(Totp::shortNameToEncoder[enc.shortName] == key,
|
||||||
qPrintable(QString("shortNameToEncoder doesn't reference this custome encoder: %1(%2) %3")
|
qPrintable(QString("shortNameToEncoder doesn't reference this custome encoder: %1(%2) %3")
|
||||||
.arg(enc.name)
|
.arg(enc.name)
|
||||||
.arg(key)
|
.arg(key)
|
||||||
.arg(enc.shortName)));
|
.arg(enc.shortName)));
|
||||||
QVERIFY2(QTotp::nameToEncoder.contains(enc.name),
|
QVERIFY2(Totp::nameToEncoder.contains(enc.name),
|
||||||
qPrintable(QString("No nameToEncoder entry found for custom encoder: %1(%2) %3")
|
qPrintable(QString("No nameToEncoder entry found for custom encoder: %1(%2) %3")
|
||||||
.arg(enc.name)
|
.arg(enc.name)
|
||||||
.arg(key)
|
.arg(key)
|
||||||
.arg(enc.shortName)));
|
.arg(enc.shortName)));
|
||||||
QVERIFY2(QTotp::nameToEncoder[enc.name] == key,
|
QVERIFY2(Totp::nameToEncoder[enc.name] == key,
|
||||||
qPrintable(QString("nameToEncoder doesn't reference this custome encoder: %1(%2) %3")
|
qPrintable(QString("nameToEncoder doesn't reference this custome encoder: %1(%2) %3")
|
||||||
.arg(enc.name)
|
.arg(enc.name)
|
||||||
.arg(key)
|
.arg(key)
|
||||||
.arg(enc.shortName)));
|
.arg(enc.shortName)));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const QString & key: QTotp::nameToEncoder.keys()) {
|
for (const QString & key: Totp::nameToEncoder.keys()) {
|
||||||
quint8 value = QTotp::nameToEncoder.value(key);
|
quint8 value = Totp::nameToEncoder.value(key);
|
||||||
QVERIFY2(QTotp::encoders.contains(value),
|
QVERIFY2(Totp::encoders.contains(value),
|
||||||
qPrintable(QString("No custom encoder found for encoder named %1(%2)")
|
qPrintable(QString("No custom encoder found for encoder named %1(%2)")
|
||||||
.arg(value)
|
.arg(value)
|
||||||
.arg(key)));
|
.arg(key)));
|
||||||
QVERIFY2(QTotp::encoders[value].name == key,
|
QVERIFY2(Totp::encoders[value].name == key,
|
||||||
qPrintable(QString("nameToEncoder doesn't reference the right custom encoder: %1(%2)")
|
qPrintable(QString("nameToEncoder doesn't reference the right custom encoder: %1(%2)")
|
||||||
.arg(value)
|
.arg(value)
|
||||||
.arg(key)));
|
.arg(key)));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const QString & key: QTotp::shortNameToEncoder.keys()) {
|
for (const QString & key: Totp::shortNameToEncoder.keys()) {
|
||||||
quint8 value = QTotp::shortNameToEncoder.value(key);
|
quint8 value = Totp::shortNameToEncoder.value(key);
|
||||||
QVERIFY2(QTotp::encoders.contains(value),
|
QVERIFY2(Totp::encoders.contains(value),
|
||||||
qPrintable(QString("No custom encoder found for short-name encoder %1(%2)")
|
qPrintable(QString("No custom encoder found for short-name encoder %1(%2)")
|
||||||
.arg(value)
|
.arg(value)
|
||||||
.arg(key)));
|
.arg(key)));
|
||||||
QVERIFY2(QTotp::encoders[value].shortName == key,
|
QVERIFY2(Totp::encoders[value].shortName == key,
|
||||||
qPrintable(QString("shortNameToEncoder doesn't reference the right custom encoder: %1(%2)")
|
qPrintable(QString("shortNameToEncoder doesn't reference the right custom encoder: %1(%2)")
|
||||||
.arg(value)
|
.arg(value)
|
||||||
.arg(key)));
|
.arg(key)));
|
||||||
@ -154,8 +154,8 @@ void TestTotp::testSteamTotp()
|
|||||||
QString secret = "otpauth://totp/"
|
QString secret = "otpauth://totp/"
|
||||||
"test:test@example.com?secret=63BEDWCQZKTQWPESARIERL5DTTQFCJTK&issuer=Valve&algorithm="
|
"test:test@example.com?secret=63BEDWCQZKTQWPESARIERL5DTTQFCJTK&issuer=Valve&algorithm="
|
||||||
"SHA1&digits=5&period=30&encoder=steam";
|
"SHA1&digits=5&period=30&encoder=steam";
|
||||||
QCOMPARE(QTotp::parseOtpString(secret, digits, step), QString("63BEDWCQZKTQWPESARIERL5DTTQFCJTK"));
|
QCOMPARE(Totp::parseOtpString(secret, digits, step), QString("63BEDWCQZKTQWPESARIERL5DTTQFCJTK"));
|
||||||
QCOMPARE(digits, quint8(QTotp::ENCODER_STEAM));
|
QCOMPARE(digits, quint8(Totp::ENCODER_STEAM));
|
||||||
QCOMPARE(step, quint8(30));
|
QCOMPARE(step, quint8(30));
|
||||||
|
|
||||||
|
|
||||||
@ -165,7 +165,7 @@ void TestTotp::testSteamTotp()
|
|||||||
// Steam mobile app with a throw-away steam account. The above secret was extracted
|
// Steam mobile app with a throw-away steam account. The above secret was extracted
|
||||||
// from the Steam app's data for use in testing here.
|
// from the Steam app's data for use in testing here.
|
||||||
quint64 time = 1511200518;
|
quint64 time = 1511200518;
|
||||||
QCOMPARE(QTotp::generateTotp(seed, time, QTotp::ENCODER_STEAM, 30), QString("FR8RV"));
|
QCOMPARE(Totp::generateTotp(seed, time, Totp::ENCODER_STEAM, 30), QString("FR8RV"));
|
||||||
time = 1511200714;
|
time = 1511200714;
|
||||||
QCOMPARE(QTotp::generateTotp(seed, time, QTotp::ENCODER_STEAM, 30), QString("9P3VP"));
|
QCOMPARE(Totp::generateTotp(seed, time, Totp::ENCODER_STEAM, 30), QString("9P3VP"));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user