mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 20:42:44 +02:00
50 lines
1.7 KiB
C
50 lines
1.7 KiB
C
/**
|
|
* @file aes_cbc.h
|
|
* @brief Switch accelerated AES-CBC implementation.
|
|
* @copyright libnx Authors
|
|
*/
|
|
#pragma once
|
|
#include "aes.h"
|
|
|
|
/// Context for AES-128 CBC.
|
|
typedef struct {
|
|
Aes128Context aes_ctx;
|
|
u8 iv[AES_BLOCK_SIZE];
|
|
u8 buffer[AES_BLOCK_SIZE];
|
|
size_t num_buffered;
|
|
} Aes128CbcContext;
|
|
|
|
/// Context for AES-192 CBC.
|
|
typedef struct {
|
|
Aes192Context aes_ctx;
|
|
u8 iv[AES_BLOCK_SIZE];
|
|
u8 buffer[AES_BLOCK_SIZE];
|
|
size_t num_buffered;
|
|
} Aes192CbcContext;
|
|
|
|
/// Context for AES-256 CBC.
|
|
typedef struct {
|
|
Aes256Context aes_ctx;
|
|
u8 iv[AES_BLOCK_SIZE];
|
|
u8 buffer[AES_BLOCK_SIZE];
|
|
size_t num_buffered;
|
|
} Aes256CbcContext;
|
|
|
|
/// 128-bit CBC API.
|
|
void aes128CbcContextCreate(Aes128CbcContext *out, const void *key, const void *iv, bool is_encryptor);
|
|
void aes128CbcContextResetIv(Aes128CbcContext *ctx, const void *iv);
|
|
size_t aes128CbcEncrypt(Aes128CbcContext *ctx, void *dst, const void *src, size_t size);
|
|
size_t aes128CbcDecrypt(Aes128CbcContext *ctx, void *dst, const void *src, size_t size);
|
|
|
|
/// 192-bit CBC API.
|
|
void aes192CbcContextCreate(Aes192CbcContext *out, const void *key, const void *iv, bool is_encryptor);
|
|
void aes192CbcContextResetIv(Aes192CbcContext *ctx, const void *iv);
|
|
size_t aes192CbcEncrypt(Aes192CbcContext *ctx, void *dst, const void *src, size_t size);
|
|
size_t aes192CbcDecrypt(Aes192CbcContext *ctx, void *dst, const void *src, size_t size);
|
|
|
|
/// 256-bit CBC API.
|
|
void aes256CbcContextCreate(Aes256CbcContext *out, const void *key, const void *iv, bool is_encryptor);
|
|
void aes256CbcContextResetIv(Aes256CbcContext *ctx, const void *iv);
|
|
size_t aes256CbcEncrypt(Aes256CbcContext *ctx, void *dst, const void *src, size_t size);
|
|
size_t aes256CbcDecrypt(Aes256CbcContext *ctx, void *dst, const void *src, size_t size);
|