ZaStoGram_desktop/Telegram/SourceFiles/e2e_cloud/mls/td_e2e_openmls.h
2026-08-01 07:51:49 +03:00

163 lines
4.3 KiB
C

/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#pragma once
#include <stddef.h>
#include <stdint.h>
#define TD_E2E_OPENMLS_ABI_VERSION 0x00010006u
#define TD_E2E_OPENMLS_STATUS_OK 0u
#define TD_E2E_OPENMLS_STATUS_INVALID_ARGUMENT 1u
#define TD_E2E_OPENMLS_STATUS_INVALID_STATE 2u
#define TD_E2E_OPENMLS_STATUS_CODEC_ERROR 3u
#define TD_E2E_OPENMLS_STATUS_CRYPTO_ERROR 4u
#define TD_E2E_OPENMLS_STATUS_UNSUPPORTED 5u
#define TD_E2E_OPENMLS_STATUS_PANIC 255u
#define TD_E2E_OPENMLS_CONTENT_NONE 0u
#define TD_E2E_OPENMLS_CONTENT_APPLICATION 1u
#define TD_E2E_OPENMLS_CONTENT_PROPOSAL 2u
#define TD_E2E_OPENMLS_CONTENT_COMMIT 3u
#define TD_E2E_OPENMLS_NON_MEMBER_SENDER UINT32_MAX
#ifdef __cplusplus
extern "C" {
#endif
typedef struct TdE2EOpenMlsBytes {
const uint8_t *data;
size_t size;
} TdE2EOpenMlsBytes;
typedef struct TdE2EOpenMlsBuffer {
uint8_t *data;
size_t size;
} TdE2EOpenMlsBuffer;
typedef struct TdE2EOpenMlsStateResult {
uint32_t status;
uint64_t epoch;
TdE2EOpenMlsBuffer state;
TdE2EOpenMlsBuffer roster;
} TdE2EOpenMlsStateResult;
typedef struct TdE2EOpenMlsKeyPackageResult {
uint32_t status;
TdE2EOpenMlsBuffer state;
TdE2EOpenMlsBuffer key_package;
} TdE2EOpenMlsKeyPackageResult;
typedef struct TdE2EOpenMlsCommitResult {
uint32_t status;
uint64_t epoch;
TdE2EOpenMlsBuffer state;
TdE2EOpenMlsBuffer commit;
TdE2EOpenMlsBuffer welcome;
TdE2EOpenMlsBuffer roster;
} TdE2EOpenMlsCommitResult;
typedef struct TdE2EOpenMlsSealResult {
uint32_t status;
uint64_t epoch;
TdE2EOpenMlsBuffer state;
TdE2EOpenMlsBuffer message;
} TdE2EOpenMlsSealResult;
typedef struct TdE2EOpenMlsProcessResult {
uint32_t status;
uint32_t kind;
uint32_t sender_index;
uint64_t epoch;
TdE2EOpenMlsBuffer state;
TdE2EOpenMlsBuffer plaintext;
TdE2EOpenMlsBuffer authenticated_data;
TdE2EOpenMlsBuffer sender_credential;
TdE2EOpenMlsBuffer roster;
} TdE2EOpenMlsProcessResult;
typedef struct TdE2EHpkeSealResult {
uint32_t status;
TdE2EOpenMlsBuffer encapsulated_key;
TdE2EOpenMlsBuffer ciphertext;
} TdE2EHpkeSealResult;
typedef struct TdE2EHpkeOpenResult {
uint32_t status;
TdE2EOpenMlsBuffer plaintext;
} TdE2EHpkeOpenResult;
uint32_t td_e2e_openmls_abi_version(void);
void td_e2e_openmls_buffer_free(TdE2EOpenMlsBuffer buffer);
TdE2EOpenMlsStateResult td_e2e_openmls_create_group(
TdE2EOpenMlsBytes identity,
TdE2EOpenMlsBytes group_id);
TdE2EOpenMlsStateResult td_e2e_openmls_inspect_group(
TdE2EOpenMlsBytes state);
TdE2EOpenMlsKeyPackageResult td_e2e_openmls_create_key_package(
TdE2EOpenMlsBytes identity,
TdE2EOpenMlsBytes expected_group_id);
uint32_t td_e2e_openmls_inspect_key_package_state(
TdE2EOpenMlsBytes state);
TdE2EOpenMlsCommitResult td_e2e_openmls_add_member(
TdE2EOpenMlsBytes state,
TdE2EOpenMlsBytes key_package,
TdE2EOpenMlsBytes authenticated_data);
TdE2EOpenMlsCommitResult td_e2e_openmls_update_group(
TdE2EOpenMlsBytes state,
TdE2EOpenMlsBytes authenticated_data);
TdE2EOpenMlsCommitResult td_e2e_openmls_remove_member(
TdE2EOpenMlsBytes state,
uint32_t leaf_index,
TdE2EOpenMlsBytes authenticated_data);
TdE2EOpenMlsCommitResult td_e2e_openmls_remove_members(
TdE2EOpenMlsBytes state,
TdE2EOpenMlsBytes leaf_indices_be,
TdE2EOpenMlsBytes authenticated_data);
TdE2EOpenMlsCommitResult td_e2e_openmls_recover_fork(
TdE2EOpenMlsBytes state,
TdE2EOpenMlsBytes own_partition_leaf_indices_be,
TdE2EOpenMlsBytes replacement_key_packages,
TdE2EOpenMlsBytes authenticated_data);
TdE2EOpenMlsStateResult td_e2e_openmls_join(
TdE2EOpenMlsBytes state,
TdE2EOpenMlsBytes welcome);
TdE2EOpenMlsSealResult td_e2e_openmls_seal(
TdE2EOpenMlsBytes state,
TdE2EOpenMlsBytes authenticated_data,
TdE2EOpenMlsBytes plaintext);
TdE2EOpenMlsProcessResult td_e2e_openmls_process(
TdE2EOpenMlsBytes state,
TdE2EOpenMlsBytes message);
TdE2EHpkeSealResult td_e2e_hpke_seal(
TdE2EOpenMlsBytes recipient_public_key,
TdE2EOpenMlsBytes info,
TdE2EOpenMlsBytes authenticated_data,
TdE2EOpenMlsBytes plaintext);
TdE2EHpkeOpenResult td_e2e_hpke_open(
TdE2EOpenMlsBytes recipient_private_key,
TdE2EOpenMlsBytes encapsulated_key,
TdE2EOpenMlsBytes info,
TdE2EOpenMlsBytes authenticated_data,
TdE2EOpenMlsBytes ciphertext);
#ifdef __cplusplus
}
#endif