13 #define USER_ID_SIZE 64
\r
14 #define SERVER_SIZE 20
\r
15 #define ACCESS_TOKEN_SIZE 40
\r
16 #define DEVICE_ID_SIZE 20
\r
17 #define EXPIRE_MS_SIZE 20
\r
18 #define REFRESH_TOKEN_SIZE 20
\r
19 #define MAX_URL_LEN 128
\r
21 #define OLM_IDENTITY_KEYS_JSON_SIZE 128
\r
22 #define DEVICE_KEY_SIZE 44
\r
23 #define SIGNING_KEY_SIZE 44
\r
24 #define ONETIME_KEY_SIZE 44
\r
26 #define KEY_SHARE_EVENT_LEN 1024
\r
28 #define OLM_ACCOUNT_MEMORY_SIZE 7528
\r
29 #define OLM_ACCOUNT_RANDOM_SIZE (32+32)
\r
31 #define OLM_SESSION_MEMORY_SIZE 3352
\r
32 #define OLM_ENCRYPT_RANDOM_SIZE 32
\r
33 #define OLM_OUTBOUND_SESSION_RANDOM_SIZE (32*2)
\r
35 #define OLM_ONETIME_KEYS_RANDOM_SIZE (32*10)
\r
36 #define OLM_KEY_ID_SIZE 32
\r
38 #define OLM_SIGNATURE_SIZE 128
\r
40 #define MEGOLM_OUTBOUND_SESSION_MEMORY_SIZE 232
\r
41 #define MEGOLM_SESSION_ID_SIZE 44
\r
42 #define MEGOLM_SESSION_KEY_SIZE 306
\r
43 #define MEGOLM_INIT_RANDOM_SIZE (4*32 + 32)
\r
45 #define JSON_ONETIME_KEY_SIZE 128
\r
46 #define JSON_ONETIME_KEY_SIGNED_SIZE 256
\r
47 #define JSON_SIGNATURE_SIZE 256
\r
49 #define NUM_MEGOLM_SESSIONS 10
\r
50 #define NUM_OLM_SESSIONS 10
\r
51 #define NUM_DEVICES 10
\r
55 typedef struct MatrixDevice {
\r
56 char deviceId[DEVICE_ID_SIZE];
\r
57 char deviceKey[DEVICE_KEY_SIZE];
\r
61 // Matrix Olm Account
\r
63 typedef struct MatrixOlmAccount {
\r
64 OlmAccount * account;
\r
65 char memory[OLM_ACCOUNT_MEMORY_SIZE];
\r
69 MatrixOlmAccountInit(
\r
70 MatrixOlmAccount * account);
\r
73 // Matrix Olm Session
\r
75 typedef struct MatrixOlmSession {
\r
76 const char * deviceId;
\r
79 OlmSession * session;
\r
80 char memory[OLM_SESSION_MEMORY_SIZE];
\r
85 MatrixOlmSession * session,
\r
86 OlmAccount * olmAccount,
\r
87 const char * deviceId,
\r
88 const char * deviceKey,
\r
89 const char * deviceOnetimeKey);
\r
92 MatrixOlmSessionEncrypt(
\r
93 MatrixOlmSession * session,
\r
94 const char * plaintext,
\r
95 char * outBuffer, int outBufferCap);
\r
98 // Matrix Megolm Session
\r
100 typedef struct MatrixMegolmInSession {
\r
101 OlmInboundGroupSession * session;
\r
102 } MatrixMegolmInSession;
\r
104 typedef struct MatrixMegolmOutSession {
\r
105 const char * roomId;
\r
107 OlmOutboundGroupSession * session;
\r
108 char memory[MEGOLM_OUTBOUND_SESSION_MEMORY_SIZE];
\r
110 char id[MEGOLM_SESSION_ID_SIZE];
\r
111 char key[MEGOLM_SESSION_KEY_SIZE];
\r
112 } MatrixMegolmOutSession;
\r
115 MatrixMegolmOutSessionInit(
\r
116 MatrixMegolmOutSession * session,
\r
117 const char * roomId);
\r
120 MatrixMegolmOutSessionEncrypt(
\r
121 MatrixMegolmOutSession * session,
\r
122 const char * plaintext,
\r
123 char * outBuffer, int outBufferCap);
\r
128 typedef struct MatrixClient {
\r
129 MatrixOlmAccount olmAccount;
\r
131 MatrixMegolmInSession megolmInSessions[NUM_MEGOLM_SESSIONS];
\r
132 int numMegolmInSessions;
\r
133 MatrixMegolmOutSession megolmOutSessions[NUM_MEGOLM_SESSIONS];
\r
134 int numMegolmOutSessions;
\r
135 MatrixOlmSession olmSessions[NUM_OLM_SESSIONS];
\r
136 int numOlmSessions;
\r
138 MatrixDevice devices[NUM_DEVICES];
\r
141 char deviceKey[DEVICE_KEY_SIZE];
\r
142 char signingKey[DEVICE_KEY_SIZE];
\r
144 char userId[USER_ID_SIZE];
\r
145 char server[SERVER_SIZE];
\r
146 char accessToken[ACCESS_TOKEN_SIZE];
\r
147 char deviceId[DEVICE_ID_SIZE];
\r
148 char expireMs[EXPIRE_MS_SIZE];
\r
149 char refreshToken[REFRESH_TOKEN_SIZE];
\r
151 void * httpUserData;
\r
156 MatrixClient * client,
\r
157 const char * server);
\r
161 MatrixClient * client,
\r
162 const char * filename);
\r
166 MatrixClient * client,
\r
167 const char * filename);
\r
170 MatrixClientSetAccessToken(
\r
171 MatrixClient * client,
\r
172 const char * accessToken);
\r
175 MatrixClientSetDeviceId(
\r
176 MatrixClient * client,
\r
177 const char * deviceId);
\r
180 MatrixClientSetUserId(
\r
181 MatrixClient * client,
\r
182 const char * userId);
\r
185 MatrixClientGenerateOnetimeKeys(
\r
186 MatrixClient * client,
\r
190 MatrixClientUploadOnetimeKeys(
\r
191 MatrixClient * client);
\r
194 MatrixClientUploadDeviceKeys(
\r
195 MatrixClient * client);
\r
198 MatrixClientClaimOnetimeKey(
\r
199 MatrixClient * client,
\r
200 const char * userId,
\r
201 const char * deviceId,
\r
202 char * outOnetimeKey, int outOnetimeKeyCap);
\r
205 MatrixClientLoginPassword(
\r
206 MatrixClient * client,
\r
207 const char * username,
\r
208 const char * password,
\r
209 const char * displayName);
\r
212 MatrixClientSendEvent(
\r
213 MatrixClient * client,
\r
214 const char * roomId,
\r
215 const char * msgType,
\r
216 const char * msgBody);
\r
219 MatrixClientSendEventEncrypted(
\r
220 MatrixClient * client,
\r
221 const char * roomId,
\r
222 const char * msgType,
\r
223 const char * msgBody);
\r
227 MatrixClient * client,
\r
228 char * outSync, int outSyncCap);
\r
231 MatrixClientShareMegolmOutSession(
\r
232 MatrixClient * client,
\r
233 const char * userId,
\r
234 const char * deviceId,
\r
235 MatrixMegolmOutSession * session);
\r
238 MatrixClientShareMegolmOutSessionTest(
\r
239 MatrixClient * client,
\r
240 const char * deviceId,
\r
241 MatrixMegolmOutSession * session);
\r
244 MatrixClientGetMegolmOutSession(
\r
245 MatrixClient * client,
\r
246 const char * roomId,
\r
247 MatrixMegolmOutSession ** outSession);
\r
250 MatrixClientSetMegolmOutSession(
\r
251 MatrixClient * client,
\r
252 const char * roomId,
\r
253 MatrixMegolmOutSession session);
\r
256 MatrixClientGetOlmSession(
\r
257 MatrixClient * client,
\r
258 const char * userId,
\r
259 const char * deviceId,
\r
260 MatrixOlmSession ** outSession);
\r
263 MatrixClientSendToDevice(
\r
264 MatrixClient * client,
\r
265 const char * userId,
\r
266 const char * deviceId,
\r
267 const char * message,
\r
268 const char * msgType);
\r
271 MatrixClientSendToDeviceEncrypted(
\r
272 MatrixClient * client,
\r
273 const char * userId,
\r
274 const char * deviceId,
\r
275 const char * message,
\r
276 const char * msgType);
\r
279 MatrixClientGetDeviceKey(
\r
280 MatrixClient * client,
\r
281 const char * deviceId,
\r
282 char * outDeviceKey, int outDeviceKeyCap);
\r
285 MatrixClientGetDeviceKey(
\r
286 MatrixClient * client,
\r
287 const char * deviceId,
\r
288 char * outDeviceKey, int outDeviceKeyCap);
\r
291 MatrixClientRequestDeviceKeys(
\r
292 MatrixClient * client);
\r
299 MatrixClient * client);
\r
303 MatrixClient * client);
\r
307 MatrixClient * client);
\r
311 MatrixClient * client,
\r
313 char * outResponseBuffer, int outResponseCap,
\r
314 bool authenticated);
\r
318 MatrixClient * client,
\r
320 const char * requestBuffer,
\r
321 char * outResponseBuffer, int outResponseCap,
\r
322 bool authenticated);
\r
326 MatrixClient * client,
\r
328 const char * requestBuffer,
\r
329 char * outResponseBuffer, int outResponseCap,
\r
330 bool authenticated);
\r
335 Randomize(uint8_t * random, int randomLen);
\r
339 const char * sIn, int sInLen,
\r
340 char * sOut, int sOutCap);
\r
343 MatrixClient * client,
\r
344 const char * sIn, int sInLen,
\r
345 char * sOut, int sOutCap);
\r