aboutsummaryrefslogtreecommitdiff
path: root/lib/events
diff options
context:
space:
mode:
authorTobias Fella <fella@posteo.de>2022-04-18 20:07:12 +0200
committerTobias Fella <fella@posteo.de>2022-05-02 20:25:51 +0200
commit16d4f4e48304543a0ab59b235edba07f5f2c2204 (patch)
tree932845a7b9a6179c4a19ffe6954c6420bf406bbc /lib/events
parent3a81aea545ec014d597f3756c362913aad4421df (diff)
downloadlibquotient-16d4f4e48304543a0ab59b235edba07f5f2c2204.tar.gz
libquotient-16d4f4e48304543a0ab59b235edba07f5f2c2204.zip
Implement key verification
Diffstat (limited to 'lib/events')
-rw-r--r--lib/events/encryptedevent.h2
-rw-r--r--lib/events/keyverificationevent.cpp32
-rw-r--r--lib/events/keyverificationevent.h36
-rw-r--r--lib/events/roomevent.h2
4 files changed, 68 insertions, 4 deletions
diff --git a/lib/events/encryptedevent.h b/lib/events/encryptedevent.h
index ddd5e415..bfacdec9 100644
--- a/lib/events/encryptedevent.h
+++ b/lib/events/encryptedevent.h
@@ -58,6 +58,8 @@ public:
RoomEventPtr createDecrypted(const QString &decrypted) const;
void setRelation(const QJsonObject& relation);
+
+ bool isVerified();
};
REGISTER_EVENT_TYPE(EncryptedEvent)
diff --git a/lib/events/keyverificationevent.cpp b/lib/events/keyverificationevent.cpp
index 4803955d..e7f5b019 100644
--- a/lib/events/keyverificationevent.cpp
+++ b/lib/events/keyverificationevent.cpp
@@ -106,7 +106,7 @@ QStringList KeyVerificationAcceptEvent::shortAuthenticationString() const
return contentPart<QStringList>("short_authentification_string"_ls);
}
-QString KeyVerificationAcceptEvent::commitement() const
+QString KeyVerificationAcceptEvent::commitment() const
{
return contentPart<QString>("commitment"_ls);
}
@@ -162,3 +162,33 @@ QHash<QString, QString> KeyVerificationMacEvent::mac() const
{
return contentPart<QHash<QString, QString>>("mac"_ls);
}
+
+KeyVerificationDoneEvent::KeyVerificationDoneEvent(const QJsonObject &obj)
+ : Event(typeId(), obj)
+{
+}
+
+QString KeyVerificationDoneEvent::transactionId() const
+{
+ return contentPart<QString>("transaction_id"_ls);
+}
+
+
+KeyVerificationReadyEvent::KeyVerificationReadyEvent(const QJsonObject &obj)
+ : Event(typeId(), obj)
+{}
+
+QString KeyVerificationReadyEvent::fromDevice() const
+{
+ return contentPart<QString>("from_device"_ls);
+}
+
+QString KeyVerificationReadyEvent::transactionId() const
+{
+ return contentPart<QString>("transaction_id"_ls);
+}
+
+QStringList KeyVerificationReadyEvent::methods() const
+{
+ return contentPart<QStringList>("methods"_ls);
+}
diff --git a/lib/events/keyverificationevent.h b/lib/events/keyverificationevent.h
index 497e56a2..a9f63968 100644
--- a/lib/events/keyverificationevent.h
+++ b/lib/events/keyverificationevent.h
@@ -1,6 +1,8 @@
// SPDX-FileCopyrightText: 2021 Carl Schwan <carlschwan@kde.org>
// SPDX-License-Identifier: LGPL-2.1-or-later
+#pragma once
+
#include "event.h"
namespace Quotient {
@@ -31,6 +33,24 @@ public:
};
REGISTER_EVENT_TYPE(KeyVerificationRequestEvent)
+class QUOTIENT_API KeyVerificationReadyEvent : public Event {
+public:
+ DEFINE_EVENT_TYPEID("m.key.verification.ready", KeyVerificationReadyEvent)
+
+ explicit KeyVerificationReadyEvent(const QJsonObject& obj);
+
+ /// The device ID which is accepting the request.
+ QString fromDevice() const;
+
+ /// The transaction id of the verification request
+ QString transactionId() const;
+
+ /// The verification methods supported by the sender.
+ QStringList methods() const;
+};
+REGISTER_EVENT_TYPE(KeyVerificationReadyEvent)
+
+
/// Begins a key verification process.
class QUOTIENT_API KeyVerificationStartEvent : public Event {
public:
@@ -104,7 +124,7 @@ public:
/// The hash (encoded as unpadded base64) of the concatenation of the
/// device's ephemeral public key (encoded as unpadded base64) and the
/// canonical JSON representation of the m.key.verification.start message.
- QString commitement() const;
+ QString commitment() const;
};
REGISTER_EVENT_TYPE(KeyVerificationAcceptEvent)
@@ -128,7 +148,7 @@ REGISTER_EVENT_TYPE(KeyVerificationCancelEvent)
/// Sends the ephemeral public key for a device to the partner device.
/// Typically sent as a to-device event.
-class KeyVerificationKeyEvent : public Event {
+class QUOTIENT_API KeyVerificationKeyEvent : public Event {
public:
DEFINE_EVENT_TYPEID("m.key.verification.key", KeyVerificationKeyEvent)
@@ -158,4 +178,16 @@ public:
QHash<QString, QString> mac() const;
};
REGISTER_EVENT_TYPE(KeyVerificationMacEvent)
+
+class QUOTIENT_API KeyVerificationDoneEvent : public Event {
+public:
+ DEFINE_EVENT_TYPEID("m.key.verification.done", KeyVerificationRequestEvent)
+
+ explicit KeyVerificationDoneEvent(const QJsonObject& obj);
+
+ /// The same transactionId as before
+ QString transactionId() const;
+};
+REGISTER_EVENT_TYPE(KeyVerificationDoneEvent)
+
} // namespace Quotient
diff --git a/lib/events/roomevent.h b/lib/events/roomevent.h
index a7d6c428..5670f55f 100644
--- a/lib/events/roomevent.h
+++ b/lib/events/roomevent.h
@@ -62,7 +62,7 @@ public:
#ifdef Quotient_E2EE_ENABLED
void setOriginalEvent(event_ptr_tt<RoomEvent>&& originalEvent);
- const RoomEvent* originalEvent() { return _originalEvent.get(); }
+ const RoomEvent* originalEvent() const { return _originalEvent.get(); }
const QJsonObject encryptedJson() const;
#endif