00001
00023 #ifndef MBEDTLS_GCM_H
00024 #define MBEDTLS_GCM_H
00025
00026 #include "cipher.h"
00027
00028 #include <stdint.h>
00029
00030 #define MBEDTLS_GCM_ENCRYPT 1
00031 #define MBEDTLS_GCM_DECRYPT 0
00032
00033 #define MBEDTLS_ERR_GCM_AUTH_FAILED -0x0012
00034 #define MBEDTLS_ERR_GCM_BAD_INPUT -0x0014
00036 #ifdef __cplusplus
00037 extern "C" {
00038 #endif
00039
00043 typedef struct {
00044 mbedtls_cipher_context_t cipher_ctx;
00045 uint64_t HL[16];
00046 uint64_t HH[16];
00047 uint64_t len;
00048 uint64_t add_len;
00049 unsigned char base_ectr[16];
00050 unsigned char y[16];
00051 unsigned char buf[16];
00052 int mode;
00053 }
00054 mbedtls_gcm_context;
00055
00063 void mbedtls_gcm_init( mbedtls_gcm_context *ctx );
00064
00075 int mbedtls_gcm_setkey( mbedtls_gcm_context *ctx,
00076 mbedtls_cipher_id_t cipher,
00077 const unsigned char *key,
00078 unsigned int keybits );
00079
00102 int mbedtls_gcm_crypt_and_tag( mbedtls_gcm_context *ctx,
00103 int mode,
00104 size_t length,
00105 const unsigned char *iv,
00106 size_t iv_len,
00107 const unsigned char *add,
00108 size_t add_len,
00109 const unsigned char *input,
00110 unsigned char *output,
00111 size_t tag_len,
00112 unsigned char *tag );
00113
00135 int mbedtls_gcm_auth_decrypt( mbedtls_gcm_context *ctx,
00136 size_t length,
00137 const unsigned char *iv,
00138 size_t iv_len,
00139 const unsigned char *add,
00140 size_t add_len,
00141 const unsigned char *tag,
00142 size_t tag_len,
00143 const unsigned char *input,
00144 unsigned char *output );
00145
00158 int mbedtls_gcm_starts( mbedtls_gcm_context *ctx,
00159 int mode,
00160 const unsigned char *iv,
00161 size_t iv_len,
00162 const unsigned char *add,
00163 size_t add_len );
00164
00182 int mbedtls_gcm_update( mbedtls_gcm_context *ctx,
00183 size_t length,
00184 const unsigned char *input,
00185 unsigned char *output );
00186
00198 int mbedtls_gcm_finish( mbedtls_gcm_context *ctx,
00199 unsigned char *tag,
00200 size_t tag_len );
00201
00207 void mbedtls_gcm_free( mbedtls_gcm_context *ctx );
00208
00214 int mbedtls_gcm_self_test( int verbose );
00215
00216 #ifdef __cplusplus
00217 }
00218 #endif
00219
00220 #endif