RetroArch
|
#include "mbedtls/config.h"
#include "mbedtls/gcm.h"
#include <string.h>
#include "mbedtls/aesni.h"
#include "mbedtls/platform.h"
#include "arc4_alt.h"
Macros | |
#define | GET_UINT32_BE(n, b, i) |
#define | PUT_UINT32_BE(n, b, i) |
#define | MAX_TESTS 6 |
Functions | |
void | mbedtls_gcm_init (mbedtls_gcm_context *ctx) |
Initialize GCM context (just makes references valid) Makes the context ready for mbedtls_gcm_setkey() or mbedtls_gcm_free(). More... | |
static int | gcm_gen_table (mbedtls_gcm_context *ctx) |
int | mbedtls_gcm_setkey (mbedtls_gcm_context *ctx, mbedtls_cipher_id_t cipher, const unsigned char *key, unsigned int keybits) |
GCM initialization (encryption) More... | |
static void | gcm_mult (mbedtls_gcm_context *ctx, const unsigned char x[16], unsigned char output[16]) |
int | mbedtls_gcm_starts (mbedtls_gcm_context *ctx, int mode, const unsigned char *iv, size_t iv_len, const unsigned char *add, size_t add_len) |
Generic GCM stream start function. More... | |
int | mbedtls_gcm_update (mbedtls_gcm_context *ctx, size_t length, const unsigned char *input, unsigned char *output) |
Generic GCM update function. Encrypts/decrypts using the given GCM context. Expects input to be a multiple of 16 bytes! Only the last call before mbedtls_gcm_finish() can be less than 16 bytes! More... | |
int | mbedtls_gcm_finish (mbedtls_gcm_context *ctx, unsigned char *tag, size_t tag_len) |
Generic GCM finalisation function. Wraps up the GCM stream and generates the tag. The tag can have a maximum length of 16 bytes. More... | |
int | mbedtls_gcm_crypt_and_tag (mbedtls_gcm_context *ctx, int mode, size_t length, const unsigned char *iv, size_t iv_len, const unsigned char *add, size_t add_len, const unsigned char *input, unsigned char *output, size_t tag_len, unsigned char *tag) |
GCM buffer encryption/decryption using a block cipher. More... | |
int | mbedtls_gcm_auth_decrypt (mbedtls_gcm_context *ctx, size_t length, const unsigned char *iv, size_t iv_len, const unsigned char *add, size_t add_len, const unsigned char *tag, size_t tag_len, const unsigned char *input, unsigned char *output) |
GCM buffer authenticated decryption using a block cipher. More... | |
void | mbedtls_gcm_free (mbedtls_gcm_context *ctx) |
Free a GCM context and underlying cipher sub-context. More... | |
int | mbedtls_gcm_self_test (int verbose) |
Checkup routine. More... | |
Variables | |
static const uint64_t | last4 [16] |
static const int | key_index [MAX_TESTS] |
static const unsigned char | gcm_key [MAX_TESTS][32] |
static const size_t | gcm_iv_len [MAX_TESTS] |
static const int | iv_index [MAX_TESTS] |
static const unsigned char | gcm_iv [MAX_TESTS][64] |
static const size_t | gcm_add_len [MAX_TESTS] |
static const int | add_index [MAX_TESTS] |
static const unsigned char | additional [MAX_TESTS][64] |
static const size_t | pt_len [MAX_TESTS] |
static const int | pt_index [MAX_TESTS] |
static const unsigned char | pt [MAX_TESTS][64] |
static const unsigned char | ct [MAX_TESTS *3][64] |
static const unsigned char | tag [MAX_TESTS *3][16] |
#define MAX_TESTS 6 |
|
static |
|
static |
int mbedtls_gcm_auth_decrypt | ( | mbedtls_gcm_context * | ctx, |
size_t | length, | ||
const unsigned char * | iv, | ||
size_t | iv_len, | ||
const unsigned char * | add, | ||
size_t | add_len, | ||
const unsigned char * | tag, | ||
size_t | tag_len, | ||
const unsigned char * | input, | ||
unsigned char * | output | ||
) |
GCM buffer authenticated decryption using a block cipher.
ctx | GCM context |
length | length of the input data |
iv | initialization vector |
iv_len | length of IV |
add | additional data |
add_len | length of additional data |
tag | buffer holding the tag |
tag_len | length of the tag |
input | buffer holding the input data |
output | buffer for holding the output data |
int mbedtls_gcm_crypt_and_tag | ( | mbedtls_gcm_context * | ctx, |
int | mode, | ||
size_t | length, | ||
const unsigned char * | iv, | ||
size_t | iv_len, | ||
const unsigned char * | add, | ||
size_t | add_len, | ||
const unsigned char * | input, | ||
unsigned char * | output, | ||
size_t | tag_len, | ||
unsigned char * | tag | ||
) |
GCM buffer encryption/decryption using a block cipher.
ctx | GCM context |
mode | MBEDTLS_GCM_ENCRYPT or MBEDTLS_GCM_DECRYPT |
length | length of the input data |
iv | initialization vector |
iv_len | length of IV |
add | additional data |
add_len | length of additional data |
input | buffer holding the input data |
output | buffer for holding the output data |
tag_len | length of the tag to generate |
tag | buffer for holding the tag |
int mbedtls_gcm_finish | ( | mbedtls_gcm_context * | ctx, |
unsigned char * | tag, | ||
size_t | tag_len | ||
) |
Generic GCM finalisation function. Wraps up the GCM stream and generates the tag. The tag can have a maximum length of 16 bytes.
ctx | GCM context |
tag | buffer for holding the tag |
tag_len | length of the tag to generate (must be at least 4) |
void mbedtls_gcm_free | ( | mbedtls_gcm_context * | ctx | ) |
Free a GCM context and underlying cipher sub-context.
ctx | GCM context to free |
void mbedtls_gcm_init | ( | mbedtls_gcm_context * | ctx | ) |
Initialize GCM context (just makes references valid) Makes the context ready for mbedtls_gcm_setkey() or mbedtls_gcm_free().
ctx | GCM context to initialize |
int mbedtls_gcm_self_test | ( | int | verbose | ) |
Checkup routine.
int mbedtls_gcm_setkey | ( | mbedtls_gcm_context * | ctx, |
mbedtls_cipher_id_t | cipher, | ||
const unsigned char * | key, | ||
unsigned int | keybits | ||
) |
GCM initialization (encryption)
ctx | GCM context to be initialized |
cipher | cipher to use (a 128-bit block cipher) |
key | encryption key |
keybits | must be 128, 192 or 256 |
int mbedtls_gcm_starts | ( | mbedtls_gcm_context * | ctx, |
int | mode, | ||
const unsigned char * | iv, | ||
size_t | iv_len, | ||
const unsigned char * | add, | ||
size_t | add_len | ||
) |
Generic GCM stream start function.
ctx | GCM context |
mode | MBEDTLS_GCM_ENCRYPT or MBEDTLS_GCM_DECRYPT |
iv | initialization vector |
iv_len | length of IV |
add | additional data (or NULL if length is 0) |
add_len | length of additional data |
int mbedtls_gcm_update | ( | mbedtls_gcm_context * | ctx, |
size_t | length, | ||
const unsigned char * | input, | ||
unsigned char * | output | ||
) |
Generic GCM update function. Encrypts/decrypts using the given GCM context. Expects input to be a multiple of 16 bytes! Only the last call before mbedtls_gcm_finish() can be less than 16 bytes!
ctx | GCM context |
length | length of the input data |
input | buffer holding the input data |
output | buffer for holding the output data |