X-Git-Url: https://gitweb.ps.run/matrix_esp_thesis/blobdiff_plain/9826729ea9eb492b0b25c52b934d9f1283bb70dd..464bfb1912d0806143386f61c33dd45fbafc38e8:/src/matrix.h diff --git a/src/matrix.h b/src/matrix.h index 60561aa..91ed208 100644 --- a/src/matrix.h +++ b/src/matrix.h @@ -21,37 +21,57 @@ #define OLM_IDENTITY_KEYS_JSON_SIZE 128 #define DEVICE_KEY_SIZE 44 #define SIGNING_KEY_SIZE 44 +#define ONETIME_KEY_SIZE 44 #define KEY_SHARE_EVENT_LEN 1024 #define OLM_ACCOUNT_MEMORY_SIZE 7528 -#define OLM_ACCOUNT_RANDOM_SIZE 32+32 +#define OLM_ACCOUNT_RANDOM_SIZE (32+32) #define OLM_SESSION_MEMORY_SIZE 3352 #define OLM_ENCRYPT_RANDOM_SIZE 32 +#define OLM_OUTBOUND_SESSION_RANDOM_SIZE (32*2) + +#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 -void -Randomize(uint8_t * random, int randomLen); - -bool -JsonEscape( - 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; @@ -61,9 +81,12 @@ typedef struct MatrixOlmSession { } MatrixOlmSession; bool -MatrixOlmSessionInit( +MatrixOlmSessionTo( MatrixOlmSession * session, - const char * deviceId); + OlmAccount * olmAccount, + const char * deviceId, + const char * deviceKey, + const char * deviceOnetimeKey); bool MatrixOlmSessionEncrypt( @@ -72,6 +95,7 @@ MatrixOlmSessionEncrypt( char * outBuffer, int outBufferCap); +// Matrix Megolm Session typedef struct MatrixMegolmInSession { OlmInboundGroupSession * session; @@ -99,10 +123,10 @@ MatrixMegolmOutSessionEncrypt( char * outBuffer, int outBufferCap); +// Matrix Client typedef struct MatrixClient { - OlmAccount * olmAccount; - char olmAccountMemory[OLM_ACCOUNT_MEMORY_SIZE]; + MatrixOlmAccount olmAccount; MatrixMegolmInSession megolmInSessions[NUM_MEGOLM_SESSIONS]; int numMegolmInSessions; @@ -132,6 +156,16 @@ MatrixClientInit( MatrixClient * client, const char * server); +bool +MatrixClientSave( + MatrixClient * client, + const char * filename); + +bool +MatrixClientLoad( + MatrixClient * client, + const char * filename); + bool MatrixClientSetAccessToken( MatrixClient * client, @@ -142,6 +176,31 @@ 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 +MatrixClientClaimOnetimeKey( + MatrixClient * client, + const char * userId, + const char * deviceId, + char * outOnetimeKey, int outOnetimeKeyCap); + bool MatrixClientLoginPassword( MatrixClient * client, @@ -166,10 +225,17 @@ MatrixClientSendEventEncrypted( bool MatrixClientSync( MatrixClient * client, - char * outSyncBuffer, int outSyncCap); + char * outSync, int outSyncCap); bool MatrixClientShareMegolmOutSession( + MatrixClient * client, + const char * userId, + const char * deviceId, + MatrixMegolmOutSession * session); + +bool +MatrixClientShareMegolmOutSessionTest( MatrixClient * client, const char * deviceId, MatrixMegolmOutSession * session); @@ -189,6 +255,7 @@ MatrixClientSetMegolmOutSession( bool MatrixClientGetOlmSession( MatrixClient * client, + const char * userId, const char * deviceId, MatrixOlmSession ** outSession); @@ -226,10 +293,15 @@ MatrixClientRequestDeviceKeys( + bool MatrixHttpInit( MatrixClient * client); +bool +MatrixHttpConnect( + MatrixClient * client); + bool MatrixHttpDeinit( MatrixClient * client); @@ -257,4 +329,19 @@ MatrixHttpPut( char * outResponseBuffer, int outResponseCap, bool authenticated); +// util + +void +Randomize(uint8_t * random, int randomLen); + +bool +JsonEscape( + const char * sIn, int sInLen, + char * sOut, int sOutCap); + +bool JsonSign( + MatrixClient * client, + const char * sIn, int sInLen, + char * sOut, int sOutCap); + #endif