10 constexpr inline auto SasV1Method =
"m.sas.v1"_ls;
16 using RoomEvent::RoomEvent;
25 class QUOTIENT_API KeyVerificationRequestEvent :
public KeyVerificationEvent {
27 QUO_EVENT(KeyVerificationRequestEvent,
"m.key.verification.request")
29 using KeyVerificationEvent::KeyVerificationEvent;
30 KeyVerificationRequestEvent(
const QString& transactionId,
31 const QString& fromDevice,
32 const QStringList& methods,
33 const QDateTime& timestamp)
34 : KeyVerificationRequestEvent(
35 basicJson(TypeId, { {
"transaction_id"_ls, transactionId },
36 {
"from_device"_ls, fromDevice },
37 {
"methods"_ls, toJson(methods) },
38 {
"timestamp"_ls, toJson(timestamp) } }))
54 class QUOTIENT_API KeyVerificationReadyEvent :
public KeyVerificationEvent {
56 QUO_EVENT(KeyVerificationReadyEvent,
"m.key.verification.ready")
58 using KeyVerificationEvent::KeyVerificationEvent;
59 KeyVerificationReadyEvent(
const QString& transactionId,
60 const QString& fromDevice,
61 const QStringList& methods)
62 : KeyVerificationReadyEvent(
63 basicJson(TypeId, { {
"transaction_id"_ls, transactionId },
64 {
"from_device"_ls, fromDevice },
65 {
"methods"_ls, toJson(methods) } }))
75 constexpr inline auto HmacSha256Code =
"hkdf-hmac-sha256"_ls;
76 constexpr inline auto HmacSha256V2Code =
"hkdf-hmac-sha256.v2"_ls;
77 constexpr std::array SupportedMacs { HmacSha256Code, HmacSha256V2Code };
80 class QUOTIENT_API KeyVerificationStartEvent :
public KeyVerificationEvent {
82 QUO_EVENT(KeyVerificationStartEvent,
"m.key.verification.start")
84 using KeyVerificationEvent::KeyVerificationEvent;
85 KeyVerificationStartEvent(
const QString& transactionId,
86 const QString& fromDevice)
87 : KeyVerificationStartEvent(
88 basicJson(TypeId, { {
"transaction_id"_ls, transactionId },
89 {
"from_device"_ls, fromDevice },
90 {
"method"_ls, SasV1Method },
91 {
"hashes"_ls, QJsonArray{
"sha256"_ls } },
92 {
"key_agreement_protocols"_ls,
93 QJsonArray{
"curve25519-hkdf-sha256"_ls } },
94 {
"message_authentication_codes"_ls,
95 toJson(SupportedMacs) },
96 {
"short_authentication_string"_ls,
97 QJsonArray{
"decimal"_ls,
"emoji"_ls } } }))
113 QStringList keyAgreementProtocols()
const
115 Q_ASSERT(method() == SasV1Method);
116 return contentPart<QStringList>(
"key_agreement_protocols"_ls);
121 QStringList hashes()
const
123 Q_ASSERT(method() == SasV1Method);
124 return contentPart<QStringList>(
"hashes"_ls);
129 QStringList messageAuthenticationCodes()
const
131 Q_ASSERT(method() == SasV1Method);
132 return contentPart<QStringList>(
"message_authentication_codes"_ls);
138 QString shortAuthenticationString()
const
140 Q_ASSERT(method() == SasV1Method);
141 return contentPart<QString>(
"short_authentication_string"_ls);
147 class QUOTIENT_API KeyVerificationAcceptEvent :
public KeyVerificationEvent {
149 QUO_EVENT(KeyVerificationAcceptEvent,
"m.key.verification.accept")
151 using KeyVerificationEvent::KeyVerificationEvent;
152 KeyVerificationAcceptEvent(
const QString& transactionId,
153 const QString& commitment)
154 : KeyVerificationAcceptEvent(basicJson(
155 TypeId, { {
"transaction_id"_ls, transactionId },
156 {
"method"_ls, SasV1Method },
157 {
"key_agreement_protocol"_ls,
"curve25519-hkdf-sha256"_ls },
158 {
"hash"_ls,
"sha256"_ls },
159 {
"message_authentication_code"_ls, HmacSha256V2Code },
160 {
"short_authentication_string"_ls,
161 QJsonArray{
"decimal"_ls,
"emoji"_ls, } },
162 {
"commitment"_ls, commitment } }))
189 class QUOTIENT_API KeyVerificationCancelEvent :
public KeyVerificationEvent {
191 QUO_EVENT(KeyVerificationCancelEvent,
"m.key.verification.cancel")
193 using KeyVerificationEvent::KeyVerificationEvent;
194 KeyVerificationCancelEvent(
const QString& transactionId,
195 const QString& reason)
196 : KeyVerificationCancelEvent(
198 {
"transaction_id"_ls, transactionId },
199 {
"reason"_ls, reason },
200 {
"code"_ls, reason }
214 class QUOTIENT_API KeyVerificationKeyEvent :
public KeyVerificationEvent {
216 QUO_EVENT(KeyVerificationKeyEvent,
"m.key.verification.key")
218 using KeyVerificationEvent::KeyVerificationEvent;
219 KeyVerificationKeyEvent(
const QString& transactionId,
const QString& key)
220 : KeyVerificationKeyEvent(
221 basicJson(TypeId, { {
"transaction_id"_ls, transactionId },
222 {
"key"_ls, key } }))
230 class QUOTIENT_API KeyVerificationMacEvent :
public KeyVerificationEvent {
232 QUO_EVENT(KeyVerificationMacEvent,
"m.key.verification.mac")
234 using KeyVerificationEvent::KeyVerificationEvent;
235 KeyVerificationMacEvent(
const QString& transactionId,
const QString& keys,
236 const QJsonObject& mac)
237 : KeyVerificationMacEvent(
238 basicJson(TypeId, { {
"transaction_id"_ls, transactionId },
240 {
"mac"_ls, mac } }))
246 QHash<QString, QString> mac()
const
248 return contentPart<QHash<QString, QString>>(
"mac"_ls);
252 class QUOTIENT_API KeyVerificationDoneEvent :
public KeyVerificationEvent {
254 QUO_EVENT(KeyVerificationDoneEvent,
"m.key.verification.done")
256 using KeyVerificationEvent::KeyVerificationEvent;
257 explicit KeyVerificationDoneEvent(
const QString& transactionId)
258 : KeyVerificationDoneEvent(
259 basicJson(TypeId, { {
"transaction_id"_ls, transactionId } }))