#define DEVICE_KEY_SIZE 44\r
#define SIGNING_KEY_SIZE 44\r
#define ONETIME_KEY_SIZE 44\r
+#define MASTER_KEY_SIZE 44\r
\r
#define KEY_SHARE_EVENT_LEN 1024\r
\r
\r
#define NUM_MEGOLM_SESSIONS 2\r
#define NUM_OLM_SESSIONS 2\r
-#define NUM_DEVICES 5\r
+#define NUM_DEVICES 10\r
\r
// HTTP\r
\r
MatrixHttpConnection ** hc,\r
const char * host);\r
\r
-// bool\r
-// MatrixHttpConnect(\r
-// MatrixHttpConnection * hc);\r
-\r
bool\r
MatrixHttpDeinit(\r
MatrixHttpConnection ** hc);\r
void * pickled, int pickledLen,\r
const void * key, int keyLen);\r
\r
+// create an olm sesseion from a type 0 message\r
bool\r
MatrixOlmSessionFrom(\r
MatrixOlmSession * session,\r
const char * deviceKey,\r
const char * encrypted);\r
\r
+// create a new olm session from a claimed onetime key\r
bool\r
MatrixOlmSessionTo(\r
MatrixOlmSession * session,\r
const char * plaintext,\r
char * outBuffer, int outBufferCap);\r
\r
-bool\r
-MatrixMegolmOutSessionSave(\r
- MatrixMegolmOutSession * session,\r
- const char * filename,\r
- const char * key);\r
- \r
-bool\r
-MatrixMegolmOutSessionLoad(\r
- MatrixMegolmOutSession * session,\r
- const char * filename,\r
- const char * key);\r
-\r
\r
// Matrix Client\r
\r
\r
MatrixDevice devices[NUM_DEVICES];\r
int numDevices;\r
- \r
- // char deviceKey[DEVICE_KEY_SIZE];\r
- // char signingKey[DEVICE_KEY_SIZE];\r
\r
char userId[USER_ID_SIZE];\r
char accessToken[ACCESS_TOKEN_SIZE];\r
char deviceId[DEVICE_ID_SIZE];\r
char expireMs[EXPIRE_MS_SIZE];\r
char refreshToken[REFRESH_TOKEN_SIZE];\r
+ char masterKey[MASTER_KEY_SIZE];\r
+\r
+ bool verified;\r
\r
MatrixHttpConnection * hc;\r
} MatrixClient;\r
MatrixClientInit(\r
MatrixClient * client);\r
\r
-bool\r
-MatrixClientSave(\r
- MatrixClient * client,\r
- const char * filename);\r
-\r
-bool\r
-MatrixClientLoad(\r
- MatrixClient * client,\r
- const char * filename);\r
-\r
bool\r
MatrixClientSetAccessToken(\r
MatrixClient * client,\r
MatrixClient * client);\r
\r
bool\r
-MatrixClientUploadDeviceKey(\r
+MatrixClientUploadDeviceKeys(\r
MatrixClient * client);\r
\r
bool\r
bool\r
MatrixClientSync(\r
MatrixClient * client,\r
- char * outSync, int outSyncCap,\r
- const char * nextBatch);\r
+ char * outSyncBuffer, int outSyncCap,\r
+ char * nextBatch, int nextBatchCap);\r
\r
bool\r
MatrixClientGetRoomEvent(\r
const char * deviceId,\r
MatrixMegolmOutSession * session);\r
\r
-bool\r
-MatrixClientShareMegolmOutSessionTest(\r
- MatrixClient * client,\r
- const char * userId,\r
- const char * deviceId,\r
- MatrixMegolmOutSession * session);\r
-\r
+// try to lookup outgoing megolm session, return true if found\r
bool\r
MatrixClientGetMegolmOutSession(\r
MatrixClient * client,\r
const char * roomId,\r
MatrixMegolmOutSession ** outSession);\r
\r
+// create a new outgoing megolm session and store it locally\r
bool\r
MatrixClientNewMegolmOutSession(\r
MatrixClient * client,\r
const char * roomId,\r
MatrixMegolmOutSession ** outSession);\r
\r
+// try to lookup incoming megolm session, return true if found\r
bool\r
MatrixClientGetMegolmInSession(\r
MatrixClient * client,\r
const char * sessionId, int sessionIdLen,\r
MatrixMegolmInSession ** outSession);\r
\r
+// create a new incoming megolm session and store it locally\r
bool\r
MatrixClientNewMegolmInSession(\r
MatrixClient * client,\r
const char * sessionId,\r
const char * sessionKey,\r
MatrixMegolmInSession ** outSession);\r
- \r
+\r
+// send a m.room_key_request to the device identified by userId/devideId\r
bool\r
MatrixClientRequestMegolmInSession(\r
MatrixClient * client,\r
const char * sessionId,\r
const char * senderKey,\r
const char * userId,\r
- const char * deviceId); // TODO: remove deviceId (query all devices)\r
+ const char * deviceId);\r
\r
+// try to lookup olm session, return true if found\r
bool\r
MatrixClientGetOlmSession(\r
MatrixClient * client,\r
const char * deviceId,\r
MatrixOlmSession ** outSession);\r
\r
+// create a new olm session from a type 0 message and store it locally\r
bool\r
MatrixClientNewOlmSessionIn(\r
MatrixClient * client,\r
const char * deviceId,\r
const char * encrypted,\r
MatrixOlmSession ** outSession);\r
- \r
+\r
+// create a new olm session with device userId/deviceId and store it locally\r
+// this automatically claims the onetime key\r
bool\r
MatrixClientNewOlmSessionOut(\r
MatrixClient * client,\r
const char * userId,\r
const char * deviceId);\r
\r
+// lookup device key locally and if not present get it from server\r
bool\r
MatrixClientRequestDeviceKey(\r
MatrixClient * client,\r
const char * deviceId,\r
char * outDeviceKey, int outDeviceKeyCap);\r
\r
+// lookup signing key locally and if not present get it from server\r
bool\r
MatrixClientRequestSigningKey(\r
MatrixClient * client,\r
const char * deviceId,\r
char * outSigningKey, int outSigningKeyCap);\r
\r
+// lookup the master key for this user and if not present get it from server\r
+bool\r
+MatrixClientRequestMasterKey(\r
+ MatrixClient * client,\r
+ char * outMasterKey, int outMasterKeyCap);\r
+\r
+// call keys/query and store retrieved information\r
+// this is called by the other Request* functions\r
bool\r
MatrixClientRequestDeviceKeys(\r
MatrixClient * client);\r
\r
+// delete this device on the server\r
bool\r
MatrixClientDeleteDevice(\r
MatrixClient * client);\r