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 
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 */
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
lime_ffi_CurveId
Definition: lime_ffi.h:62
@ lime_ffi_CurveId_unset
Definition: lime_ffi.h:63
@ lime_ffi_CurveId_c448
Definition: lime_ffi.h:65
@ lime_ffi_CurveId_c25519
Definition: lime_ffi.h:64
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
struct lime_ffi_data_struct * lime_ffi_data_t
Definition: lime_ffi.h:49
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_EncryptionPolicy
Definition: lime_ffi.h:69
@ lime_ffi_EncryptionPolicy_optimizeUploadSize
Definition: lime_ffi.h:72
@ lime_ffi_EncryptionPolicy_optimizeGlobalBandwidth
Definition: lime_ffi.h:73
@ lime_ffi_EncryptionPolicy_DRMessage
Definition: lime_ffi.h:70
@ lime_ffi_EncryptionPolicy_cipherMessage
Definition: lime_ffi.h:71
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
struct lime_manager_struct * lime_manager_t
Definition: lime_ffi.h:47
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_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
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
LIME_FFI_ERROR
Definition: lime_ffi.h:51
@ LIME_FFI_SUCCESS
Definition: lime_ffi.h:52
@ LIME_FFI_USER_NOT_FOUND
Definition: lime_ffi.h:56
@ LIME_FFI_INVALID_CURVE_ARGUMENT
Definition: lime_ffi.h:53
@ LIME_FFI_INTERNAL_ERROR
Definition: lime_ffi.h:54
@ LIME_FFI_OUTPUT_BUFFER_TOO_SMALL
Definition: lime_ffi.h:55
lime_ffi_PeerDeviceStatus
Definition: lime_ffi.h:81
@ lime_ffi_PeerDeviceStatus_untrusted
Definition: lime_ffi.h:82
@ lime_ffi_PeerDeviceStatus_fail
Definition: lime_ffi.h:85
@ lime_ffi_PeerDeviceStatus_unsafe
Definition: lime_ffi.h:84
@ lime_ffi_PeerDeviceStatus_unknown
Definition: lime_ffi.h:87
@ lime_ffi_PeerDeviceStatus_trusted
Definition: lime_ffi.h:83
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
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
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
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
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
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_CallbackReturn
Definition: lime_ffi.h:92
@ lime_ffi_CallbackReturn_success
Definition: lime_ffi.h:93
@ lime_ffi_CallbackReturn_fail
Definition: lime_ffi.h:94
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_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
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
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_manager_destroy(lime_manager_t manager)
Destroy the internal structure used to interact with lime.
Definition: lime_ffi.cpp:364
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
The encrypt function input/output data structure.
Definition: lime_ffi.h:101
size_t DRmessageSize
Definition: lime_ffi.h:109
char * deviceId
Definition: lime_ffi.h:102
uint8_t * DRmessage
Definition: lime_ffi.h:108
an opaque structure holding the lime cpp closure to be used to forward the X3DH server's response to ...
Definition: lime_ffi.cpp:47
encapsulate a unique pointer to limeManager in an opaque structure
Definition: lime_ffi.cpp:40