lime
Lime is a C++ library implementing Open Whisper System Signal protocol
lime_localStorage.hpp
Go to the documentation of this file.
1/*
2 lime_localStorage.hpp
3 @author Johan Pascal
4 @copyright Copyright (C) 2017 Belledonne Communications SARL
5
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
18*/
19
20#ifndef lime_localStorage_hpp
21#define lime_localStorage_hpp
22
23#include "soci/soci.h"
25#include <mutex>
26
27namespace lime {
28
34 class Db {
35 public:
37 soci::session sql;
39 std::shared_ptr<std::recursive_mutex> m_db_mutex;
40
41 Db()=delete; // we can't create a new DB holder without DB filename
42
49 Db(const std::string &filename, std::shared_ptr<std::recursive_mutex> db_mutex);
50 ~Db(){sql.close();};
51
52 void load_LimeUser(const std::string &deviceId, long int &Uid, lime::CurveId &curveId, std::string &url, const bool allStatus=false);
53 void delete_LimeUser(const std::string &deviceId);
54 void clean_DRSessions();
55 void clean_SPk();
56 void get_allLocalDevices(std::vector<std::string> &deviceIds);
57 void set_peerDeviceStatus(const std::string &peerDeviceId, const std::vector<uint8_t> &Ik, lime::PeerDeviceStatus status);
58 void set_peerDeviceStatus(const std::string &peerDeviceId, lime::PeerDeviceStatus status);
59 lime::PeerDeviceStatus get_peerDeviceStatus(const std::string &peerDeviceId);
60 lime::PeerDeviceStatus get_peerDeviceStatus(const std::list<std::string> &peerDeviceIds);
61 bool is_localUser(const std::string &deviceId);
62 void delete_peerDevice(const std::string &peerDeviceId);
63 template <typename Curve>
64 long int check_peerDevice(const std::string &peerDeviceId, const DSA<Curve, lime::DSAtype::publicKey> &peerIk, const bool updateInvalid=false);
65 template <typename Curve>
66 long int store_peerDevice(const std::string &peerDeviceId, const DSA<Curve, lime::DSAtype::publicKey> &peerIk);
67 void start_transaction();
68 void commit_transaction();
70 };
71
72 /* this templates are instanciated once in the lime_localStorage.cpp file, explicitly tell anyone including this header that there is no need to re-instanciate them */
73#ifdef EC25519_ENABLED
74 extern template long int Db::check_peerDevice<C255>(const std::string &peerDeviceId, const DSA<C255, lime::DSAtype::publicKey> &Ik, const bool updateInvalid);
75 extern template long int Db::store_peerDevice<C255>(const std::string &peerDeviceId, const DSA<C255, lime::DSAtype::publicKey> &Ik);
76#endif
77
78#ifdef EC448_ENABLED
79 extern template long int Db::check_peerDevice<C448>(const std::string &peerDeviceId, const DSA<C448, lime::DSAtype::publicKey> &Ik, const bool updateInvalid);
80 extern template long int Db::store_peerDevice<C448>(const std::string &peerDeviceId, const DSA<C448, lime::DSAtype::publicKey> &Ik);
81#endif
82
83}
84
85#endif /* lime_localStorage_hpp */
Database access class.
Definition: lime_localStorage.hpp:34
long int store_peerDevice(const std::string &peerDeviceId, const DSA< Curve, lime::DSAtype::publicKey > &peerIk)
Store peer device information(DeviceId - GRUU -, public Ik, Uid to link it to a user) in local storag...
Definition: lime_localStorage.cpp:642
void clean_SPk()
Delete old stale SPk. Apply to all users in localStorage.
Definition: lime_localStorage.cpp:285
void clean_DRSessions()
Delete old stale sessions and old stored message key. Apply to all users in localStorage.
Definition: lime_localStorage.cpp:270
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_localStorage.cpp:339
void get_allLocalDevices(std::vector< std::string > &deviceIds)
Get a list of deviceIds of all local users present in localStorage.
Definition: lime_localStorage.cpp:297
Db()=delete
bool is_localUser(const std::string &deviceId)
checks if a device Id exists in the local users table
Definition: lime_localStorage.cpp:553
soci::session sql
soci connexion to DB
Definition: lime_localStorage.hpp:37
void delete_peerDevice(const std::string &peerDeviceId)
delete a peerDevice from local storage
Definition: lime_localStorage.cpp:567
void commit_transaction()
commit a transaction on this Db
Definition: lime_localStorage.cpp:690
std::shared_ptr< std::recursive_mutex > m_db_mutex
mutex on database access
Definition: lime_localStorage.hpp:39
void delete_LimeUser(const std::string &deviceId)
if exists, delete user
Definition: lime_localStorage.cpp:671
void start_transaction()
start a transaction on this Db
Definition: lime_localStorage.cpp:681
void load_LimeUser(const std::string &deviceId, long int &Uid, lime::CurveId &curveId, std::string &url, const bool allStatus=false)
Check for existence, retrieve Uid for local user based on its userId (GRUU) and curve from table lime...
Definition: lime_localStorage.cpp:224
long int check_peerDevice(const std::string &peerDeviceId, const DSA< Curve, lime::DSAtype::publicKey > &peerIk, const bool updateInvalid=false)
Check peer device information(DeviceId - GRUU -, public Ik, Uid to link it to a user) in local storag...
Definition: lime_localStorage.cpp:584
void rollback_transaction()
rollback a transaction on this Db
Definition: lime_localStorage.cpp:699
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_localStorage.cpp:445
~Db()
Definition: lime_localStorage.hpp:50
Definition: lime.cpp:30
CurveId
Definition: lime.hpp:35
PeerDeviceStatus
Definition: lime.hpp:54