23#include <unordered_map>
130 std::unordered_map<std::string, std::shared_ptr<LimeGeneric>> m_users_cache;
131 std::mutex m_users_mutex;
132 std::shared_ptr<lime::Db> m_localStorage;
134 void load_user(std::shared_ptr<LimeGeneric> &user,
const std::string &localDeviceId,
const bool allStatus=
false);
155 void create_user(
const std::string &localDeviceId,
const std::string &x3dhServerUrl,
const lime::CurveId curve,
const uint16_t OPkInitialBatchSize,
const limeCallback &callback);
179 bool is_user(
const std::string &localDeviceId);
238 lime::PeerDeviceStatus decrypt(
const std::string &localDeviceId,
const std::string &recipientUserId,
const std::string &senderDeviceId,
const std::vector<uint8_t> &DRmessage,
const std::vector<uint8_t> &
cipherMessage, std::vector<uint8_t> &plainMessage);
243 lime::PeerDeviceStatus decrypt(
const std::string &localDeviceId,
const std::string &recipientUserId,
const std::string &senderDeviceId,
const std::vector<uint8_t> &DRmessage, std::vector<uint8_t> &plainMessage);
264 void update(
const std::string &localDeviceId,
const limeCallback &callback, uint16_t OPkServerLowLimit, uint16_t OPkBatchSize);
375 void stale_sessions(
const std::string &localDeviceId,
const std::string &peerDeviceId);
385 void set_x3dhServerUrl(
const std::string &localDeviceId,
const std::string &x3dhServerUrl);
Database access class.
Definition lime_localStorage.hpp:34
A pure abstract class defining the API to encrypt/decrypt/manage user and its keys.
Definition lime_lime.hpp:35
Manage several Lime objects(one is needed for each local user).
Definition lime.hpp:128
LimeManager operator=(const LimeManager &)=delete
void delete_user(const std::string &localDeviceId, const limeCallback &callback)
Delete a user from local database and from the X3DH server.
Definition lime_manager.cpp:81
lime::PeerDeviceStatus get_peerDeviceStatus(const std::string &peerDeviceId)
get the status of a peer device: unknown, untrusted, trusted, unsafe device's Id matching a local acc...
Definition lime_manager.cpp:207
void set_peerDeviceStatus(const std::string &peerDeviceId, const std::vector< uint8_t > &Ik, lime::PeerDeviceStatus status)
set the peer device status flag in local storage: unsafe, trusted or untrusted.
Definition lime_manager.cpp:199
void delete_peerDevice(const std::string &peerDeviceId)
delete a peerDevice from local storage
Definition lime_manager.cpp:219
bool is_user(const std::string &localDeviceId)
Check if a user is present and active in local storage.
Definition lime_manager.cpp:99
void encrypt(const std::string &localDeviceId, std::shared_ptr< const std::string > recipientUserId, std::shared_ptr< std::vector< RecipientData > > recipients, std::shared_ptr< const std::vector< uint8_t > > plainMessage, std::shared_ptr< std::vector< uint8_t > > cipherMessage, const limeCallback &callback, lime::EncryptionPolicy encryptionPolicy=lime::EncryptionPolicy::optimizeUploadSize)
Encrypt a buffer (text or file) for a given list of recipient devices.
Definition lime_manager.cpp:113
std::string get_x3dhServerUrl(const std::string &localDeviceId)
Get the X3DH key server URL for this identified user.
Definition lime_manager.cpp:250
void get_selfIdentityKey(const std::string &localDeviceId, std::vector< uint8_t > &Ik)
retrieve self Identity Key, an EdDSA formatted public key
Definition lime_manager.cpp:192
void update(const std::string &localDeviceId, const limeCallback &callback, uint16_t OPkServerLowLimit, uint16_t OPkBatchSize)
Update: shall be called regularly, once a day at least, performs checks, updates and cleaning operati...
Definition lime_manager.cpp:149
void set_x3dhServerUrl(const std::string &localDeviceId, const std::string &x3dhServerUrl)
Set the X3DH key server URL for this identified user.
Definition lime_manager.cpp:241
lime::PeerDeviceStatus decrypt(const std::string &localDeviceId, const std::string &recipientUserId, const std::string &senderDeviceId, const std::vector< uint8_t > &DRmessage, const std::vector< uint8_t > &cipherMessage, std::vector< uint8_t > &plainMessage)
Decrypt the given message.
Definition lime_manager.cpp:122
LimeManager(const LimeManager &)=delete
void create_user(const std::string &localDeviceId, const std::string &x3dhServerUrl, const lime::CurveId curve, const uint16_t OPkInitialBatchSize, const limeCallback &callback)
Create a user in local database and publish it on the given X3DH server.
Definition lime_manager.cpp:60
void stale_sessions(const std::string &localDeviceId, const std::string &peerDeviceId)
Stale all sessions between localDeviceId and peerDevice. If peerDevice keep using this session to enc...
Definition lime_manager.cpp:229
bool is_localUser(const std::string &deviceId)
checks if a device iD exists in the local users
Definition lime_manager.cpp:215
CallbackReturn
Definition lime.hpp:85
EncryptionPolicy
Definition lime.hpp:42
@ optimizeGlobalBandwidth
std::function< void(const lime::CallbackReturn status, const std::string message)> limeCallback
Callback use to give a status on asynchronous operation.
Definition lime.hpp:96
CurveId
Definition lime.hpp:35
PeerDeviceStatus
Definition lime.hpp:54
std::function< void(int responseCode, const std::vector< uint8_t > &responseBody)> limeX3DHServerResponseProcess
Get the response from server. The external service providing secure communication to the X3DH server ...
Definition lime.hpp:106
std::function< void(const std::string &url, const std::string &from, const std::vector< uint8_t > &message, const limeX3DHServerResponseProcess &reponseProcess)> limeX3DHServerPostData
Post a message to the X3DH server.
Definition lime.hpp:116
The encrypt function input/output data structure.
Definition lime.hpp:68
std::vector< uint8_t > DRmessage
Definition lime.hpp:76
lime::PeerDeviceStatus peerStatus
Definition lime.hpp:70
const std::string deviceId
Definition lime.hpp:69
RecipientData(const std::string &deviceId)
Definition lime.hpp:81