summaryrefslogtreecommitdiff
path: root/include/hybbx/crypto_config.h
blob: ec1f61d5ef3c5f09628aa3213754f4b820e84df2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#ifndef HYBBX_CRYPTO_CONFIG_H
#define HYBBX_CRYPTO_CONFIG_H

#include "hybbx/types.h"

#ifdef __cplusplus
extern "C" {
#endif

struct hybbx_config;

/** Password hashing backend for new hashes and verification. */
typedef enum hybbx_password_hash_backend {
    HYBBX_PASSWORD_HASH_TINYSHA256 = 1,
    HYBBX_PASSWORD_HASH_OPENSSL = 2
} hybbx_password_hash_backend_t;

/** AES-256-GCM implementation backend. */
typedef enum hybbx_aes_gcm_backend {
    HYBBX_AES_GCM_TINYAES = 1,
    HYBBX_AES_GCM_OPENSSL = 2
} hybbx_aes_gcm_backend_t;

/** XChaCha20-Poly1305 implementation backend. */
typedef enum hybbx_chacha_backend {
    HYBBX_CHACHA_MONOCYPHER = 1,
    HYBBX_CHACHA_LIBSODIUM = 2
} hybbx_chacha_backend_t;

/** X25519 key agreement backend (sealed-box mode). */
typedef enum hybbx_x25519_backend {
    HYBBX_X25519_MONOCYPHER = 1,
    HYBBX_X25519_LIBSODIUM = 2
} hybbx_x25519_backend_t;

/** OS random bytes source. */
typedef enum hybbx_random_backend {
    HYBBX_RANDOM_SYSTEM = 1,
    HYBBX_RANDOM_OPENSSL = 2
} hybbx_random_backend_t;

typedef struct hybbx_crypto_config {
    hybbx_password_hash_backend_t password_hash;
    hybbx_aes_gcm_backend_t aes_gcm;
    hybbx_chacha_backend_t chacha;
    hybbx_x25519_backend_t x25519;
    hybbx_random_backend_t random;
} hybbx_crypto_config_t;

/** Bundled defaults: tinysha256, tinyaes, monocypher, system random. */
void hybbx_crypto_config_defaults(hybbx_crypto_config_t *cfg);

/** Load `[crypto]` from @p config (missing keys keep defaults). */
void hybbx_crypto_config_apply(const struct hybbx_config *config);

/** Active system-wide crypto settings (defaults until apply is called). */
const hybbx_crypto_config_t *hybbx_crypto_config_get(void);

const char *hybbx_password_hash_backend_name(hybbx_password_hash_backend_t b);
const char *hybbx_aes_gcm_backend_name(hybbx_aes_gcm_backend_t b);
const char *hybbx_chacha_backend_name(hybbx_chacha_backend_t b);
const char *hybbx_x25519_backend_name(hybbx_x25519_backend_t b);
const char *hybbx_random_backend_name(hybbx_random_backend_t b);

#ifdef __cplusplus
}
#endif

#endif /* HYBBX_CRYPTO_CONFIG_H */
git clone -b <branch> https://cgit.mode42.com/<repo>.git
git clone -b <branch> git://cgit.mode42.com/<repo>.git

info@mode42.com