#ifndef OTP_INTERNAL_H
#define OTP_INTERNAL_H
#include "common.h"
#include "otp.h"
#include "sa_types.h"
#include "stored_key.h"
#ifdef __cplusplus
#include <cstdbool>
#include <cstddef>
#include <cstdint>
extern "C" {
#else
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#endif
typedef struct {
uint8_t c1[SYM_128_KEY_SIZE];
uint8_t c2[SYM_128_KEY_SIZE];
uint8_t c3[SYM_128_KEY_SIZE];
} key_ladder_inputs_t;
sa_status unwrap_aes_ecb_internal(
void* out,
const void* in,
size_t in_length,
const void* key,
size_t key_length);
sa_status unwrap_aes_cbc_internal(
void* out,
const void* in,
size_t in_length,
const void* iv,
const void* key,
size_t key_length);
sa_status unwrap_aes_gcm_internal(
void* out,
const void* in,
size_t in_length,
const void* iv,
size_t iv_length,
const void* aad,
size_t aad_length,
const void* tag,
size_t tag_length,
const void* key,
size_t key_length);
sa_status otp_wrap_aes_cbc(
void* wrapped,
const key_ladder_inputs_t* key_ladder_inputs,
const void* in,
size_t in_length,
const void* iv);
sa_status otp_unwrap_aes_cbc(
void* out,
const key_ladder_inputs_t* key_ladder_inputs,
const void* wrapped,
size_t wrapped_length,
const void* iv);
sa_status otp_hmac_sha256(
void* mac,
const key_ladder_inputs_t* key_ladder_inputs,
const void* in1,
size_t in1_length,
const void* in2,
size_t in2_length,
const void* in3,
size_t in3_length);
sa_status otp_unwrap_aes_gcm(
void* out,
const key_ladder_inputs_t* key_ladder_inputs,
sa_root_key_type root_key_type,
const void* wrapped,
size_t wrapped_length,
const void* iv,
size_t iv_length,
const void* aad,
size_t aad_length,
const void* tag,
size_t tag_length);
#ifdef __cplusplus
}
#endif
#endif