2021-07-06 14:07:18 +00:00
|
|
|
#ifndef MBEDTLS_GCM_H_
|
|
|
|
#define MBEDTLS_GCM_H_
|
2021-06-16 03:18:59 +00:00
|
|
|
#include "third_party/mbedtls/cipher.h"
|
2021-06-24 19:31:26 +00:00
|
|
|
#include "third_party/mbedtls/config.h"
|
2021-07-06 14:07:18 +00:00
|
|
|
COSMOPOLITAN_C_START_
|
2021-06-24 19:31:26 +00:00
|
|
|
/* clang-format off */
|
2021-06-15 18:39:36 +00:00
|
|
|
|
|
|
|
#define MBEDTLS_GCM_ENCRYPT 1
|
|
|
|
#define MBEDTLS_GCM_DECRYPT 0
|
|
|
|
|
|
|
|
#define MBEDTLS_ERR_GCM_AUTH_FAILED -0x0012 /**< Authenticated decryption failed. */
|
|
|
|
#define MBEDTLS_ERR_GCM_BAD_INPUT -0x0014 /**< Bad input parameters to function. */
|
|
|
|
|
2021-07-06 14:07:18 +00:00
|
|
|
typedef struct mbedtls_gcm_context {
|
2021-06-15 18:39:36 +00:00
|
|
|
mbedtls_cipher_context_t cipher_ctx; /*!< The cipher context used. */
|
|
|
|
uint64_t len; /*!< The total length of the encrypted data. */
|
|
|
|
uint64_t add_len; /*!< The total length of the additional data. */
|
|
|
|
unsigned char base_ectr[16]; /*!< The first ECTR for tag. */
|
|
|
|
unsigned char y[16]; /*!< The Y working value. */
|
|
|
|
unsigned char buf[16]; /*!< The buf working value. */
|
2021-07-06 14:07:18 +00:00
|
|
|
int mode; /*!< The operation to perform: #MBEDTLS_GCM_ENCRYPT or #MBEDTLS_GCM_DECRYPT. */
|
|
|
|
uint64_t H8[2]; /*!< For AES-NI. */
|
|
|
|
uint64_t HL[16]; /*!< Precalculated HTable low. */
|
|
|
|
uint64_t HH[16]; /*!< Precalculated HTable high. */
|
|
|
|
} mbedtls_gcm_context;
|
|
|
|
|
|
|
|
void mbedtls_gcm_init( mbedtls_gcm_context * );
|
|
|
|
int mbedtls_gcm_setkey( mbedtls_gcm_context *, mbedtls_cipher_id_t, const unsigned char *, unsigned int );
|
|
|
|
int mbedtls_gcm_crypt_and_tag( mbedtls_gcm_context *, int, size_t, const unsigned char *, size_t, const unsigned char *, size_t, const unsigned char *, unsigned char *, size_t, unsigned char * );
|
|
|
|
int mbedtls_gcm_auth_decrypt( mbedtls_gcm_context *, size_t, const unsigned char *, size_t, const unsigned char *, size_t, const unsigned char *, size_t, const unsigned char *, unsigned char * );
|
|
|
|
int mbedtls_gcm_starts( mbedtls_gcm_context *, int, const unsigned char *, size_t, const unsigned char *, size_t );
|
|
|
|
int mbedtls_gcm_update( mbedtls_gcm_context *, size_t, const unsigned char *, unsigned char * );
|
|
|
|
int mbedtls_gcm_finish( mbedtls_gcm_context *, unsigned char *, size_t );
|
|
|
|
void mbedtls_gcm_free( mbedtls_gcm_context * );
|
|
|
|
int mbedtls_gcm_self_test( int );
|
|
|
|
|
|
|
|
COSMOPOLITAN_C_END_
|
|
|
|
#endif /* MBEDTLS_GCM_H_ */
|