|
| template<typename Curve_ = Curve, std::enable_if_t<!std::is_base_of_v< genericKEM, Curve_ >, bool > = true> |
| | DRi (std::shared_ptr< lime::Db > localStorage, const DRChainKey &SK, const SharedADBuffer &AD, const ARrKey< Curve > &peerPublicKey, long int peerDid, const std::string &peerDeviceId, const DSA< Curve, lime::DSAtype::publicKey > &peerIk, long int selfDid, const std::vector< uint8_t > &X3DH_initMessage, std::shared_ptr< RNG > RNG_context) |
| | Create a new DR session for sending message. Match pseudo code for RatchetInitAlice in DR spec section 3.3 We have a shared key and peer's public key for EC based only Double Ratchet. More...
|
| |
| template<typename Curve_ = Curve, std::enable_if_t< std::is_base_of_v< genericKEM, Curve_ >, bool > = true> |
| | DRi (std::shared_ptr< lime::Db > localStorage, const DRChainKey &SK, const SharedADBuffer &AD, const ARrKey< Curve > &peerPublicKey, long int peerDid, const std::string &peerDeviceId, const DSA< typename Curve::EC, lime::DSAtype::publicKey > &peerIk, long int selfDid, const std::vector< uint8_t > &X3DH_initMessage, std::shared_ptr< RNG > RNG_context) |
| | Create a new DR session for sending message. Match pseudo code for RatchetInitAlice in DR spec section 3.3 for KEM and EC based Double Ratchet. More...
|
| |
| | DRi (std::shared_ptr< lime::Db > localStorage, const DRChainKey &SK, const SharedADBuffer &AD, const ARsKey< Curve > &selfKeyPair, long int peerDid, const std::string &peerDeviceId, const uint32_t OPk_id, const DSA< typename Curve::EC, lime::DSAtype::publicKey > &peerIk, long int selfDid, std::shared_ptr< RNG > RNG_context) |
| | Create a new DR session for message reception. Match pseudo code for RatchetInitBob in DR spec section 3.3. More...
|
| |
| | DRi (std::shared_ptr< lime::Db > localStorage, long sessionId, std::shared_ptr< RNG > RNG_context) |
| | Create a new DR session to be loaded from db. More...
|
| |
| | DRi ()=delete |
| |
| | DRi (DRi< Curve > &a)=delete |
| |
| DRi< Curve > & | operator= (DRi< Curve > &a)=delete |
| |
| | ~DRi () |
| |
| void | ratchetEncrypt (const std::vector< uint8_t > &plaintext, std::vector< uint8_t > &&AD, std::vector< uint8_t > &ciphertext, const bool payloadDirectEncryption) override |
| | Encrypt using the double-ratchet algorithm. More...
|
| |
| bool | ratchetDecrypt (const std::vector< uint8_t > &cipherText, const std::vector< uint8_t > &AD, std::vector< uint8_t > &plaintext, const bool payloadDirectEncryption) override |
| | Decrypt Double Ratchet message. More...
|
| |
| long int | dbSessionId (void) const override |
| | return the session's local storage id More...
|
| |
| bool | isActive (void) const override |
| | return the current status of session More...
|
| |
| virtual | ~DR ()=default |
| |
template<typename Curve>
class lime::DRi< Curve >
a Double Rachet session, implements the DR interface.
A session is associated to a local user and a peer device. It stores all the state variables described in Double Ratcher spec section 3.2 and provide encrypt/decrypt functions
- Template Parameters
-
| Curve | The elliptic curve to use: C255 or C448 |
template<typename Curve >
template<typename Curve_ = Curve, std::enable_if_t<!std::is_base_of_v< genericKEM, Curve_ >, bool > = true>
| lime::DRi< Curve >::DRi |
( |
std::shared_ptr< lime::Db > |
localStorage, |
|
|
const DRChainKey & |
SK, |
|
|
const SharedADBuffer & |
AD, |
|
|
const ARrKey< Curve > & |
peerPublicKey, |
|
|
long int |
peerDid, |
|
|
const std::string & |
peerDeviceId, |
|
|
const DSA< Curve, lime::DSAtype::publicKey > & |
peerIk, |
|
|
long int |
selfDid, |
|
|
const std::vector< uint8_t > & |
X3DH_initMessage, |
|
|
std::shared_ptr< RNG > |
RNG_context |
|
) |
| |
|
inline |
Create a new DR session for sending message. Match pseudo code for RatchetInitAlice in DR spec section 3.3 We have a shared key and peer's public key for EC based only Double Ratchet.
- Parameters
-
| [in] | localStorage | Local storage accessor to save DR session and perform mkskipped lookup |
| [in] | SK | a 32 bytes shared secret established prior the session init (likely done using X3DH) |
| [in] | AD | The associated data generated by X3DH protocol and permanently part of the DR session(see X3DH spec section 3.3 and lime doc section 5.4.3) |
| [in] | peerPublicKey | the public key of message recipient (also obtained through X3DH, shall be peer SPk) |
| [in] | peerDid | Id used in local storage for this peer Device this session shall be attached to |
| [in] | peerDeviceId | The peer Device Id this session is connected to. Ignored if peerDid is not 0 |
| [in] | peerIk | The Identity Key of the peer device this session is connected to. Ignored if peerDid is not 0 |
| [in] | selfDid | Id used in local storage for local user this session shall be attached to |
| [in] | X3DH_initMessage | at session creation as sender we shall also store the X3DHInit message to be able to include it in all message until we got a response from peer |
| [in] | RNG_context | A Random Number Generator context used for any rndom generation needed by this session |
template<typename Curve >
template<typename Curve_ = Curve, std::enable_if_t< std::is_base_of_v< genericKEM, Curve_ >, bool > = true>
| lime::DRi< Curve >::DRi |
( |
std::shared_ptr< lime::Db > |
localStorage, |
|
|
const DRChainKey & |
SK, |
|
|
const SharedADBuffer & |
AD, |
|
|
const ARrKey< Curve > & |
peerPublicKey, |
|
|
long int |
peerDid, |
|
|
const std::string & |
peerDeviceId, |
|
|
const DSA< typename Curve::EC, lime::DSAtype::publicKey > & |
peerIk, |
|
|
long int |
selfDid, |
|
|
const std::vector< uint8_t > & |
X3DH_initMessage, |
|
|
std::shared_ptr< RNG > |
RNG_context |
|
) |
| |
|
inline |
Create a new DR session for sending message. Match pseudo code for RatchetInitAlice in DR spec section 3.3 for KEM and EC based Double Ratchet.
- Parameters
-
| [in] | localStorage | Local storage accessor to save DR session and perform mkskipped lookup |
| [in] | SK | a 32 bytes shared secret established prior the session init (likely done using X3DH) |
| [in] | AD | The associated data generated by X3DH protocol and permanently part of the DR session(see X3DH spec section 3.3 and lime doc section 5.4.3) |
| [in] | peerPublicKey | the public key of message recipient (also obtained through X3DH, shall be peer SPk): holds DH and KEM peer public key provided by PQX3DH |
| [in] | peerDid | Id used in local storage for this peer Device this session shall be attached to |
| [in] | peerDeviceId | The peer Device Id this session is connected to. Ignored if peerDid is not 0 |
| [in] | peerIk | The Identity Key of the peer device this session is connected to. Ignored if peerDid is not 0 |
| [in] | selfDid | Id used in local storage for local user this session shall be attached to |
| [in] | X3DH_initMessage | at session creation as sender we shall also store the X3DHInit message to be able to include it in all message until we got a response from peer |
| [in] | RNG_context | A Random Number Generator context used for any rndom generation needed by this session |