#pragma once
#include <stdarg.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
typedef size_t ScanHandle;
typedef size_t StoreHandle;
typedef size_t SessionHandle;
enum ErrorCode
#ifdef __cplusplus
: int64_t
#endif {
Success = 0,
Backend = 1,
Busy = 2,
Duplicate = 3,
Encryption = 4,
Input = 5,
NotFound = 6,
Unexpected = 7,
Unsupported = 8,
Custom = 100,
};
#ifndef __cplusplus
typedef int64_t ErrorCode;
#endif
typedef struct FfiResultList_Entry FfiResultList_Entry;
typedef struct FfiResultList_KeyEntry FfiResultList_KeyEntry;
typedef struct FfiResultList_String FfiResultList_String;
typedef struct LocalKey LocalKey;
typedef struct Option_EnabledCallback Option_EnabledCallback;
typedef struct Option_FlushCallback Option_FlushCallback;
typedef struct ByteBuffer {
int64_t len;
uint8_t *data;
} ByteBuffer;
typedef struct SecretBuffer {
int64_t len;
uint8_t *data;
} SecretBuffer;
typedef struct FfiResultList_Entry FfiEntryList;
typedef struct ArcHandle_FfiEntryList {
const FfiEntryList *_0;
} ArcHandle_FfiEntryList;
typedef struct ArcHandle_FfiEntryList EntryListHandle;
typedef struct ArcHandle_LocalKey {
const struct LocalKey *_0;
} ArcHandle_LocalKey;
typedef struct ArcHandle_LocalKey LocalKeyHandle;
typedef struct EncryptedBuffer {
struct SecretBuffer buffer;
int64_t tag_pos;
int64_t nonce_pos;
} EncryptedBuffer;
typedef struct AeadParams {
int32_t nonce_length;
int32_t tag_length;
} AeadParams;
typedef const char *FfiStr;
typedef struct FfiResultList_KeyEntry FfiKeyEntryList;
typedef struct ArcHandle_FfiKeyEntryList {
const FfiKeyEntryList *_0;
} ArcHandle_FfiKeyEntryList;
typedef struct ArcHandle_FfiKeyEntryList KeyEntryListHandle;
typedef struct FfiResultList_String FfiStringList;
typedef struct ArcHandle_FfiStringList {
const FfiStringList *_0;
} ArcHandle_FfiStringList;
typedef struct ArcHandle_FfiStringList StringListHandle;
typedef int64_t CallbackId;
typedef void (*LogCallback)(const void *context,
int32_t level,
const char *target,
const char *message,
const char *module_path,
const char *file,
int32_t line);
#ifdef __cplusplus
extern "C" {
#endif
ErrorCode askar_argon2_derive_password(int8_t parameters,
struct ByteBuffer password,
struct ByteBuffer salt,
struct SecretBuffer *out);
void askar_buffer_free(struct SecretBuffer buffer);
void askar_clear_custom_logger(void);
ErrorCode askar_entry_list_count(EntryListHandle handle, int32_t *count);
void askar_entry_list_free(EntryListHandle handle);
ErrorCode askar_entry_list_get_category(EntryListHandle handle,
int32_t index,
const char **category);
ErrorCode askar_entry_list_get_name(EntryListHandle handle, int32_t index, const char **name);
ErrorCode askar_entry_list_get_tags(EntryListHandle handle, int32_t index, const char **tags);
ErrorCode askar_entry_list_get_value(EntryListHandle handle,
int32_t index,
struct SecretBuffer *value);
ErrorCode askar_get_current_error(const char **error_json_p);
ErrorCode askar_key_aead_decrypt(LocalKeyHandle handle,
struct ByteBuffer ciphertext,
struct ByteBuffer nonce,
struct ByteBuffer tag,
struct ByteBuffer aad,
struct SecretBuffer *out);
ErrorCode askar_key_aead_encrypt(LocalKeyHandle handle,
struct ByteBuffer message,
struct ByteBuffer nonce,
struct ByteBuffer aad,
struct EncryptedBuffer *out);
ErrorCode askar_key_aead_get_padding(LocalKeyHandle handle, int64_t msg_len, int32_t *out);
ErrorCode askar_key_aead_get_params(LocalKeyHandle handle, struct AeadParams *out);
ErrorCode askar_key_aead_random_nonce(LocalKeyHandle handle, struct SecretBuffer *out);
ErrorCode askar_key_convert(LocalKeyHandle handle, FfiStr alg, LocalKeyHandle *out);
ErrorCode askar_key_crypto_box(LocalKeyHandle recip_key,
LocalKeyHandle sender_key,
struct ByteBuffer message,
struct ByteBuffer nonce,
struct SecretBuffer *out);
ErrorCode askar_key_crypto_box_open(LocalKeyHandle recip_key,
LocalKeyHandle sender_key,
struct ByteBuffer message,
struct ByteBuffer nonce,
struct SecretBuffer *out);
ErrorCode askar_key_crypto_box_random_nonce(struct SecretBuffer *out);
ErrorCode askar_key_crypto_box_seal(LocalKeyHandle handle,
struct ByteBuffer message,
struct SecretBuffer *out);
ErrorCode askar_key_crypto_box_seal_open(LocalKeyHandle handle,
struct ByteBuffer ciphertext,
struct SecretBuffer *out);
ErrorCode askar_key_derive_ecdh_1pu(FfiStr alg,
LocalKeyHandle ephem_key,
LocalKeyHandle sender_key,
LocalKeyHandle recip_key,
struct ByteBuffer alg_id,
struct ByteBuffer apu,
struct ByteBuffer apv,
struct ByteBuffer cc_tag,
int8_t receive,
LocalKeyHandle *out);
ErrorCode askar_key_derive_ecdh_es(FfiStr alg,
LocalKeyHandle ephem_key,
LocalKeyHandle recip_key,
struct ByteBuffer alg_id,
struct ByteBuffer apu,
struct ByteBuffer apv,
int8_t receive,
LocalKeyHandle *out);
ErrorCode askar_key_entry_list_count(KeyEntryListHandle handle, int32_t *count);
void askar_key_entry_list_free(KeyEntryListHandle handle);
ErrorCode askar_key_entry_list_get_algorithm(KeyEntryListHandle handle,
int32_t index,
const char **alg);
ErrorCode askar_key_entry_list_get_metadata(KeyEntryListHandle handle,
int32_t index,
const char **metadata);
ErrorCode askar_key_entry_list_get_name(KeyEntryListHandle handle,
int32_t index,
const char **name);
ErrorCode askar_key_entry_list_get_tags(KeyEntryListHandle handle,
int32_t index,
const char **tags);
ErrorCode askar_key_entry_list_load_local(KeyEntryListHandle handle,
int32_t index,
LocalKeyHandle *out);
void askar_key_free(LocalKeyHandle handle);
ErrorCode askar_key_from_jwk(struct ByteBuffer jwk, LocalKeyHandle *out);
ErrorCode askar_key_from_key_exchange(FfiStr alg,
LocalKeyHandle sk_handle,
LocalKeyHandle pk_handle,
LocalKeyHandle *out);
ErrorCode askar_key_from_public_bytes(FfiStr alg, struct ByteBuffer public_, LocalKeyHandle *out);
ErrorCode askar_key_from_secret_bytes(FfiStr alg, struct ByteBuffer secret, LocalKeyHandle *out);
ErrorCode askar_key_from_seed(FfiStr alg,
struct ByteBuffer seed,
FfiStr method,
LocalKeyHandle *out);
ErrorCode askar_key_generate(FfiStr alg, FfiStr key_backend, int8_t ephemeral, LocalKeyHandle *out);
ErrorCode askar_key_get_algorithm(LocalKeyHandle handle, const char **out);
ErrorCode askar_key_get_ephemeral(LocalKeyHandle handle, int8_t *out);
ErrorCode askar_key_get_jwk_public(LocalKeyHandle handle, FfiStr alg, const char **out);
ErrorCode askar_key_get_jwk_secret(LocalKeyHandle handle, struct SecretBuffer *out);
ErrorCode askar_key_get_jwk_thumbprint(LocalKeyHandle handle, FfiStr alg, const char **out);
ErrorCode askar_key_get_public_bytes(LocalKeyHandle handle, struct SecretBuffer *out);
ErrorCode askar_key_get_secret_bytes(LocalKeyHandle handle, struct SecretBuffer *out);
ErrorCode askar_key_get_supported_backends(StringListHandle *out);
ErrorCode askar_key_sign_message(LocalKeyHandle handle,
struct ByteBuffer message,
FfiStr sig_type,
struct SecretBuffer *out);
ErrorCode askar_key_unwrap_key(LocalKeyHandle handle,
FfiStr alg,
struct ByteBuffer ciphertext,
struct ByteBuffer nonce,
struct ByteBuffer tag,
LocalKeyHandle *out);
ErrorCode askar_key_verify_signature(LocalKeyHandle handle,
struct ByteBuffer message,
struct ByteBuffer signature,
FfiStr sig_type,
int8_t *out);
ErrorCode askar_key_wrap_key(LocalKeyHandle handle,
LocalKeyHandle other,
struct ByteBuffer nonce,
struct EncryptedBuffer *out);
ErrorCode askar_migrate_indy_sdk(FfiStr spec_uri,
FfiStr wallet_name,
FfiStr wallet_key,
FfiStr kdf_level,
void (*cb)(CallbackId cb_id, ErrorCode err),
CallbackId cb_id);
ErrorCode askar_scan_free(ScanHandle handle);
ErrorCode askar_scan_next(ScanHandle handle, void (*cb)(CallbackId cb_id,
ErrorCode err,
EntryListHandle results), CallbackId cb_id);
ErrorCode askar_scan_start(StoreHandle handle,
FfiStr profile,
FfiStr category,
FfiStr tag_filter,
int64_t offset,
int64_t limit,
FfiStr order_by,
int8_t descending,
void (*cb)(CallbackId cb_id, ErrorCode err, ScanHandle handle),
CallbackId cb_id);
ErrorCode askar_session_close(SessionHandle handle,
int8_t commit,
void (*cb)(CallbackId cb_id, ErrorCode err),
CallbackId cb_id);
ErrorCode askar_session_count(SessionHandle handle,
FfiStr category,
FfiStr tag_filter,
void (*cb)(CallbackId cb_id, ErrorCode err, int64_t count),
CallbackId cb_id);
ErrorCode askar_session_fetch(SessionHandle handle,
FfiStr category,
FfiStr name,
int8_t for_update,
void (*cb)(CallbackId cb_id, ErrorCode err, EntryListHandle results),
CallbackId cb_id);
ErrorCode askar_session_fetch_all(SessionHandle handle,
FfiStr category,
FfiStr tag_filter,
int64_t limit,
FfiStr order_by,
int8_t descending,
int8_t for_update,
void (*cb)(CallbackId cb_id,
ErrorCode err,
EntryListHandle results),
CallbackId cb_id);
ErrorCode askar_session_fetch_all_keys(SessionHandle handle,
FfiStr alg,
FfiStr thumbprint,
FfiStr tag_filter,
int64_t limit,
int8_t for_update,
void (*cb)(CallbackId cb_id,
ErrorCode err,
KeyEntryListHandle results),
CallbackId cb_id);
ErrorCode askar_session_fetch_key(SessionHandle handle,
FfiStr name,
int8_t for_update,
void (*cb)(CallbackId cb_id,
ErrorCode err,
KeyEntryListHandle results),
CallbackId cb_id);
ErrorCode askar_session_insert_key(SessionHandle handle,
LocalKeyHandle key_handle,
FfiStr name,
FfiStr metadata,
FfiStr tags,
int64_t expiry_ms,
void (*cb)(CallbackId cb_id, ErrorCode err),
CallbackId cb_id);
ErrorCode askar_session_remove_all(SessionHandle handle,
FfiStr category,
FfiStr tag_filter,
void (*cb)(CallbackId cb_id, ErrorCode err, int64_t removed),
CallbackId cb_id);
ErrorCode askar_session_remove_key(SessionHandle handle,
FfiStr name,
void (*cb)(CallbackId cb_id, ErrorCode err),
CallbackId cb_id);
ErrorCode askar_session_start(StoreHandle handle,
FfiStr profile,
int8_t as_transaction,
void (*cb)(CallbackId cb_id, ErrorCode err, SessionHandle handle),
CallbackId cb_id);
ErrorCode askar_session_update(SessionHandle handle,
int8_t operation,
FfiStr category,
FfiStr name,
struct ByteBuffer value,
FfiStr tags,
int64_t expiry_ms,
void (*cb)(CallbackId cb_id, ErrorCode err),
CallbackId cb_id);
ErrorCode askar_session_update_key(SessionHandle handle,
FfiStr name,
FfiStr metadata,
FfiStr tags,
int64_t expiry_ms,
void (*cb)(CallbackId cb_id, ErrorCode err),
CallbackId cb_id);
ErrorCode askar_set_custom_logger(const void *context,
LogCallback log,
struct Option_EnabledCallback enabled,
struct Option_FlushCallback flush,
int32_t max_level);
ErrorCode askar_set_default_logger(void);
ErrorCode askar_set_max_log_level(int32_t max_level);
ErrorCode askar_store_close(StoreHandle handle,
void (*cb)(CallbackId cb_id, ErrorCode err),
CallbackId cb_id);
ErrorCode askar_store_copy(StoreHandle handle,
FfiStr target_uri,
FfiStr key_method,
FfiStr pass_key,
int8_t recreate,
void (*cb)(CallbackId cb_id, ErrorCode err, StoreHandle handle),
CallbackId cb_id);
ErrorCode askar_store_copy_profile(StoreHandle from_handle,
StoreHandle to_handle,
FfiStr from_profile,
FfiStr to_profile,
void (*cb)(CallbackId cb_id, ErrorCode err),
CallbackId cb_id);
ErrorCode askar_store_create_profile(StoreHandle handle,
FfiStr profile,
void (*cb)(CallbackId cb_id,
ErrorCode err,
const char *result_p),
CallbackId cb_id);
ErrorCode askar_store_generate_raw_key(struct ByteBuffer seed, const char **out);
ErrorCode askar_store_get_default_profile(StoreHandle handle,
void (*cb)(CallbackId cb_id,
ErrorCode err,
const char *profile),
CallbackId cb_id);
ErrorCode askar_store_get_profile_name(StoreHandle handle,
void (*cb)(CallbackId cb_id, ErrorCode err, const char *name),
CallbackId cb_id);
ErrorCode askar_store_list_profiles(StoreHandle handle,
void (*cb)(CallbackId cb_id,
ErrorCode err,
StringListHandle results),
CallbackId cb_id);
ErrorCode askar_store_open(FfiStr spec_uri,
FfiStr key_method,
FfiStr pass_key,
FfiStr profile,
void (*cb)(CallbackId cb_id, ErrorCode err, StoreHandle handle),
CallbackId cb_id);
ErrorCode askar_store_provision(FfiStr spec_uri,
FfiStr key_method,
FfiStr pass_key,
FfiStr profile,
int8_t recreate,
void (*cb)(CallbackId cb_id, ErrorCode err, StoreHandle handle),
CallbackId cb_id);
ErrorCode askar_store_rekey(StoreHandle handle,
FfiStr key_method,
FfiStr pass_key,
void (*cb)(CallbackId cb_id, ErrorCode err),
CallbackId cb_id);
ErrorCode askar_store_remove(FfiStr spec_uri,
void (*cb)(CallbackId cb_id, ErrorCode err, int8_t),
CallbackId cb_id);
ErrorCode askar_store_remove_profile(StoreHandle handle,
FfiStr profile,
void (*cb)(CallbackId cb_id, ErrorCode err, int8_t removed),
CallbackId cb_id);
ErrorCode askar_store_rename_profile(StoreHandle handle,
FfiStr from_profile,
FfiStr to_profile,
void (*cb)(CallbackId cb_id, ErrorCode err, int8_t renamed),
CallbackId cb_id);
ErrorCode askar_store_set_default_profile(StoreHandle handle,
FfiStr profile,
void (*cb)(CallbackId cb_id, ErrorCode err),
CallbackId cb_id);
ErrorCode askar_string_list_count(StringListHandle handle, int32_t *count);
void askar_string_list_free(StringListHandle handle);
ErrorCode askar_string_list_get_item(StringListHandle handle, int32_t index, const char **item);
void askar_terminate(void);
char *askar_version(void);
#ifdef __cplusplus
} #endif