lime
Lime is a C++ library implementing Open Whisper System Signal protocol
lime_ffi.h
Go to the documentation of this file.
1 
37 #ifndef lime_ffi_hpp
38 #define lime_ffi_hpp
39 
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43 
44 #include <stdlib.h>
45 #include <stdint.h>
46 
48 
50 
57 };
58 
66 };
67 
74 };
75 
89 };
90 
95 };
96 
101 typedef struct {
102  char *deviceId;
103  enum lime_ffi_PeerDeviceStatus peerStatus;
108  uint8_t *DRmessage;
109  size_t DRmessageSize;
111 
121 typedef void (*lime_ffi_Callback)(void *userData, const enum lime_ffi_CallbackReturn status, const char *message);
122 
135 typedef void (*lime_ffi_X3DHServerPostData)(void *userData, lime_ffi_data_t limeData, const char *url, const char *from,
136  const uint8_t *message, const size_t message_size);
137 
138 
139 
150 int lime_ffi_processX3DHServerResponse(lime_ffi_data_t limeData, const int code, const uint8_t *response, const size_t response_size);
151 
162 int lime_ffi_manager_init(lime_manager_t * const manager, const char *db, const lime_ffi_X3DHServerPostData X3DH_post_data, void *userData);
163 
171 int lime_ffi_manager_destroy(lime_manager_t manager);
172 
173 
188 int lime_ffi_create_user(lime_manager_t manager, const char *localDeviceId,
189  const char *x3dhServerUrl, const enum lime_ffi_CurveId curve, const uint16_t OPkInitialBatchSize,
190  const lime_ffi_Callback callback, void *callbackUserData);
191 
205 int lime_ffi_delete_user(lime_manager_t manager, const char *localDeviceId, const lime_ffi_Callback callback, void *callbackUserData);
206 
215 int lime_ffi_is_user(lime_manager_t manager, const char *localDeviceId);
216 
227 int lime_ffi_encryptOutBuffersMaximumSize(const size_t plainMessageSize, const enum lime_ffi_CurveId curve, size_t *DRmessageSize, size_t *cipherMessageSize);
228 
275 int lime_ffi_encrypt(lime_manager_t manager, const char *localDeviceId,
276  const char *recipientUserId, lime_ffi_RecipientData_t *const recipients, const size_t recipientsSize,
277  const uint8_t *const plainMessage, const size_t plainMessageSize,
278  uint8_t *const cipherMessage, size_t *cipherMessageSize,
279  const lime_ffi_Callback callback, void *callbackUserData,
280  enum lime_ffi_EncryptionPolicy encryptionPolicy);
281 
282 
307 enum lime_ffi_PeerDeviceStatus lime_ffi_decrypt(lime_manager_t manager, const char *localDeviceId,
308  const char *recipientUserId, const char *senderDeviceId,
309  const uint8_t *const DRmessage, const size_t DRmessageSize,
310  const uint8_t *const cipherMessage, const size_t cipherMessageSize,
311  uint8_t *const plainMessage, size_t *plainMessageSize);
312 
325 int lime_ffi_get_selfIdentityKey(lime_manager_t manager, const char *localDeviceId, uint8_t *const Ik, size_t *IkSize);
326 
359 int lime_ffi_set_peerDeviceStatus(lime_manager_t manager, const char *peerDeviceId, const uint8_t *const Ik, const size_t IkSize, enum lime_ffi_PeerDeviceStatus status);
360 
369 enum lime_ffi_PeerDeviceStatus lime_ffi_get_peerDeviceStatus(lime_manager_t manager, const char *peerDeviceId);
370 
371 
382 int lime_ffi_delete_peerDevice(lime_manager_t manager, const char *peerDeviceId);
383 
394 int lime_ffi_stale_sessions(lime_manager_t manager, const char *localDeviceId, const char *peerDeviceId);
413 int lime_ffi_update(lime_manager_t manager, const lime_ffi_Callback callback, void *callbackUserData, uint16_t OPkServerLowLimit, uint16_t OPkBatchSize);
414 
424 int lime_ffi_set_x3dhServerUrl(lime_manager_t manager, const char *localDeviceId, const char *x3dhServerUrl);
425 
436 int lime_ffi_get_x3dhServerUrl(lime_manager_t manager, const char *localDeviceId, char *x3dhServerUrl, size_t *x3dhServerUrlSize);
437 
438 #ifdef __cplusplus
439 }
440 #endif
441 
442 #endif /* lime__ffi_hpp */
Definition: lime_ffi.h:52
void(* lime_ffi_X3DHServerPostData)(void *userData, lime_ffi_data_t limeData, const char *url, const char *from, const uint8_t *message, const size_t message_size)
Post a message to the X3DH server.
Definition: lime_ffi.h:135
Definition: lime_ffi.h:83
int lime_ffi_stale_sessions(lime_manager_t manager, const char *localDeviceId, const char *peerDeviceId)
Stale all sessions between localDeviceId and peerDevice. If peerDevice keep using this session to enc...
Definition: lime_ffi.cpp:418
Definition: lime_ffi.h:70
int lime_ffi_set_x3dhServerUrl(lime_manager_t manager, const char *localDeviceId, const char *x3dhServerUrl)
Set the X3DH key server URL for this identified user.
Definition: lime_ffi.cpp:442
int lime_ffi_manager_destroy(lime_manager_t manager)
Destroy the internal structure used to interact with lime.
Definition: lime_ffi.cpp:364
void(* lime_ffi_Callback)(void *userData, const enum lime_ffi_CallbackReturn status, const char *message)
Callback use to give a status on asynchronous operation.
Definition: lime_ffi.h:121
Definition: lime_ffi.h:56
lime_ffi_CurveId
Definition: lime_ffi.h:62
int lime_ffi_manager_init(lime_manager_t *const manager, const char *db, const lime_ffi_X3DHServerPostData X3DH_post_data, void *userData)
Initialise a Lime Manager, only one per end-point is required.
Definition: lime_ffi.cpp:154
LIME_FFI_ERROR
Definition: lime_ffi.h:51
int lime_ffi_create_user(lime_manager_t manager, const char *localDeviceId, const char *x3dhServerUrl, const enum lime_ffi_CurveId curve, const uint16_t OPkInitialBatchSize, const lime_ffi_Callback callback, void *callbackUserData)
Insert a lime user in local base and publish him on the X3DH server.
Definition: lime_ffi.cpp:183
enum lime_ffi_PeerDeviceStatus lime_ffi_get_peerDeviceStatus(lime_manager_t manager, const char *peerDeviceId)
get the status of a peer device: unknown, untrusted, trusted, unsafe
Definition: lime_ffi.cpp:409
Definition: lime_ffi.h:87
an opaque structure holding the lime cpp closure to be used to forward the X3DH server&#39;s response to ...
Definition: lime_ffi.cpp:47
Definition: lime_ffi.h:82
Definition: lime_ffi.h:84
int lime_ffi_encrypt(lime_manager_t manager, const char *localDeviceId, const char *recipientUserId, lime_ffi_RecipientData_t *const recipients, const size_t recipientsSize, const uint8_t *const plainMessage, const size_t plainMessageSize, uint8_t *const cipherMessage, size_t *cipherMessageSize, const lime_ffi_Callback callback, void *callbackUserData, enum lime_ffi_EncryptionPolicy encryptionPolicy)
Encrypt a buffer (text or file) for a given list of recipient devices.
Definition: lime_ffi.cpp:267
struct lime_manager_struct * lime_manager_t
Definition: lime_ffi.h:47
int lime_ffi_set_peerDeviceStatus(lime_manager_t manager, const char *peerDeviceId, const uint8_t *const Ik, const size_t IkSize, enum lime_ffi_PeerDeviceStatus status)
set the peer device status flag in local storage: unsafe, trusted or untrusted.
Definition: lime_ffi.cpp:392
lime_ffi_PeerDeviceStatus
Definition: lime_ffi.h:81
int lime_ffi_get_x3dhServerUrl(lime_manager_t manager, const char *localDeviceId, char *x3dhServerUrl, size_t *x3dhServerUrlSize)
Get the X3DH key server URL for this identified user.
Definition: lime_ffi.cpp:456
lime_ffi_EncryptionPolicy
Definition: lime_ffi.h:69
char * deviceId
Definition: lime_ffi.h:102
Definition: lime_ffi.h:53
lime_ffi_CallbackReturn
Definition: lime_ffi.h:92
Definition: lime_ffi.h:85
uint8_t * DRmessage
Definition: lime_ffi.h:108
int lime_ffi_encryptOutBuffersMaximumSize(const size_t plainMessageSize, const enum lime_ffi_CurveId curve, size_t *DRmessageSize, size_t *cipherMessageSize)
Compute the maximum buffer sizes for the encryption outputs: DRmessage and cipherMessage.
Definition: lime_ffi.cpp:235
encapsulate a unique pointer to limeManager in an opaque structure
Definition: lime_ffi.cpp:40
Definition: lime_ffi.h:65
struct lime_ffi_data_struct * lime_ffi_data_t
Definition: lime_ffi.h:49
Definition: lime_ffi.h:94
int lime_ffi_delete_peerDevice(lime_manager_t manager, const char *peerDeviceId)
delete a peerDevice from local storage
Definition: lime_ffi.cpp:413
int lime_ffi_get_selfIdentityKey(lime_manager_t manager, const char *localDeviceId, uint8_t *const Ik, size_t *IkSize)
retrieve self Identity Key, an EdDSA formatted public key
Definition: lime_ffi.cpp:370
Definition: lime_ffi.h:64
enum lime_ffi_PeerDeviceStatus lime_ffi_decrypt(lime_manager_t manager, const char *localDeviceId, const char *recipientUserId, const char *senderDeviceId, const uint8_t *const DRmessage, const size_t DRmessageSize, const uint8_t *const cipherMessage, const size_t cipherMessageSize, uint8_t *const plainMessage, size_t *plainMessageSize)
Decrypt the given message.
Definition: lime_ffi.cpp:339
Definition: lime_ffi.h:54
int lime_ffi_delete_user(lime_manager_t manager, const char *localDeviceId, const lime_ffi_Callback callback, void *callbackUserData)
Delete a user from local database and from the X3DH server.
Definition: lime_ffi.cpp:203
The encrypt function input/output data structure.
Definition: lime_ffi.h:101
Definition: lime_ffi.h:63
int lime_ffi_processX3DHServerResponse(lime_ffi_data_t limeData, const int code, const uint8_t *response, const size_t response_size)
Forward X3DH server response to the lime engine.
Definition: lime_ffi.cpp:139
int lime_ffi_is_user(lime_manager_t manager, const char *localDeviceId)
Check if a user is present and active in local storage.
Definition: lime_ffi.cpp:222
int lime_ffi_update(lime_manager_t manager, const lime_ffi_Callback callback, void *callbackUserData, uint16_t OPkServerLowLimit, uint16_t OPkBatchSize)
Update: shall be called once a day at least, performs checks, updates and cleaning operations...
Definition: lime_ffi.cpp:423
size_t DRmessageSize
Definition: lime_ffi.h:109
Definition: lime_ffi.h:93
Definition: lime_ffi.h:55