X-Git-Url: https://gitweb.ps.run/matrix_esp_thesis/blobdiff_plain/b231872efcb97e52856f5972efd161c6e9b03cd6..9030210ff764c36cb6b0c1dacf40b016bab90d7c:/src/matrix.h diff --git a/src/matrix.h b/src/matrix.h index 4037f09..226a341 100644 --- a/src/matrix.h +++ b/src/matrix.h @@ -23,6 +23,7 @@ #define DEVICE_KEY_SIZE 44 #define SIGNING_KEY_SIZE 44 #define ONETIME_KEY_SIZE 44 +#define MASTER_KEY_SIZE 44 #define KEY_SHARE_EVENT_LEN 1024 @@ -47,9 +48,52 @@ #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 100 +#define NUM_MEGOLM_SESSIONS 2 +#define NUM_OLM_SESSIONS 2 +#define NUM_DEVICES 10 + +// HTTP + +typedef struct MatrixHttpConnection MatrixHttpConnection; + +bool +MatrixHttpInit( + MatrixHttpConnection ** hc, + const char * host); + +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 +149,7 @@ MatrixOlmSessionUnpickle( void * pickled, int pickledLen, const void * key, int keyLen); +// create an olm sesseion from a type 0 message bool MatrixOlmSessionFrom( MatrixOlmSession * session, @@ -113,6 +158,7 @@ MatrixOlmSessionFrom( const char * deviceKey, const char * encrypted); +// create a new olm session from a claimed onetime key bool MatrixOlmSessionTo( MatrixOlmSession * session, @@ -180,18 +226,6 @@ MatrixMegolmOutSessionEncrypt( const char * plaintext, char * outBuffer, int outBufferCap); -bool -MatrixMegolmOutSessionSave( - MatrixMegolmOutSession * session, - const char * filename, - const char * key); - -bool -MatrixMegolmOutSessionLoad( - MatrixMegolmOutSession * session, - const char * filename, - const char * key); - // Matrix Client @@ -207,34 +241,22 @@ typedef struct MatrixClient { MatrixDevice devices[NUM_DEVICES]; int numDevices; - - // char deviceKey[DEVICE_KEY_SIZE]; - // 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]; + char masterKey[MASTER_KEY_SIZE]; - void * httpUserData; + bool verified; + + MatrixHttpConnection * hc; } MatrixClient; bool MatrixClientInit( - MatrixClient * client, - const char * server); - -bool -MatrixClientSave( - MatrixClient * client, - const char * filename); - -bool -MatrixClientLoad( - MatrixClient * client, - const char * filename); + MatrixClient * client); bool MatrixClientSetAccessToken( @@ -261,7 +283,7 @@ MatrixClientUploadOnetimeKeys( MatrixClient * client); bool -MatrixClientUploadDeviceKey( +MatrixClientUploadDeviceKeys( MatrixClient * client); bool @@ -295,8 +317,8 @@ MatrixClientSendEventEncrypted( bool MatrixClientSync( MatrixClient * client, - char * outSync, int outSyncCap, - const char * nextBatch); + char * outSyncBuffer, int outSyncCap, + char * nextBatch, int nextBatchCap); bool MatrixClientGetRoomEvent( @@ -312,25 +334,21 @@ MatrixClientShareMegolmOutSession( const char * deviceId, MatrixMegolmOutSession * session); -bool -MatrixClientShareMegolmOutSessionTest( - MatrixClient * client, - const char * userId, - const char * deviceId, - MatrixMegolmOutSession * session); - +// try to lookup outgoing megolm session, return true if found bool MatrixClientGetMegolmOutSession( MatrixClient * client, const char * roomId, MatrixMegolmOutSession ** outSession); +// create a new outgoing megolm session and store it locally bool MatrixClientNewMegolmOutSession( MatrixClient * client, const char * roomId, MatrixMegolmOutSession ** outSession); +// try to lookup incoming megolm session, return true if found bool MatrixClientGetMegolmInSession( MatrixClient * client, @@ -338,6 +356,7 @@ MatrixClientGetMegolmInSession( const char * sessionId, int sessionIdLen, MatrixMegolmInSession ** outSession); +// create a new incoming megolm session and store it locally bool MatrixClientNewMegolmInSession( MatrixClient * client, @@ -345,7 +364,8 @@ MatrixClientNewMegolmInSession( const char * sessionId, const char * sessionKey, MatrixMegolmInSession ** outSession); - + +// send a m.room_key_request to the device identified by userId/devideId bool MatrixClientRequestMegolmInSession( MatrixClient * client, @@ -353,18 +373,29 @@ MatrixClientRequestMegolmInSession( const char * sessionId, const char * senderKey, const char * userId, - const char * deviceId); // TODO: remove deviceId (query all devices) + const char * deviceId); +// try to lookup olm session, return true if found bool -MatrixClientGetOlmSessionIn( +MatrixClientGetOlmSession( + MatrixClient * client, + const char * userId, + const char * deviceId, + MatrixOlmSession ** outSession); + +// create a new olm session from a type 0 message and store it locally +bool +MatrixClientNewOlmSessionIn( MatrixClient * client, const char * userId, const char * deviceId, const char * encrypted, MatrixOlmSession ** outSession); - + +// create a new olm session with device userId/deviceId and store it locally +// this automatically claims the onetime key bool -MatrixClientGetOlmSessionOut( +MatrixClientNewOlmSessionOut( MatrixClient * client, const char * userId, const char * deviceId, @@ -392,63 +423,37 @@ MatrixClientSendDummy( const char * userId, const char * deviceId); +// lookup device key locally and if not present get it from server bool MatrixClientRequestDeviceKey( MatrixClient * client, const char * deviceId, char * outDeviceKey, int outDeviceKeyCap); +// lookup signing key locally and if not present get it from server bool MatrixClientRequestSigningKey( MatrixClient * client, const char * deviceId, char * outSigningKey, int outSigningKeyCap); +// lookup the master key for this user and if not present get it from server bool -MatrixClientRequestDeviceKeys( - MatrixClient * client); - -bool -MatrixClientDeleteDevice( - MatrixClient * client); - - - - -bool -MatrixHttpInit( - MatrixClient * client); +MatrixClientRequestMasterKey( + MatrixClient * client, + char * outMasterKey, int outMasterKeyCap); +// call keys/query and store retrieved information +// this is called by the other Request* functions bool -MatrixHttpConnect( +MatrixClientRequestDeviceKeys( MatrixClient * client); +// delete this device on the server bool -MatrixHttpDeinit( +MatrixClientDeleteDevice( 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