#define OLM_IDENTITY_KEYS_JSON_SIZE 128\r
#define DEVICE_KEY_SIZE 44\r
#define SIGNING_KEY_SIZE 44\r
+#define ONETIME_KEY_SIZE 44\r
\r
#define KEY_SHARE_EVENT_LEN 1024\r
\r
#define OLM_ACCOUNT_MEMORY_SIZE 7528\r
-#define OLM_ACCOUNT_RANDOM_SIZE 32+32\r
+#define OLM_ACCOUNT_RANDOM_SIZE (32+32)\r
\r
#define OLM_SESSION_MEMORY_SIZE 3352\r
#define OLM_ENCRYPT_RANDOM_SIZE 32\r
+#define OLM_OUTBOUND_SESSION_RANDOM_SIZE (32*2)\r
+\r
+#define OLM_ONETIME_KEYS_RANDOM_SIZE (32*10)\r
+#define OLM_KEY_ID_SIZE 32\r
+\r
+#define OLM_SIGNATURE_SIZE 128\r
\r
#define MEGOLM_OUTBOUND_SESSION_MEMORY_SIZE 232\r
#define MEGOLM_SESSION_ID_SIZE 44\r
#define MEGOLM_SESSION_KEY_SIZE 306\r
#define MEGOLM_INIT_RANDOM_SIZE (4*32 + 32)\r
\r
+#define JSON_ONETIME_KEY_SIZE 128\r
+#define JSON_ONETIME_KEY_SIGNED_SIZE 256\r
+#define JSON_SIGNATURE_SIZE 256\r
+\r
#define NUM_MEGOLM_SESSIONS 10\r
#define NUM_OLM_SESSIONS 10\r
#define NUM_DEVICES 10\r
\r
-void\r
-Randomize(uint8_t * random, int randomLen);\r
-\r
-bool\r
-JsonEscape(\r
- char * sIn, int sInLen,\r
- char * sOut, int sOutCap);\r
+// Matrix Device\r
\r
typedef struct MatrixDevice {\r
char deviceId[DEVICE_ID_SIZE];\r
char deviceKey[DEVICE_KEY_SIZE];\r
} MatrixDevice;\r
\r
+\r
+// Matrix Olm Account\r
+\r
+typedef struct MatrixOlmAccount {\r
+ OlmAccount * account;\r
+ char memory[OLM_ACCOUNT_MEMORY_SIZE];\r
+} MatrixOlmAccount;\r
+\r
+bool\r
+MatrixOlmAccountInit(\r
+ MatrixOlmAccount * account);\r
+\r
+\r
+// Matrix Olm Session\r
+\r
typedef struct MatrixOlmSession {\r
const char * deviceId;\r
\r
} MatrixOlmSession;\r
\r
bool\r
-MatrixOlmSessionInit(\r
+MatrixOlmSessionTo(\r
MatrixOlmSession * session,\r
- const char * deviceId);\r
+ OlmAccount * olmAccount,\r
+ const char * deviceId,\r
+ const char * deviceKey,\r
+ const char * deviceOnetimeKey);\r
\r
bool\r
MatrixOlmSessionEncrypt(\r
char * outBuffer, int outBufferCap);\r
\r
\r
+// Matrix Megolm Session\r
\r
typedef struct MatrixMegolmInSession {\r
OlmInboundGroupSession * session;\r
char * outBuffer, int outBufferCap);\r
\r
\r
+// Matrix Client\r
\r
typedef struct MatrixClient {\r
- OlmAccount * olmAccount;\r
- char olmAccountMemory[OLM_ACCOUNT_MEMORY_SIZE];\r
+ MatrixOlmAccount olmAccount;\r
\r
MatrixMegolmInSession megolmInSessions[NUM_MEGOLM_SESSIONS];\r
int numMegolmInSessions;\r
MatrixClient * client,\r
const char * deviceId);\r
\r
+bool\r
+MatrixClientSetUserId(\r
+ MatrixClient * client,\r
+ const char * userId);\r
+\r
+bool\r
+MatrixClientGenerateOnetimeKeys(\r
+ MatrixClient * client,\r
+ int numberOfKeys);\r
+\r
+bool\r
+MatrixClientUploadOnetimeKeys(\r
+ MatrixClient * client);\r
+\r
+bool\r
+MatrixClientUploadDeviceKeys(\r
+ MatrixClient * client);\r
+\r
+bool\r
+MatrixClientClaimOnetimeKey(\r
+ MatrixClient * client,\r
+ const char * userId,\r
+ const char * deviceId,\r
+ char * outOnetimeKey, int outOnetimeKeyCap);\r
+\r
bool\r
MatrixClientLoginPassword(\r
MatrixClient * client,\r
bool\r
MatrixClientSync(\r
MatrixClient * client,\r
- char * outSyncBuffer, int outSyncCap);\r
+ char * outSync, int outSyncCap);\r
\r
bool\r
MatrixClientShareMegolmOutSession(\r
+ MatrixClient * client,\r
+ const char * userId,\r
+ const char * deviceId,\r
+ MatrixMegolmOutSession * session);\r
+\r
+bool\r
+MatrixClientShareMegolmOutSessionTest(\r
MatrixClient * client,\r
const char * deviceId,\r
MatrixMegolmOutSession * session);\r
bool\r
MatrixClientGetOlmSession(\r
MatrixClient * client,\r
+ const char * userId,\r
const char * deviceId,\r
MatrixOlmSession ** outSession);\r
\r
MatrixHttpInit(\r
MatrixClient * client);\r
\r
+bool\r
+MatrixHttpConnect(\r
+ MatrixClient * client);\r
+\r
bool\r
MatrixHttpDeinit(\r
MatrixClient * client);\r
char * outResponseBuffer, int outResponseCap,\r
bool authenticated);\r
\r
+// util\r
+\r
+void\r
+Randomize(uint8_t * random, int randomLen);\r
+\r
+bool\r
+JsonEscape(\r
+ const char * sIn, int sInLen,\r
+ char * sOut, int sOutCap);\r
+ \r
+bool JsonSign(\r
+ MatrixClient * client,\r
+ const char * sIn, int sInLen,\r
+ char * sOut, int sOutCap);\r
+\r
#endif\r