0
0
mirror of https://github.com/signalapp/libsignal.git synced 2024-09-20 20:03:07 +02:00
libsignal/signal_ffi.h
2020-10-01 12:47:30 -07:00

628 lines
32 KiB
C

/*
Copyright (C) 2020 Signal Messenger, LLC.
All rights reserved.
SPDX-License-Identifier: GPL-3.0-only
*/
#ifndef SIGNAL_FFI_H_
#define SIGNAL_FFI_H_
/* This file was automatically generated by cbindgen */
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
typedef enum {
SIGNAL_ERROR_CODE_UNKNOWN_ERROR = 1,
SIGNAL_ERROR_CODE_INVALID_STATE = 2,
SIGNAL_ERROR_CODE_INTERNAL_ERROR = 3,
SIGNAL_ERROR_CODE_NULL_PARAMETER = 4,
SIGNAL_ERROR_CODE_INVALID_ARGUMENT = 5,
SIGNAL_ERROR_CODE_INVALID_TYPE = 6,
SIGNAL_ERROR_CODE_INVALID_UTF8_STRING = 7,
SIGNAL_ERROR_CODE_INSUFFICIENT_OUTPUT_SIZE = 8,
SIGNAL_ERROR_CODE_PROTOBUF_ERROR = 10,
SIGNAL_ERROR_CODE_INVALID_CIPHERTEXT = 20,
SIGNAL_ERROR_CODE_LEGACY_CIPHERTEXT_VERSION = 21,
SIGNAL_ERROR_CODE_UNKNOWN_CIPHERTEXT_VERSION = 22,
SIGNAL_ERROR_CODE_UNRECOGNIZED_MESSAGE_VERSION = 23,
SIGNAL_ERROR_CODE_INVALID_MESSAGE = 30,
SIGNAL_ERROR_CODE_INVALID_KEY = 40,
SIGNAL_ERROR_CODE_INVALID_SIGNATURE = 41,
SIGNAL_ERROR_CODE_FINGERPRINT_IDENTIFIER_MISMATCH = 50,
SIGNAL_ERROR_CODE_FINGERPRINT_VERSION_MISMATCH = 51,
SIGNAL_ERROR_CODE_UNTRUSTED_IDENTITY = 60,
SIGNAL_ERROR_CODE_INVALID_KEY_IDENTIFIER = 70,
SIGNAL_ERROR_CODE_SESSION_NOT_FOUND = 80,
SIGNAL_ERROR_CODE_DUPLICATED_MESSAGE = 90,
SIGNAL_ERROR_CODE_CALLBACK_ERROR = 100,
} SignalErrorCode;
typedef struct SignalFingerprint SignalFingerprint;
typedef struct SignalPreKeyBundle SignalPreKeyBundle;
typedef struct SignalPreKeyRecord SignalPreKeyRecord;
typedef struct SignalPreKeySignalMessage SignalPreKeySignalMessage;
typedef struct SignalPrivateKey SignalPrivateKey;
typedef struct SignalProtocolAddress SignalProtocolAddress;
typedef struct SignalPublicKey SignalPublicKey;
typedef struct SignalSenderKeyDistributionMessage SignalSenderKeyDistributionMessage;
typedef struct SignalSenderKeyMessage SignalSenderKeyMessage;
typedef struct SignalSenderKeyName SignalSenderKeyName;
typedef struct SignalSenderKeyRecord SignalSenderKeyRecord;
typedef struct SignalSessionRecord SignalSessionRecord;
typedef struct SignalFfiError SignalFfiError;
typedef struct SignalMessage SignalMessage;
typedef struct SignalSignedPreKeyRecord SignalSignedPreKeyRecord;
typedef int (*SignalLoadSession)(void*, SignalSessionRecord**, const SignalProtocolAddress*, void*);
typedef int (*SignalStoreSession)(void*, const SignalProtocolAddress*, const SignalSessionRecord*, void*);
typedef struct {
void *ctx;
SignalLoadSession load_session;
SignalStoreSession store_session;
} SignalSessionStore;
typedef int (*SignalGetIdentityKeyPair)(void*, SignalPrivateKey**, void*);
typedef int (*SignalGetLocalRegistrationId)(void*, uint32_t*, void*);
typedef int (*SignalSaveIdentityKey)(void*, const SignalProtocolAddress*, const SignalPublicKey*, void*);
typedef int (*SignalGetIdentityKey)(void*, SignalPublicKey**, const SignalProtocolAddress*, void*);
typedef int (*SignalIsTrustedIdentity)(void*, const SignalProtocolAddress*, const SignalPublicKey*, unsigned int, void*);
typedef struct {
void *ctx;
SignalGetIdentityKeyPair get_identity_key_pair;
SignalGetLocalRegistrationId get_local_registration_id;
SignalSaveIdentityKey save_identity;
SignalGetIdentityKey get_identity;
SignalIsTrustedIdentity is_trusted_identity;
} SignalIdentityKeyStore;
typedef int (*SignalLoadPreKey)(void*, SignalPreKeyRecord**, uint32_t, void*);
typedef int (*SignalStorePreKey)(void*, uint32_t, const SignalPreKeyRecord*, void*);
typedef int (*SignalRemovePreKey)(void*, uint32_t, void*);
typedef struct {
void *ctx;
SignalLoadPreKey load_pre_key;
SignalStorePreKey store_pre_key;
SignalRemovePreKey remove_pre_key;
} SignalPreKeyStore;
typedef int (*SignalLoadSignedPreKey)(void*, SignalSignedPreKeyRecord**, uint32_t, void*);
typedef int (*SignalStoreSignedPreKey)(void*, uint32_t, const SignalSignedPreKeyRecord*, void*);
typedef struct {
void *ctx;
SignalLoadSignedPreKey load_signed_pre_key;
SignalStoreSignedPreKey store_signed_pre_key;
} SignalSignedPreKeyStore;
typedef int (*SignalLoadSenderKey)(void*, SignalSenderKeyRecord**, const SignalSenderKeyName*, void*);
typedef int (*SignalStoreSenderKey)(void*, const SignalSenderKeyName*, const SignalSenderKeyRecord*, void*);
typedef struct {
void *ctx;
SignalLoadSenderKey load_sender_key;
SignalStoreSenderKey store_sender_key;
} SignalSenderKeyStore;
void signal_print_ptr(const void *p);
void signal_free_string(const char *buf);
void signal_free_buffer(const unsigned char *buf, size_t buf_len);
SignalFfiError *signal_error_get_message(const SignalFfiError *err, const char **out);
uint32_t signal_error_get_type(const SignalFfiError *err);
void signal_error_free(SignalFfiError *err);
SignalFfiError *signal_hkdf_derive(unsigned char *output,
size_t output_length,
int version,
const unsigned char *input_key_material,
size_t input_key_material_len,
const unsigned char *salt,
size_t salt_len,
const unsigned char *info,
size_t info_len);
SignalFfiError *signal_address_new(SignalProtocolAddress **address,
const char *name,
unsigned int device_id);
SignalFfiError *signal_address_get_name(const SignalProtocolAddress *obj, const char **out);
SignalFfiError *signal_address_get_device_id(const SignalProtocolAddress *obj, unsigned int *out);
SignalFfiError *signal_address_destroy(SignalProtocolAddress *p);
SignalFfiError *signal_address_clone(SignalProtocolAddress **new_obj,
const SignalProtocolAddress *obj);
SignalFfiError *signal_publickey_deserialize(SignalPublicKey **p,
const unsigned char *data,
size_t data_len);
SignalFfiError *signal_publickey_serialize(const SignalPublicKey *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_publickey_compare(int32_t *result,
const SignalPublicKey *key1,
const SignalPublicKey *key2);
SignalFfiError *signal_publickey_verify(const SignalPublicKey *key,
unsigned char *result,
const unsigned char *message,
size_t message_len,
const unsigned char *signature,
size_t signature_len);
SignalFfiError *signal_publickey_destroy(SignalPublicKey *p);
SignalFfiError *signal_publickey_clone(SignalPublicKey **new_obj, const SignalPublicKey *obj);
SignalFfiError *signal_privatekey_deserialize(SignalPrivateKey **p,
const unsigned char *data,
size_t data_len);
SignalFfiError *signal_privatekey_serialize(const SignalPrivateKey *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_privatekey_generate(SignalPrivateKey **key);
SignalFfiError *signal_privatekey_get_public_key(SignalPublicKey **new_obj,
const SignalPrivateKey *obj);
SignalFfiError *signal_privatekey_sign(const unsigned char **signature,
size_t *signature_len,
const SignalPrivateKey *key,
const unsigned char *message,
size_t message_len);
SignalFfiError *signal_privatekey_agree(const unsigned char **shared_secret,
size_t *shared_secret_len,
const SignalPrivateKey *private_key,
const SignalPublicKey *public_key);
SignalFfiError *signal_privatekey_destroy(SignalPrivateKey *p);
SignalFfiError *signal_privatekey_clone(SignalPrivateKey **new_obj, const SignalPrivateKey *obj);
SignalFfiError *signal_identitykeypair_serialize(const unsigned char **output,
size_t *output_len,
const SignalPrivateKey *private_key,
const SignalPublicKey *public_key);
SignalFfiError *signal_identitykeypair_deserialize(SignalPrivateKey **private_key,
SignalPublicKey **public_key,
const unsigned char *input,
size_t input_len);
SignalFfiError *signal_session_record_deserialize(SignalSessionRecord **p,
const unsigned char *data,
size_t data_len);
SignalFfiError *signal_session_record_serialize(const SignalSessionRecord *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_session_record_destroy(SignalSessionRecord *p);
SignalFfiError *signal_session_record_clone(SignalSessionRecord **new_obj,
const SignalSessionRecord *obj);
SignalFfiError *signal_fingerprint_format(const char **fprint,
const unsigned char *local,
size_t local_len,
const unsigned char *remote,
size_t remote_len);
SignalFfiError *signal_fingerprint_new(SignalFingerprint **obj,
unsigned int iterations,
unsigned int version,
const unsigned char *local_identifier,
size_t local_identifier_len,
const SignalPublicKey *local_key,
const unsigned char *remote_identifier,
size_t remote_identifier_len,
const SignalPublicKey *remote_key);
SignalFfiError *signal_fingerprint_destroy(SignalFingerprint *p);
SignalFfiError *signal_fingerprint_clone(SignalFingerprint **new_obj, const SignalFingerprint *obj);
SignalFfiError *signal_fingerprint_display_string(const SignalFingerprint *obj, const char **out);
SignalFfiError *signal_fingerprint_scannable_encoding(const SignalFingerprint *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_fingerprint_compare(unsigned char *result,
const unsigned char *fprint1,
size_t fprint1_len,
const unsigned char *fprint2,
size_t fprint2_len);
SignalFfiError *signal_message_deserialize(SignalMessage **p,
const unsigned char *data,
size_t data_len);
SignalFfiError *signal_message_new(SignalMessage **obj,
unsigned char message_version,
const unsigned char *mac_key,
size_t mac_key_len,
const SignalPublicKey *sender_ratchet_key,
unsigned int counter,
unsigned int previous_counter,
const unsigned char *ciphertext,
size_t ciphertext_len,
const SignalPublicKey *sender_identity_key,
const SignalPublicKey *receiver_identity_key);
SignalFfiError *signal_message_destroy(SignalMessage *p);
SignalFfiError *signal_message_clone(SignalMessage **new_obj, const SignalMessage *obj);
SignalFfiError *signal_message_get_sender_ratchet_key(SignalPublicKey **new_obj,
const SignalMessage *obj);
SignalFfiError *signal_message_get_body(const SignalMessage *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_message_get_serialized(const SignalMessage *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_message_get_message_version(const SignalMessage *obj, unsigned int *out);
SignalFfiError *signal_message_get_counter(const SignalMessage *obj, unsigned int *out);
SignalFfiError *signal_message_verify_mac(unsigned int *result,
const SignalMessage *handle,
const SignalPublicKey *sender_identity_key,
const SignalPublicKey *receiver_identity_key,
const unsigned char *mac_key,
size_t mac_key_len);
SignalFfiError *signal_pre_key_signal_message_deserialize(SignalPreKeySignalMessage **p,
const unsigned char *data,
size_t data_len);
SignalFfiError *signal_pre_key_signal_message_new(SignalPreKeySignalMessage **obj,
unsigned char message_version,
unsigned int registration_id,
const unsigned int *pre_key_id,
unsigned int signed_pre_key_id,
const SignalPublicKey *base_key,
const SignalPublicKey *identity_key,
const SignalMessage *signal_message);
SignalFfiError *signal_pre_key_signal_message_destroy(SignalPreKeySignalMessage *p);
SignalFfiError *signal_pre_key_signal_message_clone(SignalPreKeySignalMessage **new_obj,
const SignalPreKeySignalMessage *obj);
SignalFfiError *signal_pre_key_signal_message_get_version(const SignalPreKeySignalMessage *obj,
unsigned int *out);
SignalFfiError *signal_pre_key_signal_message_get_registration_id(const SignalPreKeySignalMessage *obj,
unsigned int *out);
SignalFfiError *signal_pre_key_signal_message_get_pre_key_id(const SignalPreKeySignalMessage *obj,
unsigned int *out);
SignalFfiError *signal_pre_key_signal_message_get_signed_pre_key_id(const SignalPreKeySignalMessage *obj,
unsigned int *out);
SignalFfiError *signal_pre_key_signal_message_get_base_key(SignalPublicKey **new_obj,
const SignalPreKeySignalMessage *obj);
SignalFfiError *signal_pre_key_signal_message_get_identity_key(SignalPublicKey **new_obj,
const SignalPreKeySignalMessage *obj);
SignalFfiError *signal_pre_key_signal_message_get_signal_message(SignalMessage **new_obj,
const SignalPreKeySignalMessage *obj);
SignalFfiError *signal_pre_key_signal_message_serialize(const SignalPreKeySignalMessage *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_sender_key_message_new(SignalSenderKeyMessage **obj,
unsigned int key_id,
unsigned int iteration,
const unsigned char *ciphertext,
size_t ciphertext_len,
const SignalPrivateKey *pk);
SignalFfiError *signal_sender_key_message_deserialize(SignalSenderKeyMessage **p,
const unsigned char *data,
size_t data_len);
SignalFfiError *signal_sender_key_message_destroy(SignalSenderKeyMessage *p);
SignalFfiError *signal_sender_key_message_clone(SignalSenderKeyMessage **new_obj,
const SignalSenderKeyMessage *obj);
SignalFfiError *signal_sender_key_message_get_key_id(const SignalSenderKeyMessage *obj,
unsigned int *out);
SignalFfiError *signal_sender_key_message_get_iteration(const SignalSenderKeyMessage *obj,
unsigned int *out);
SignalFfiError *signal_sender_key_message_get_cipher_text(const SignalSenderKeyMessage *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_sender_key_message_serialize(const SignalSenderKeyMessage *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_sender_key_message_verify_signature(unsigned int *result,
const SignalSenderKeyMessage *skm,
const SignalPublicKey *pubkey);
SignalFfiError *signal_sender_key_distribution_message_new(SignalSenderKeyDistributionMessage **obj,
unsigned int key_id,
unsigned int iteration,
const unsigned char *chainkey,
size_t chainkey_len,
const SignalPublicKey *pk);
SignalFfiError *signal_sender_key_distribution_message_deserialize(SignalSenderKeyDistributionMessage **p,
const unsigned char *data,
size_t data_len);
SignalFfiError *signal_sender_key_distribution_message_destroy(SignalSenderKeyDistributionMessage *p);
SignalFfiError *signal_sender_key_distribution_message_clone(SignalSenderKeyDistributionMessage **new_obj,
const SignalSenderKeyDistributionMessage *obj);
SignalFfiError *signal_sender_key_distribution_message_get_id(const SignalSenderKeyDistributionMessage *obj,
unsigned int *out);
SignalFfiError *signal_sender_key_distribution_message_get_iteration(const SignalSenderKeyDistributionMessage *obj,
unsigned int *out);
SignalFfiError *signal_sender_key_distribution_message_get_chain_key(const SignalSenderKeyDistributionMessage *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_sender_key_distribution_message_get_signature_key(SignalPublicKey **new_obj,
const SignalSenderKeyDistributionMessage *obj);
SignalFfiError *signal_sender_key_distribution_message_serialize(const SignalSenderKeyDistributionMessage *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_pre_key_bundle_new(SignalPreKeyBundle **obj,
unsigned int registration_id,
unsigned int device_id,
const unsigned int *prekey_id,
const SignalPublicKey *prekey,
unsigned int signed_prekey_id,
const SignalPublicKey *signed_prekey,
const unsigned char *signed_prekey_signature,
size_t signed_prekey_signature_len,
const SignalPublicKey *identity_key);
SignalFfiError *signal_pre_key_bundle_destroy(SignalPreKeyBundle *p);
SignalFfiError *signal_pre_key_bundle_clone(SignalPreKeyBundle **new_obj,
const SignalPreKeyBundle *obj);
SignalFfiError *signal_pre_key_bundle_get_registration_id(const SignalPreKeyBundle *obj,
unsigned int *out);
SignalFfiError *signal_pre_key_bundle_get_device_id(const SignalPreKeyBundle *obj,
unsigned int *out);
SignalFfiError *signal_pre_key_bundle_get_signed_pre_key_id(const SignalPreKeyBundle *obj,
unsigned int *out);
SignalFfiError *signal_pre_key_bundle_get_pre_key_id(const SignalPreKeyBundle *obj,
unsigned int *out);
SignalFfiError *signal_pre_key_bundle_get_pre_key_public(SignalPublicKey **new_obj,
const SignalPreKeyBundle *obj);
SignalFfiError *signal_pre_key_bundle_get_signed_pre_key_public(SignalPublicKey **new_obj,
const SignalPreKeyBundle *obj);
SignalFfiError *signal_pre_key_bundle_get_identity_key(SignalPublicKey **new_obj,
const SignalPreKeyBundle *obj);
SignalFfiError *signal_pre_key_bundle_get_signed_pre_key_signature(const SignalPreKeyBundle *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_signed_pre_key_record_new(SignalSignedPreKeyRecord **obj,
unsigned int id,
unsigned long long timestamp,
const SignalPublicKey *pub_key,
const SignalPrivateKey *priv_key,
const unsigned char *signature,
size_t signature_len);
SignalFfiError *signal_signed_pre_key_record_deserialize(SignalSignedPreKeyRecord **p,
const unsigned char *data,
size_t data_len);
SignalFfiError *signal_signed_pre_key_record_get_id(const SignalSignedPreKeyRecord *obj,
unsigned int *out);
SignalFfiError *signal_signed_pre_key_record_get_timestamp(const SignalSignedPreKeyRecord *obj,
unsigned long long *out);
SignalFfiError *signal_signed_pre_key_record_get_public_key(SignalPublicKey **new_obj,
const SignalSignedPreKeyRecord *obj);
SignalFfiError *signal_signed_pre_key_record_get_private_key(SignalPrivateKey **new_obj,
const SignalSignedPreKeyRecord *obj);
SignalFfiError *signal_signed_pre_key_record_get_signature(const SignalSignedPreKeyRecord *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_signed_pre_key_record_serialize(const SignalSignedPreKeyRecord *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_signed_pre_key_record_destroy(SignalSignedPreKeyRecord *p);
SignalFfiError *signal_signed_pre_key_record_clone(SignalSignedPreKeyRecord **new_obj,
const SignalSignedPreKeyRecord *obj);
SignalFfiError *signal_pre_key_record_new(SignalPreKeyRecord **obj,
unsigned int id,
const SignalPublicKey *pub_key,
const SignalPrivateKey *priv_key);
SignalFfiError *signal_pre_key_record_deserialize(SignalPreKeyRecord **p,
const unsigned char *data,
size_t data_len);
SignalFfiError *signal_pre_key_record_get_id(const SignalPreKeyRecord *obj, unsigned int *out);
SignalFfiError *signal_pre_key_record_get_public_key(SignalPublicKey **new_obj,
const SignalPreKeyRecord *obj);
SignalFfiError *signal_pre_key_record_get_private_key(SignalPrivateKey **new_obj,
const SignalPreKeyRecord *obj);
SignalFfiError *signal_pre_key_record_serialize(const SignalPreKeyRecord *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_pre_key_record_destroy(SignalPreKeyRecord *p);
SignalFfiError *signal_pre_key_record_clone(SignalPreKeyRecord **new_obj,
const SignalPreKeyRecord *obj);
SignalFfiError *signal_sender_key_name_new(SignalSenderKeyName **obj,
const char *group_id,
const char *sender_name,
unsigned int sender_device_id);
SignalFfiError *signal_sender_key_name_destroy(SignalSenderKeyName *p);
SignalFfiError *signal_sender_key_name_clone(SignalSenderKeyName **new_obj,
const SignalSenderKeyName *obj);
SignalFfiError *signal_sender_key_name_get_group_id(const SignalSenderKeyName *obj,
const char **out);
SignalFfiError *signal_sender_key_name_get_sender_name(const SignalSenderKeyName *obj,
const char **out);
SignalFfiError *signal_sender_key_name_get_sender_device_id(const SignalSenderKeyName *obj,
unsigned int *out);
SignalFfiError *signal_sender_key_record_new_fresh(SignalSenderKeyRecord **obj);
SignalFfiError *signal_sender_key_record_clone(SignalSenderKeyRecord **new_obj,
const SignalSenderKeyRecord *obj);
SignalFfiError *signal_sender_key_record_destroy(SignalSenderKeyRecord *p);
SignalFfiError *signal_sender_key_record_deserialize(SignalSenderKeyRecord **p,
const unsigned char *data,
size_t data_len);
SignalFfiError *signal_sender_key_record_serialize(const SignalSenderKeyRecord *obj,
const unsigned char **out,
size_t *out_len);
SignalFfiError *signal_process_prekey_bundle(SignalPreKeyBundle *bundle,
const SignalProtocolAddress *protocol_address,
SignalSessionStore *session_store,
SignalIdentityKeyStore *identity_key_store,
void *ctx);
SignalFfiError *signal_encrypt_message(const unsigned char **result,
size_t *result_len,
const unsigned char *ptext,
size_t ptext_len,
const SignalProtocolAddress *protocol_address,
SignalSessionStore *session_store,
SignalIdentityKeyStore *identity_key_store,
void *ctx);
SignalFfiError *signal_decrypt_message(const unsigned char **result,
size_t *result_len,
const SignalMessage *message,
const SignalProtocolAddress *protocol_address,
SignalSessionStore *session_store,
SignalIdentityKeyStore *identity_key_store,
void *ctx);
SignalFfiError *signal_decrypt_pre_key_message(const unsigned char **result,
size_t *result_len,
const SignalPreKeySignalMessage *message,
const SignalProtocolAddress *protocol_address,
SignalSessionStore *session_store,
SignalIdentityKeyStore *identity_key_store,
SignalPreKeyStore *prekey_store,
SignalSignedPreKeyStore *signed_prekey_store,
void *ctx);
SignalFfiError *signal_create_sender_key_distribution_message(SignalSenderKeyDistributionMessage **obj,
const SignalSenderKeyName *sender_key_name,
SignalSenderKeyStore *store,
void *ctx);
SignalFfiError *signal_process_sender_key_distribution_message(const SignalSenderKeyName *sender_key_name,
const SignalSenderKeyDistributionMessage *sender_key_distribution_message,
SignalSenderKeyStore *store,
void *ctx);
SignalFfiError *signal_group_encrypt_message(const unsigned char **out,
size_t *out_len,
const SignalSenderKeyName *sender_key_name,
const unsigned char *message,
size_t message_len,
SignalSenderKeyStore *store,
void *ctx);
SignalFfiError *signal_group_decrypt_message(const unsigned char **out,
size_t *out_len,
const SignalSenderKeyName *sender_key_name,
const unsigned char *message,
size_t message_len,
SignalSenderKeyStore *store,
void *ctx);
#endif /* SIGNAL_FFI_H_ */