File indexing completed on 2025-09-17 09:00:44
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 #ifndef GNUTLS_CRYPTO_H
0024 #define GNUTLS_CRYPTO_H
0025
0026 #include <gnutls/gnutls.h>
0027
0028 #ifdef __cplusplus
0029 extern "C" {
0030 #endif
0031
0032 typedef struct api_cipher_hd_st *gnutls_cipher_hd_t;
0033
0034 int gnutls_cipher_init(gnutls_cipher_hd_t *handle,
0035 gnutls_cipher_algorithm_t cipher,
0036 const gnutls_datum_t *key, const gnutls_datum_t *iv);
0037 int gnutls_cipher_encrypt(const gnutls_cipher_hd_t handle, void *text,
0038 size_t textlen);
0039 int gnutls_cipher_decrypt(const gnutls_cipher_hd_t handle, void *ciphertext,
0040 size_t ciphertextlen);
0041 int gnutls_cipher_decrypt2(gnutls_cipher_hd_t handle, const void *ciphertext,
0042 size_t ciphertextlen, void *text, size_t textlen);
0043 int gnutls_cipher_encrypt2(gnutls_cipher_hd_t handle, const void *text,
0044 size_t textlen, void *ciphertext,
0045 size_t ciphertextlen);
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056 typedef enum gnutls_cipher_flags_t {
0057 GNUTLS_CIPHER_PADDING_PKCS7 = 1
0058 } gnutls_cipher_flags_t;
0059
0060 int gnutls_cipher_encrypt3(gnutls_cipher_hd_t handle, const void *ptext,
0061 size_t ptext_len, void *ctext, size_t *ctext_len,
0062 unsigned flags);
0063 int gnutls_cipher_decrypt3(gnutls_cipher_hd_t handle, const void *ctext,
0064 size_t ctext_len, void *ptext, size_t *ptext_len,
0065 unsigned flags);
0066
0067 void gnutls_cipher_set_iv(gnutls_cipher_hd_t handle, void *iv, size_t ivlen);
0068
0069 int gnutls_cipher_tag(gnutls_cipher_hd_t handle, void *tag, size_t tag_size);
0070 int gnutls_cipher_add_auth(gnutls_cipher_hd_t handle, const void *text,
0071 size_t text_size);
0072
0073 void gnutls_cipher_deinit(gnutls_cipher_hd_t handle);
0074 unsigned gnutls_cipher_get_block_size(gnutls_cipher_algorithm_t algorithm)
0075 __GNUTLS_CONST__;
0076 unsigned
0077 gnutls_cipher_get_iv_size(gnutls_cipher_algorithm_t algorithm) __GNUTLS_CONST__;
0078 unsigned gnutls_cipher_get_tag_size(gnutls_cipher_algorithm_t algorithm)
0079 __GNUTLS_CONST__;
0080
0081
0082
0083 typedef struct api_aead_cipher_hd_st *gnutls_aead_cipher_hd_t;
0084
0085 int gnutls_aead_cipher_init(gnutls_aead_cipher_hd_t *handle,
0086 gnutls_cipher_algorithm_t cipher,
0087 const gnutls_datum_t *key);
0088
0089 int gnutls_aead_cipher_set_key(gnutls_aead_cipher_hd_t handle,
0090 const gnutls_datum_t *key);
0091
0092 int gnutls_aead_cipher_decrypt(gnutls_aead_cipher_hd_t handle,
0093 const void *nonce, size_t nonce_len,
0094 const void *auth, size_t auth_len,
0095 size_t tag_size, const void *ctext,
0096 size_t ctext_len, void *ptext,
0097 size_t *ptext_len);
0098 int gnutls_aead_cipher_encrypt(gnutls_aead_cipher_hd_t handle,
0099 const void *nonce, size_t nonce_len,
0100 const void *auth, size_t auth_len,
0101 size_t tag_size, const void *ptext,
0102 size_t ptext_len, void *ctext,
0103 size_t *ctext_len);
0104
0105 int gnutls_aead_cipher_encryptv(gnutls_aead_cipher_hd_t handle,
0106 const void *nonce, size_t nonce_len,
0107 const giovec_t *auth_iov, int auth_iovcnt,
0108 size_t tag_size, const giovec_t *iov,
0109 int iovcnt, void *ctext, size_t *ctext_len);
0110
0111 int gnutls_aead_cipher_encryptv2(gnutls_aead_cipher_hd_t handle,
0112 const void *nonce, size_t nonce_len,
0113 const giovec_t *auth_iov, int auth_iovcnt,
0114 const giovec_t *iov, int iovcnt, void *tag,
0115 size_t *tag_size);
0116
0117 int gnutls_aead_cipher_decryptv2(gnutls_aead_cipher_hd_t handle,
0118 const void *nonce, size_t nonce_len,
0119 const giovec_t *auth_iov, int auth_iovcnt,
0120 const giovec_t *iov, int iovcnt, void *tag,
0121 size_t tag_size);
0122
0123 void gnutls_aead_cipher_deinit(gnutls_aead_cipher_hd_t handle);
0124
0125
0126
0127 typedef struct hash_hd_st *gnutls_hash_hd_t;
0128 typedef struct hmac_hd_st *gnutls_hmac_hd_t;
0129
0130 size_t
0131 gnutls_mac_get_nonce_size(gnutls_mac_algorithm_t algorithm) __GNUTLS_CONST__;
0132 int gnutls_hmac_init(gnutls_hmac_hd_t *dig, gnutls_mac_algorithm_t algorithm,
0133 const void *key, size_t keylen);
0134 void gnutls_hmac_set_nonce(gnutls_hmac_hd_t handle, const void *nonce,
0135 size_t nonce_len);
0136 int gnutls_hmac(gnutls_hmac_hd_t handle, const void *text, size_t textlen);
0137 void gnutls_hmac_output(gnutls_hmac_hd_t handle, void *digest);
0138 void gnutls_hmac_deinit(gnutls_hmac_hd_t handle, void *digest);
0139 unsigned gnutls_hmac_get_len(gnutls_mac_algorithm_t algorithm) __GNUTLS_CONST__;
0140 unsigned
0141 gnutls_hmac_get_key_size(gnutls_mac_algorithm_t algorithm) __GNUTLS_CONST__;
0142 int gnutls_hmac_fast(gnutls_mac_algorithm_t algorithm, const void *key,
0143 size_t keylen, const void *text, size_t textlen,
0144 void *digest);
0145 gnutls_hmac_hd_t gnutls_hmac_copy(gnutls_hmac_hd_t handle);
0146
0147 int gnutls_hash_init(gnutls_hash_hd_t *dig,
0148 gnutls_digest_algorithm_t algorithm);
0149 int gnutls_hash(gnutls_hash_hd_t handle, const void *text, size_t textlen);
0150 void gnutls_hash_output(gnutls_hash_hd_t handle, void *digest);
0151 void gnutls_hash_deinit(gnutls_hash_hd_t handle, void *digest);
0152 unsigned
0153 gnutls_hash_get_len(gnutls_digest_algorithm_t algorithm) __GNUTLS_CONST__;
0154 int gnutls_hash_fast(gnutls_digest_algorithm_t algorithm, const void *text,
0155 size_t textlen, void *digest);
0156 gnutls_hash_hd_t gnutls_hash_copy(gnutls_hash_hd_t handle);
0157 int gnutls_hash_squeeze(gnutls_hash_hd_t handle, void *output, size_t length);
0158
0159
0160
0161 int gnutls_hkdf_extract(gnutls_mac_algorithm_t mac, const gnutls_datum_t *key,
0162 const gnutls_datum_t *salt, void *output);
0163
0164 int gnutls_hkdf_expand(gnutls_mac_algorithm_t mac, const gnutls_datum_t *key,
0165 const gnutls_datum_t *info, void *output, size_t length);
0166
0167 int gnutls_pbkdf2(gnutls_mac_algorithm_t mac, const gnutls_datum_t *key,
0168 const gnutls_datum_t *salt, unsigned iter_count, void *output,
0169 size_t length);
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184 typedef enum gnutls_rnd_level {
0185 GNUTLS_RND_NONCE = 0,
0186 GNUTLS_RND_RANDOM = 1,
0187 GNUTLS_RND_KEY = 2
0188 } gnutls_rnd_level_t;
0189
0190 int gnutls_rnd(gnutls_rnd_level_t level, void *data, size_t len);
0191
0192 void gnutls_rnd_refresh(void);
0193
0194
0195
0196
0197 typedef int (*gnutls_cipher_init_func)(gnutls_cipher_algorithm_t, void **ctx,
0198 int enc);
0199 typedef int (*gnutls_cipher_setkey_func)(void *ctx, const void *key,
0200 size_t keysize);
0201
0202 typedef int (*gnutls_cipher_setiv_func)(void *ctx, const void *iv,
0203 size_t ivsize);
0204 typedef int (*gnutls_cipher_getiv_func)(void *ctx, void *iv, size_t ivsize);
0205 typedef int (*gnutls_cipher_encrypt_func)(void *ctx, const void *plain,
0206 size_t plainsize, void *encr,
0207 size_t encrsize);
0208 typedef int (*gnutls_cipher_decrypt_func)(void *ctx, const void *encr,
0209 size_t encrsize, void *plain,
0210 size_t plainsize);
0211
0212
0213 typedef int (*gnutls_cipher_auth_func)(void *ctx, const void *data,
0214 size_t datasize);
0215 typedef void (*gnutls_cipher_tag_func)(void *ctx, void *tag, size_t tagsize);
0216
0217 typedef int (*gnutls_cipher_aead_encrypt_func)(
0218 void *ctx, const void *nonce, size_t noncesize, const void *auth,
0219 size_t authsize, size_t tag_size, const void *plain, size_t plainsize,
0220 void *encr, size_t encrsize);
0221 typedef int (*gnutls_cipher_aead_decrypt_func)(
0222 void *ctx, const void *nonce, size_t noncesize, const void *auth,
0223 size_t authsize, size_t tag_size, const void *encr, size_t encrsize,
0224 void *plain, size_t plainsize);
0225 typedef void (*gnutls_cipher_deinit_func)(void *ctx);
0226
0227 int gnutls_crypto_register_cipher(
0228 gnutls_cipher_algorithm_t algorithm, int priority,
0229 gnutls_cipher_init_func init, gnutls_cipher_setkey_func setkey,
0230 gnutls_cipher_setiv_func setiv, gnutls_cipher_encrypt_func encrypt,
0231 gnutls_cipher_decrypt_func decrypt,
0232 gnutls_cipher_deinit_func deinit) _GNUTLS_GCC_ATTR_DEPRECATED;
0233
0234 int gnutls_crypto_register_aead_cipher(
0235 gnutls_cipher_algorithm_t algorithm, int priority,
0236 gnutls_cipher_init_func init, gnutls_cipher_setkey_func setkey,
0237 gnutls_cipher_aead_encrypt_func aead_encrypt,
0238 gnutls_cipher_aead_decrypt_func aead_decrypt,
0239 gnutls_cipher_deinit_func deinit) _GNUTLS_GCC_ATTR_DEPRECATED;
0240
0241 typedef int (*gnutls_mac_init_func)(gnutls_mac_algorithm_t, void **ctx);
0242 typedef int (*gnutls_mac_setkey_func)(void *ctx, const void *key,
0243 size_t keysize);
0244 typedef int (*gnutls_mac_setnonce_func)(void *ctx, const void *nonce,
0245 size_t noncesize);
0246 typedef int (*gnutls_mac_hash_func)(void *ctx, const void *text,
0247 size_t textsize);
0248 typedef int (*gnutls_mac_output_func)(void *src_ctx, void *digest,
0249 size_t digestsize);
0250 typedef void (*gnutls_mac_deinit_func)(void *ctx);
0251 typedef int (*gnutls_mac_fast_func)(gnutls_mac_algorithm_t, const void *nonce,
0252 size_t nonce_size, const void *key,
0253 size_t keysize, const void *text,
0254 size_t textsize, void *digest);
0255 typedef void *(*gnutls_mac_copy_func)(const void *ctx);
0256
0257 int gnutls_crypto_register_mac(
0258 gnutls_mac_algorithm_t mac, int priority, gnutls_mac_init_func init,
0259 gnutls_mac_setkey_func setkey, gnutls_mac_setnonce_func setnonce,
0260 gnutls_mac_hash_func hash, gnutls_mac_output_func output,
0261 gnutls_mac_deinit_func deinit,
0262 gnutls_mac_fast_func hash_fast) _GNUTLS_GCC_ATTR_DEPRECATED;
0263
0264 typedef int (*gnutls_digest_init_func)(gnutls_digest_algorithm_t, void **ctx);
0265 typedef int (*gnutls_digest_hash_func)(void *ctx, const void *text,
0266 size_t textsize);
0267 typedef int (*gnutls_digest_output_func)(void *src_ctx, void *digest,
0268 size_t digestsize);
0269 typedef void (*gnutls_digest_deinit_func)(void *ctx);
0270 typedef int (*gnutls_digest_fast_func)(gnutls_digest_algorithm_t,
0271 const void *text, size_t textsize,
0272 void *digest);
0273 typedef void *(*gnutls_digest_copy_func)(const void *ctx);
0274
0275 int gnutls_crypto_register_digest(
0276 gnutls_digest_algorithm_t digest, int priority,
0277 gnutls_digest_init_func init, gnutls_digest_hash_func hash,
0278 gnutls_digest_output_func output, gnutls_digest_deinit_func deinit,
0279 gnutls_digest_fast_func hash_fast) _GNUTLS_GCC_ATTR_DEPRECATED;
0280
0281
0282 int gnutls_encode_ber_digest_info(gnutls_digest_algorithm_t hash,
0283 const gnutls_datum_t *digest,
0284 gnutls_datum_t *output);
0285
0286 int gnutls_decode_ber_digest_info(const gnutls_datum_t *info,
0287 gnutls_digest_algorithm_t *hash,
0288 unsigned char *digest,
0289 unsigned int *digest_size);
0290
0291 int gnutls_decode_rs_value(const gnutls_datum_t *sig_value, gnutls_datum_t *r,
0292 gnutls_datum_t *s);
0293 int gnutls_encode_rs_value(gnutls_datum_t *sig_value, const gnutls_datum_t *r,
0294 const gnutls_datum_t *s);
0295
0296 int gnutls_encode_gost_rs_value(gnutls_datum_t *sig_value,
0297 const gnutls_datum_t *r,
0298 const gnutls_datum_t *s);
0299 int gnutls_decode_gost_rs_value(const gnutls_datum_t *sig_value,
0300 gnutls_datum_t *r, gnutls_datum_t *s);
0301
0302 #ifdef __cplusplus
0303 }
0304 #endif
0305
0306 #endif