37#ifndef XTC_OS_CRYPTO_H
38#define XTC_OS_CRYPTO_H
40#include "xtc_export.h"
45#define XTC_CRYPTO_SHA256_LEN 32
46#define XTC_CRYPTO_SHA3_256_LEN 32
47#define XTC_CRYPTO_SHA3_512_LEN 64
48#define XTC_CRYPTO_BLAKE3_LEN 32
49#define XTC_CRYPTO_AES_KEY_LEN 32
50#define XTC_CRYPTO_AES_IV_LEN 12
51#define XTC_CRYPTO_AES_TAG_LEN 16
52#define XTC_CRYPTO_CHACHA_KEY_LEN 32
53#define XTC_CRYPTO_CHACHA_NONCE_LEN 12
54#define XTC_CRYPTO_CHACHA_TAG_LEN 16
71XTC_API
int __os_crypto_sha256(
const void *data,
size_t len,
72 uint8_t out[XTC_CRYPTO_SHA256_LEN]);
73XTC_API
int __os_crypto_hmac_sha256(
const void *key,
size_t keylen,
74 const void *data,
size_t len, uint8_t out[XTC_CRYPTO_SHA256_LEN]);
93XTC_API
int __os_crypto_sha3_256(
const void *data,
size_t len,
94 uint8_t out[XTC_CRYPTO_SHA3_256_LEN]);
95XTC_API
int __os_crypto_sha3_512(
const void *data,
size_t len,
96 uint8_t out[XTC_CRYPTO_SHA3_512_LEN]);
110XTC_API
int __os_crypto_blake3(
const void *data,
size_t len,
111 uint8_t out[XTC_CRYPTO_BLAKE3_LEN]);
141XTC_API
int __os_crypto_aes_gcm_encrypt(
142 const uint8_t key[XTC_CRYPTO_AES_KEY_LEN],
143 const uint8_t iv[XTC_CRYPTO_AES_IV_LEN],
144 const void *aad,
size_t aadlen,
145 const void *plaintext,
size_t len,
146 void *ciphertext_out, uint8_t tag_out[XTC_CRYPTO_AES_TAG_LEN]);
147XTC_API
int __os_crypto_aes_gcm_decrypt(
148 const uint8_t key[XTC_CRYPTO_AES_KEY_LEN],
149 const uint8_t iv[XTC_CRYPTO_AES_IV_LEN],
150 const void *aad,
size_t aadlen,
151 const void *ciphertext,
size_t len,
152 const uint8_t tag[XTC_CRYPTO_AES_TAG_LEN],
153 void *plaintext_out);
177XTC_API
int __os_crypto_chacha20_poly1305_encrypt(
178 const uint8_t key[XTC_CRYPTO_CHACHA_KEY_LEN],
179 const uint8_t nonce[XTC_CRYPTO_CHACHA_NONCE_LEN],
180 const void *aad,
size_t aadlen,
181 const void *plaintext,
size_t len,
182 void *ciphertext_out,
183 uint8_t tag_out[XTC_CRYPTO_CHACHA_TAG_LEN]);
184XTC_API
int __os_crypto_chacha20_poly1305_decrypt(
185 const uint8_t key[XTC_CRYPTO_CHACHA_KEY_LEN],
186 const uint8_t nonce[XTC_CRYPTO_CHACHA_NONCE_LEN],
187 const void *aad,
size_t aadlen,
188 const void *ciphertext,
size_t len,
189 const uint8_t tag[XTC_CRYPTO_CHACHA_TAG_LEN],
190 void *plaintext_out);
217XTC_API
int __os_crypto_hkdf_extract(
const void *salt,
size_t saltlen,
218 const void *ikm,
size_t ikmlen,
219 uint8_t prk_out[XTC_CRYPTO_SHA256_LEN]);
220XTC_API
int __os_crypto_hkdf_expand(
221 const uint8_t prk[XTC_CRYPTO_SHA256_LEN],
222 const void *info,
size_t infolen,
void *out,
size_t outlen);
223XTC_API
int __os_crypto_hkdf(
const void *ikm,
size_t ikmlen,
224 const void *salt,
size_t saltlen,
225 const void *info,
size_t infolen,
void *out,
size_t outlen);
246typedef struct __os_csprng __os_csprng_t;
248XTC_API
int __os_csprng_init(__os_csprng_t **out);
249XTC_API
int __os_csprng_bytes(__os_csprng_t *rng,
void *buf,
size_t len);
250XTC_API
void __os_csprng_destroy(__os_csprng_t *rng);