70 lines
2.3 KiB
C
70 lines
2.3 KiB
C
/**
|
|
* @file ske_gcm.h
|
|
* @brief Semidrive CRYPTO ske gcm header file.
|
|
*
|
|
* @copyright Copyright (c) 2021 Semidrive Semiconductor.
|
|
* All rights reserved.
|
|
*/
|
|
|
|
#ifndef SKE_GCM_H
|
|
#define SKE_GCM_H
|
|
|
|
#include "ske.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define SKE_HP_GCM_MAX_BYTES (16)
|
|
|
|
typedef struct {
|
|
uint8_t buf[16];
|
|
ske_ctx_t ske_gcm_ctx[1];
|
|
SKE_CRYPTO crypto;
|
|
uint32_t aad_bytes;
|
|
uint32_t c_bytes;
|
|
uint8_t current_bytes;
|
|
} ske_gcm_ctx_t;
|
|
|
|
uint32_t ske_hp_gcm_init(ske_gcm_ctx_t *ctx, SKE_ALG alg, SKE_CRYPTO crypto,
|
|
uint8_t *key, uint16_t sp_key_idx, uint8_t *iv,
|
|
uint32_t iv_bytes, uint32_t aad_bytes,
|
|
uint32_t c_bytes);
|
|
|
|
uint32_t ske_hp_gcm_aad(ske_gcm_ctx_t *ctx, uint8_t *aad);
|
|
|
|
uint32_t ske_hp_gcm_update(ske_gcm_ctx_t *ctx, uint8_t *in, uint8_t *out,
|
|
uint32_t bytes);
|
|
|
|
uint32_t ske_hp_gcm_final(ske_gcm_ctx_t *ctx, uint8_t *tag, uint32_t tag_bytes);
|
|
|
|
uint32_t ske_hp_gcm_crypto(SKE_ALG alg, SKE_CRYPTO crypto, uint8_t *key,
|
|
uint16_t sp_key_idx, uint8_t *iv, uint32_t iv_bytes,
|
|
uint8_t *aad, uint32_t aad_bytes, uint8_t *in,
|
|
uint8_t *out, uint32_t c_bytes, uint8_t *tag,
|
|
uint32_t tag_bytes);
|
|
|
|
#ifdef SKE_HP_DMA_FUNCTION
|
|
uint32_t ske_hp_dma_gcm_init(ske_gcm_ctx_t *ctx, SKE_ALG alg, SKE_CRYPTO crypto,
|
|
uint8_t *key, uint16_t sp_key_idx, uint8_t *iv,
|
|
uint32_t iv_bytes, uint32_t aad_bytes,
|
|
uint32_t c_bytes);
|
|
|
|
uint32_t ske_hp_dma_gcm_update_blocks(ske_gcm_ctx_t *ctx, uint32_t *in,
|
|
uint32_t *out, uint32_t tag_bytes);
|
|
|
|
uint32_t ske_hp_dma_gcm_final(ske_gcm_ctx_t *ctx);
|
|
|
|
uint32_t ske_hp_dma_gcm_crypto(SKE_ALG alg, SKE_CRYPTO crypto, uint8_t *key,
|
|
uint16_t sp_key_idx, uint8_t *iv,
|
|
uint32_t iv_bytes, uint32_t aad_bytes,
|
|
uint32_t *in, uint32_t *out, uint32_t c_bytes,
|
|
uint32_t tag_bytes);
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|