libkazv
crypto-p.hpp
Go to the documentation of this file.
1 /*
2  * This file is part of libkazv.
3  * SPDX-FileCopyrightText: 2021-2024 tusooa <tusooa@kazv.moe>
4  * SPDX-License-Identifier: AGPL-3.0-or-later
5  */
6 
7 #pragma once
8 #include <libkazv-config.hpp>
9 
10 #include <vodozemac.h>
11 
12 #include <unordered_map>
13 
14 #include "crypto.hpp"
15 #include "crypto-util.hpp"
16 #include "crypto-util-p.hpp"
17 #include "session.hpp"
20 
21 namespace Kazv
22 {
23  using SessionList = std::vector<Session>;
24 
26  {
27  CryptoPrivate();
29  CryptoPrivate(const CryptoPrivate &that);
31 
32  std::optional<rust::Box<vodozemac::olm::Account>> account;
33  immer::map<std::string /* algorithm */, int> uploadedOneTimeKeysCount;
35  std::unordered_map<std::string /* theirCurve25519IdentityKey */, Session> knownSessions;
36  std::unordered_map<KeyOfGroupSession, InboundGroupSession> inboundGroupSessions;
37 
38  std::unordered_map<std::string /* roomId */, OutboundGroupSession> outboundGroupSessions;
39 
40  bool valid{true};
41 
42  std::string pickle() const;
43  bool unpickle(std::string data);
44  bool unpickleFromLibolm(std::string data);
45 
46  std::string ed25519IdentityKey() const;
47  std::string curve25519IdentityKey() const;
48 
50  // Here we need the full event for eventId and originServerTs
52 
54  bool createInboundSession(std::string theirCurve25519IdentityKey,
55  std::string message);
56 
57  bool createInboundGroupSession(KeyOfGroupSession k, std::string sessionKey, std::string ed25519Key);
58 
60  std::string roomId, std::optional<MegOlmSessionRotateDesc> desc);
61  };
62 
63 }
Definition: maybe.hpp:25
Definition: outbound-group-session.hpp:22
Definition: session.hpp:27
Definition: location.hpp:10
std::string RandomData
Definition: crypto-util.hpp:34
nlohmann::json json
Definition: jsonwrap.hpp:20
std::int_fast64_t Timestamp
Definition: event.hpp:18
std::vector< Session > SessionList
Definition: crypto-p.hpp:23
Definition: crypto-p.hpp:26
~CryptoPrivate()
Definition: crypto.cpp:46
MaybeString decryptOlm(nlohmann::json content)
Definition: crypto.cpp:91
std::unordered_map< std::string, OutboundGroupSession > outboundGroupSessions
Definition: crypto-p.hpp:38
std::unordered_map< KeyOfGroupSession, InboundGroupSession > inboundGroupSessions
Definition: crypto-p.hpp:36
bool reuseOrCreateOutboundGroupSession(RandomData random, Timestamp timeMs, std::string roomId, std::optional< MegOlmSessionRotateDesc > desc)
Definition: crypto.cpp:172
immer::map< std::string, int > uploadedOneTimeKeysCount
Definition: crypto-p.hpp:33
std::unordered_map< std::string, Session > knownSessions
Definition: crypto-p.hpp:35
std::string curve25519IdentityKey() const
Definition: crypto.cpp:264
bool unpickle(std::string data)
Definition: crypto.cpp:69
MaybeString decryptMegOlm(nlohmann::json eventJson)
Definition: crypto.cpp:137
std::string ed25519IdentityKey() const
Definition: crypto.cpp:258
bool unpickleFromLibolm(std::string data)
Definition: crypto.cpp:80
bool createInboundGroupSession(KeyOfGroupSession k, std::string sessionKey, std::string ed25519Key)
Definition: crypto.cpp:376
CryptoPrivate(RandomTag, RandomData data)
int numUnpublishedKeys
Definition: crypto-p.hpp:34
bool valid
Definition: crypto-p.hpp:40
std::optional< rust::Box< vodozemac::olm::Account > > account
Definition: crypto-p.hpp:32
bool createInboundSession(std::string theirCurve25519IdentityKey, std::string message)
returns whether the session is successfully established
Definition: crypto.cpp:158
CryptoPrivate()
Definition: crypto.cpp:32
std::string pickle() const
Definition: crypto.cpp:63
Definition: crypto-util.hpp:24
The tag to indicate that a constructor should use user-provided random data.
Definition: crypto-util.hpp:32