X-Git-Url: https://gitweb.ps.run/matrix_esp_thesis/blobdiff_plain/30bde47d1d5d9b6f0b59c318ff16caed6268d1a8..03dae6117523564ee29b35b087970cfa3d523d20:/src/matrix.h diff --git a/src/matrix.h b/src/matrix.h index 20cdc8c..c07c742 100644 --- a/src/matrix.h +++ b/src/matrix.h @@ -17,7 +17,7 @@ #define DEVICE_ID_SIZE 20 #define EXPIRE_MS_SIZE 20 #define REFRESH_TOKEN_SIZE 20 -#define MAX_URL_LEN 128 +#define MAX_URL_LEN 1024 #define OLM_IDENTITY_KEYS_JSON_SIZE 128 #define DEVICE_KEY_SIZE 44 @@ -47,9 +47,56 @@ #define JSON_ONETIME_KEY_SIGNED_SIZE 256 #define JSON_SIGNATURE_SIZE 256 -#define NUM_MEGOLM_SESSIONS 10 -#define NUM_OLM_SESSIONS 10 -#define NUM_DEVICES 10 +#define NUM_MEGOLM_SESSIONS 2 +#define NUM_OLM_SESSIONS 2 +#define NUM_DEVICES 5 + +// HTTP + +typedef struct MatrixHttpConnection MatrixHttpConnection; + +bool +MatrixHttpInit( + MatrixHttpConnection ** hc, + const char * host); + +// bool +// MatrixHttpConnect( +// MatrixHttpConnection * hc); + +bool +MatrixHttpDeinit( + MatrixHttpConnection ** hc); + +bool +MatrixHttpSetAccessToken( + MatrixHttpConnection * hc, + const char * accessToken); + +bool +MatrixHttpGet( + MatrixHttpConnection * hc, + const char * url, + char * outResponseBuffer, int outResponseCap, + bool authenticated); + +bool +MatrixHttpPost( + MatrixHttpConnection * hc, + const char * url, + const char * requestBuffer, + char * outResponseBuffer, int outResponseCap, + bool authenticated); + +bool +MatrixHttpPut( + MatrixHttpConnection * hc, + const char * url, + const char * requestBuffer, + char * outResponseBuffer, int outResponseCap, + bool authenticated); + + // Matrix Device @@ -105,6 +152,14 @@ MatrixOlmSessionUnpickle( void * pickled, int pickledLen, const void * key, int keyLen); +bool +MatrixOlmSessionFrom( + MatrixOlmSession * session, + OlmAccount * olmAccount, + const char * deviceId, + const char * deviceKey, + const char * encrypted); + bool MatrixOlmSessionTo( MatrixOlmSession * session, @@ -130,23 +185,35 @@ MatrixOlmSessionDecrypt( // Matrix Megolm Session typedef struct MatrixMegolmInSession { + char roomId[ROOM_ID_SIZE]; + char id[MEGOLM_SESSION_ID_SIZE]; + char key[MEGOLM_SESSION_KEY_SIZE]; + OlmInboundGroupSession * session; + char memory[MEGOLM_OUTBOUND_SESSION_MEMORY_SIZE]; + } MatrixMegolmInSession; +bool +MatrixMegolmInSessionInit( + MatrixMegolmInSession * session, + const char * roomId, + const char * sessionId, + const char * sessionKey, int sessionKeyLen); + bool MatrixMegolmInSessionDecrypt( - MatrixMegolmInSession * megolmInSession, - const char * encrypted, + MatrixMegolmInSession * session, + const char * encrypted, int encryptedLen, char * outDecrypted, int outDecryptedCap); typedef struct MatrixMegolmOutSession { char roomId[ROOM_ID_SIZE]; + char id[MEGOLM_SESSION_ID_SIZE]; + char key[MEGOLM_SESSION_KEY_SIZE]; OlmOutboundGroupSession * session; char memory[MEGOLM_OUTBOUND_SESSION_MEMORY_SIZE]; - - char id[MEGOLM_SESSION_ID_SIZE]; - char key[MEGOLM_SESSION_KEY_SIZE]; } MatrixMegolmOutSession; bool @@ -192,19 +259,17 @@ typedef struct MatrixClient { // char signingKey[DEVICE_KEY_SIZE]; char userId[USER_ID_SIZE]; - char server[SERVER_SIZE]; char accessToken[ACCESS_TOKEN_SIZE]; char deviceId[DEVICE_ID_SIZE]; char expireMs[EXPIRE_MS_SIZE]; char refreshToken[REFRESH_TOKEN_SIZE]; - void * httpUserData; + MatrixHttpConnection * hc; } MatrixClient; bool MatrixClientInit( - MatrixClient * client, - const char * server); + MatrixClient * client); bool MatrixClientSave( @@ -275,7 +340,8 @@ MatrixClientSendEventEncrypted( bool MatrixClientSync( MatrixClient * client, - char * outSync, int outSyncCap); + char * outSync, int outSyncCap, + const char * nextBatch); bool MatrixClientGetRoomEvent( @@ -305,15 +371,25 @@ MatrixClientGetMegolmOutSession( MatrixMegolmOutSession ** outSession); bool -MatrixClientSetMegolmOutSession( +MatrixClientNewMegolmOutSession( MatrixClient * client, const char * roomId, - MatrixMegolmOutSession session); + MatrixMegolmOutSession ** outSession); bool -MatrixClientInitMegolmOutSession( +MatrixClientGetMegolmInSession( MatrixClient * client, - const char * roomId); + const char * roomId, int roomIdLen, + const char * sessionId, int sessionIdLen, + MatrixMegolmInSession ** outSession); + +bool +MatrixClientNewMegolmInSession( + MatrixClient * client, + const char * roomId, + const char * sessionId, + const char * sessionKey, + MatrixMegolmInSession ** outSession); bool MatrixClientRequestMegolmInSession( @@ -322,8 +398,7 @@ MatrixClientRequestMegolmInSession( const char * sessionId, const char * senderKey, const char * userId, - const char * deviceId, // TODO: remove deviceId (query all devices) - MatrixMegolmInSession * outMegolmInSession); + const char * deviceId); // TODO: remove deviceId (query all devices) bool MatrixClientGetOlmSession( @@ -332,6 +407,21 @@ MatrixClientGetOlmSession( const char * deviceId, MatrixOlmSession ** outSession); +bool +MatrixClientNewOlmSessionIn( + MatrixClient * client, + const char * userId, + const char * deviceId, + const char * encrypted, + MatrixOlmSession ** outSession); + +bool +MatrixClientNewOlmSessionOut( + MatrixClient * client, + const char * userId, + const char * deviceId, + MatrixOlmSession ** outSession); + bool MatrixClientSendToDevice( MatrixClient * client, @@ -375,43 +465,6 @@ MatrixClientDeleteDevice( MatrixClient * client); - - -bool -MatrixHttpInit( - MatrixClient * client); - -bool -MatrixHttpConnect( - MatrixClient * client); - -bool -MatrixHttpDeinit( - MatrixClient * client); - -bool -MatrixHttpGet( - MatrixClient * client, - const char * url, - char * outResponseBuffer, int outResponseCap, - bool authenticated); - -bool -MatrixHttpPost( - MatrixClient * client, - const char * url, - const char * requestBuffer, - char * outResponseBuffer, int outResponseCap, - bool authenticated); - -bool -MatrixHttpPut( - MatrixClient * client, - const char * url, - const char * requestBuffer, - char * outResponseBuffer, int outResponseCap, - bool authenticated); - // util void @@ -422,6 +475,11 @@ JsonEscape( const char * sIn, int sInLen, char * sOut, int sOutCap); +bool +JsonCanonicalize( + const char * sIn, int sInLen, + char * sOut, int sOutCap); + bool JsonSign( MatrixClient * client,