QtPass 2.0.0
Developer documentation
Loading...
Searching...
No Matches
totp.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2025 KeePassXC Team <team@keepassxc.org>
2// SPDX-FileCopyrightText: 2026 Anne Jan Brouwer
3// SPDX-License-Identifier: GPL-3.0-or-later
9#ifndef SRC_TOTP_H_
10#define SRC_TOTP_H_
11
12#include <QByteArray>
13#include <QList>
14#include <QPair>
15#include <QString>
16
17#include <optional>
18
36class Totp {
37public:
41 enum class Algorithm {
42 Sha1,
43 Sha256,
44 Sha512,
45 };
46
50 enum class Encoder {
51 Base10,
52 Steam,
53 };
54
59 struct Settings {
60 QByteArray key;
61 QString base32Key;
66 QString label;
67 QString issuer;
70 QList<QPair<QString, QString>> extraParams;
71 };
72
73 static constexpr uint DEFAULT_DIGITS = 6U;
74 static constexpr uint DEFAULT_STEP = 30U;
75 static constexpr uint STEAM_DIGITS = 5U;
76 static constexpr uint MIN_DIGITS = 1U;
77 static constexpr uint MAX_DIGITS = 10U;
78 static constexpr uint MAX_STEP = 86400U;
82 static constexpr qsizetype MAX_CONFIG_LENGTH = 4096;
83
99 [[nodiscard]] static auto parse(const QString &config)
100 -> std::optional<Settings>;
101
107 [[nodiscard]] static auto isValid(const QString &config) -> bool;
108
115 [[nodiscard]] static auto generate(const Settings &settings, quint64 unixTime)
116 -> QString;
117
123 [[nodiscard]] static auto generateNow(const Settings &settings) -> QString;
124
131 [[nodiscard]] static auto counter(const Settings &settings, quint64 unixTime)
132 -> quint64;
133
141 [[nodiscard]] static auto secondsRemaining(const Settings &settings,
142 quint64 unixTime) -> uint;
143
157 [[nodiscard]] static auto toUri(const Settings &settings) -> QString;
158
168 [[nodiscard]] static auto normalize(const QString &config,
169 const QString &label = {},
170 const QString &issuer = {}) -> QString;
171
176 [[nodiscard]] static auto currentUnixTime() -> quint64;
177
178private:
180 Totp() = default;
181};
182
183#endif // SRC_TOTP_H_
Algorithm
HMAC hash function, selected by the algorithm URI parameter.
Definition totp.h:41
@ Sha1
HMAC-SHA-1, the RFC 6238 default.
Definition totp.h:42
static constexpr uint MAX_STEP
Definition totp.h:78
static constexpr uint MIN_DIGITS
Lower clamp for digits.
Definition totp.h:76
static constexpr uint DEFAULT_STEP
RFC 6238 default period.
Definition totp.h:74
static auto counter(const Settings &settings, quint64 unixTime) -> quint64
Time-step counter for a point in time.
Definition totp.cpp:205
static auto generateNow(const Settings &settings) -> QString
Generate the code for the current wall-clock time.
Definition totp.cpp:259
static constexpr uint DEFAULT_DIGITS
RFC 6238 default code length.
Definition totp.h:73
static constexpr qsizetype MAX_CONFIG_LENGTH
Definition totp.h:82
static constexpr uint STEAM_DIGITS
Steam codes are always 5 chars.
Definition totp.h:75
static auto currentUnixTime() -> quint64
Current wall-clock time.
Definition totp.cpp:318
static auto toUri(const Settings &settings) -> QString
Serialise settings as a canonical otpauth URI.
Definition totp.cpp:263
static auto normalize(const QString &config, const QString &label={}, const QString &issuer={}) -> QString
Normalise a user-entered value to a canonical otpauth URI.
Definition totp.cpp:296
static auto generate(const Settings &settings, quint64 unixTime) -> QString
Generate the code for a given point in time.
Definition totp.cpp:214
Encoder
Digit encoding, selected by the encoder URI parameter.
Definition totp.h:50
@ Base10
RFC 6238 decimal digits, zero padded.
Definition totp.h:51
static auto parse(const QString &config) -> std::optional< Settings >
Parse an OTP configuration string.
Definition totp.cpp:106
static constexpr uint MAX_DIGITS
Upper clamp for digits.
Definition totp.h:77
static auto isValid(const QString &config) -> bool
Convenience validity test, for UI feedback.
Definition totp.cpp:201
static auto secondsRemaining(const Settings &settings, quint64 unixTime) -> uint
Seconds until the code for unixTime expires.
Definition totp.cpp:209
Totp()=default
Static-only class; never instantiated.
Validated TOTP parameters. Only Totp::parse() produces one.
Definition totp.h:59
QString label
otpauth label; may be empty.
Definition totp.h:66
QString issuer
Definition totp.h:67
uint digits
Code length, MIN_DIGITS..MAX_DIGITS.
Definition totp.h:64
QByteArray key
Decoded shared secret; never empty.
Definition totp.h:60
QString base32Key
Sanitized base32 secret, for re-serialisation.
Definition totp.h:61
Algorithm algorithm
HMAC hash function.
Definition totp.h:62
uint step
Period in seconds, 1..MAX_STEP.
Definition totp.h:65
QList< QPair< QString, QString > > extraParams
Definition totp.h:70
Encoder encoder
Digit encoding.
Definition totp.h:63