X-Git-Url: https://gitweb.ps.run/matrix_esp_thesis/blobdiff_plain/ad9d01050b7b6d592a83ce14eeef7068bd981028..a6eff84624ab1f3786d02aa2ec740b9a88090d94:/src/matrix.h diff --git a/src/matrix.h b/src/matrix.h index 6538e12..72e865f 100644 --- a/src/matrix.h +++ b/src/matrix.h @@ -18,18 +18,32 @@ #define REFRESH_TOKEN_SIZE 20 #define MAX_URL_LEN 128 -#define DEVICE_KEY_SIZE 20 +#define OLM_IDENTITY_KEYS_JSON_SIZE 128 +#define DEVICE_KEY_SIZE 44 +#define SIGNING_KEY_SIZE 44 #define KEY_SHARE_EVENT_LEN 1024 +#define OLM_ACCOUNT_MEMORY_SIZE 7528 +#define OLM_ACCOUNT_RANDOM_SIZE (32+32) + #define OLM_SESSION_MEMORY_SIZE 3352 #define OLM_ENCRYPT_RANDOM_SIZE 32 +#define OLM_ONETIME_KEYS_RANDOM_SIZE 32*10 +#define OLM_KEY_ID_SIZE 32 + +#define OLM_SIGNATURE_SIZE 128 + #define MEGOLM_OUTBOUND_SESSION_MEMORY_SIZE 232 #define MEGOLM_SESSION_ID_SIZE 44 #define MEGOLM_SESSION_KEY_SIZE 306 #define MEGOLM_INIT_RANDOM_SIZE (4*32 + 32) +#define JSON_ONETIME_KEY_SIZE 128 +#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 @@ -41,12 +55,33 @@ bool JsonEscape( char * sIn, int sInLen, char * sOut, int sOutCap); + +bool JsonSign( + char * sIn, int sInLen, + char * sOut, int sOutCap); + +// Matrix Device typedef struct MatrixDevice { char deviceId[DEVICE_ID_SIZE]; char deviceKey[DEVICE_KEY_SIZE]; } MatrixDevice; + +// Matrix Olm Account + +typedef struct MatrixOlmAccount { + OlmAccount * account; + char memory[OLM_ACCOUNT_MEMORY_SIZE]; +} MatrixOlmAccount; + +bool +MatrixOlmAccountInit( + MatrixOlmAccount * account); + + +// Matrix Olm Session + typedef struct MatrixOlmSession { const char * deviceId; @@ -67,6 +102,7 @@ MatrixOlmSessionEncrypt( char * outBuffer, int outBufferCap); +// Matrix Megolm Session typedef struct MatrixMegolmInSession { OlmInboundGroupSession * session; @@ -94,10 +130,10 @@ MatrixMegolmOutSessionEncrypt( char * outBuffer, int outBufferCap); +// Matrix Client typedef struct MatrixClient { - OlmAccount * olmAccount; - OlmSession * olmSession; + MatrixOlmAccount olmAccount; MatrixMegolmInSession megolmInSessions[NUM_MEGOLM_SESSIONS]; int numMegolmInSessions; @@ -110,6 +146,7 @@ typedef struct MatrixClient { int numDevices; char deviceKey[DEVICE_KEY_SIZE]; + char signingKey[DEVICE_KEY_SIZE]; char userId[USER_ID_SIZE]; char server[SERVER_SIZE]; @@ -131,6 +168,29 @@ MatrixClientSetAccessToken( MatrixClient * client, const char * accessToken); +bool +MatrixClientSetDeviceId( + MatrixClient * client, + const char * deviceId); + +bool +MatrixClientSetUserId( + MatrixClient * client, + const char * userId); + +bool +MatrixClientGenerateOnetimeKeys( + MatrixClient * client, + int numberOfKeys); + +bool +MatrixClientUploadOnetimeKeys( + MatrixClient * client); + +bool +MatrixClientUploadDeviceKeys( + MatrixClient * client); + bool MatrixClientLoginPassword( MatrixClient * client, @@ -163,6 +223,12 @@ MatrixClientShareMegolmOutSession( const char * deviceId, MatrixMegolmOutSession * session); +bool +MatrixClientShareMegolmOutSessionTest( + MatrixClient * client, + const char * deviceId, + MatrixMegolmOutSession * session); + bool MatrixClientGetMegolmOutSession( MatrixClient * client, @@ -219,6 +285,10 @@ bool MatrixHttpInit( MatrixClient * client); +bool +MatrixHttpConnect( + MatrixClient * client); + bool MatrixHttpDeinit( MatrixClient * client);