mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
cbc/ctr: expose iv/ctr reset
This commit is contained in:
parent
3eb6dd45a6
commit
82ae0f0c9e
@ -32,15 +32,18 @@ typedef struct {
|
||||
|
||||
/// 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);
|
||||
|
@ -32,12 +32,15 @@ typedef struct {
|
||||
|
||||
/// 128-bit CTR API.
|
||||
void aes128CtrContextCreate(Aes128CtrContext *out, const void *key, const void *ctr);
|
||||
void aes128CtrContextResetCtr(Aes128CtrContext *ctx, const void *ctr);
|
||||
void aes128CtrCrypt(Aes128CtrContext *ctx, void *dst, const void *src, size_t size);
|
||||
|
||||
/// 192-bit CTR API.
|
||||
void aes192CtrContextCreate(Aes192CtrContext *out, const void *key, const void *ctr);
|
||||
void aes192CtrContextResetCtr(Aes192CtrContext *ctx, const void *ctr);
|
||||
void aes192CtrCrypt(Aes192CtrContext *ctx, void *dst, const void *src, size_t size);
|
||||
|
||||
/// 256-bit CTR API.
|
||||
void aes256CtrContextCreate(Aes256CtrContext *out, const void *key, const void *ctr);
|
||||
void aes256CtrContextResetCtr(Aes256CtrContext *ctx, const void *ctr);
|
||||
void aes256CtrCrypt(Aes256CtrContext *ctx, void *dst, const void *src, size_t size);
|
||||
|
@ -84,11 +84,14 @@ do { \
|
||||
void aes128CbcContextCreate(Aes128CbcContext *out, const void *key, const void *iv, bool is_encryptor) {
|
||||
/* Initialize inner context. */
|
||||
aes128ContextCreate(&out->aes_ctx, key, is_encryptor);
|
||||
aes128CbcContextResetIv(out, iv);
|
||||
}
|
||||
|
||||
void aes128CbcContextResetIv(Aes128CbcContext *ctx, const void *iv) {
|
||||
/* Set IV, nothing is buffered. */
|
||||
memcpy(out->iv, iv, sizeof(out->iv));
|
||||
memset(out->buffer, 0, sizeof(out->buffer));
|
||||
out->num_buffered = 0;
|
||||
memcpy(ctx->iv, iv, sizeof(ctx->iv));
|
||||
memset(ctx->buffer, 0, sizeof(ctx->buffer));
|
||||
ctx->num_buffered = 0;
|
||||
}
|
||||
|
||||
static inline void _aes128CbcEncryptBlocks(Aes128CbcContext *ctx, u8 *dst_u8, const u8 *src_u8, size_t num_blocks) {
|
||||
@ -282,11 +285,14 @@ size_t aes128CbcDecrypt(Aes128CbcContext *ctx, void *dst, const void *src, size_
|
||||
void aes192CbcContextCreate(Aes192CbcContext *out, const void *key, const void *iv, bool is_encryptor) {
|
||||
/* Initialize inner context. */
|
||||
aes192ContextCreate(&out->aes_ctx, key, is_encryptor);
|
||||
aes192CbcContextResetIv(out, iv);
|
||||
}
|
||||
|
||||
void aes192CbcContextResetIv(Aes192CbcContext *ctx, const void *iv) {
|
||||
/* Set IV, nothing is buffered. */
|
||||
memcpy(out->iv, iv, sizeof(out->iv));
|
||||
memset(out->buffer, 0, sizeof(out->buffer));
|
||||
out->num_buffered = 0;
|
||||
memcpy(ctx->iv, iv, sizeof(ctx->iv));
|
||||
memset(ctx->buffer, 0, sizeof(ctx->buffer));
|
||||
ctx->num_buffered = 0;
|
||||
}
|
||||
|
||||
static inline void _aes192CbcEncryptBlocks(Aes192CbcContext *ctx, u8 *dst_u8, const u8 *src_u8, size_t num_blocks) {
|
||||
@ -496,11 +502,14 @@ size_t aes192CbcDecrypt(Aes192CbcContext *ctx, void *dst, const void *src, size_
|
||||
void aes256CbcContextCreate(Aes256CbcContext *out, const void *key, const void *iv, bool is_encryptor) {
|
||||
/* Initialize inner context. */
|
||||
aes256ContextCreate(&out->aes_ctx, key, is_encryptor);
|
||||
aes256CbcContextResetIv(out, iv);
|
||||
}
|
||||
|
||||
void aes256CbcContextResetIv(Aes256CbcContext *ctx, const void *iv) {
|
||||
/* Set IV, nothing is buffered. */
|
||||
memcpy(out->iv, iv, sizeof(out->iv));
|
||||
memset(out->buffer, 0, sizeof(out->buffer));
|
||||
out->num_buffered = 0;
|
||||
memcpy(ctx->iv, iv, sizeof(ctx->iv));
|
||||
memset(ctx->buffer, 0, sizeof(ctx->buffer));
|
||||
ctx->num_buffered = 0;
|
||||
}
|
||||
|
||||
static inline void _aes256CbcEncryptBlocks(Aes256CbcContext *ctx, u8 *dst_u8, const u8 *src_u8, size_t num_blocks) {
|
||||
|
@ -112,11 +112,14 @@ static inline uint8x16_t _incrementCtr(const uint8x16_t ctr) {
|
||||
void aes128CtrContextCreate(Aes128CtrContext *out, const void *key, const void *ctr) {
|
||||
/* Initialize inner context. */
|
||||
aes128ContextCreate(&out->aes_ctx, key, true);
|
||||
aes128CtrContextResetCtr(out, ctr);
|
||||
}
|
||||
|
||||
/* Set IV, nothing is buffered. */
|
||||
memcpy(out->ctr, ctr, sizeof(out->ctr));
|
||||
memset(out->enc_ctr_buffer, 0, sizeof(out->enc_ctr_buffer));
|
||||
out->buffer_offset = 0;
|
||||
void aes128CtrContextResetCtr(Aes128CtrContext *ctx, const void *ctr) {
|
||||
/* Set CTR, nothing is buffered. */
|
||||
memcpy(ctx->ctr, ctr, sizeof(ctx->ctr));
|
||||
memset(ctx->enc_ctr_buffer, 0, sizeof(ctx->enc_ctr_buffer));
|
||||
ctx->buffer_offset = 0;
|
||||
}
|
||||
|
||||
static inline void _aes128CtrCryptBlocks(Aes128CtrContext *ctx, u8 *dst_u8, const u8 *src_u8, size_t num_blocks) {
|
||||
@ -278,11 +281,14 @@ void aes128CtrCrypt(Aes128CtrContext *ctx, void *dst, const void *src, size_t si
|
||||
void aes192CtrContextCreate(Aes192CtrContext *out, const void *key, const void *ctr) {
|
||||
/* Initialize inner context. */
|
||||
aes192ContextCreate(&out->aes_ctx, key, true);
|
||||
aes192CtrContextResetCtr(out, ctr);
|
||||
}
|
||||
|
||||
/* Set IV, nothing is buffered. */
|
||||
memcpy(out->ctr, ctr, sizeof(out->ctr));
|
||||
memset(out->enc_ctr_buffer, 0, sizeof(out->enc_ctr_buffer));
|
||||
out->buffer_offset = 0;
|
||||
void aes192CtrContextResetCtr(Aes192CtrContext *ctx, const void *ctr) {
|
||||
/* Set CTR, nothing is buffered. */
|
||||
memcpy(ctx->ctr, ctr, sizeof(ctx->ctr));
|
||||
memset(ctx->enc_ctr_buffer, 0, sizeof(ctx->enc_ctr_buffer));
|
||||
ctx->buffer_offset = 0;
|
||||
}
|
||||
|
||||
static inline void _aes192CtrCryptBlocks(Aes192CtrContext *ctx, u8 *dst_u8, const u8 *src_u8, size_t num_blocks) {
|
||||
@ -451,6 +457,19 @@ void aes192CtrCrypt(Aes192CtrContext *ctx, void *dst, const void *src, size_t si
|
||||
CRYPT_FUNC_BODY(_aes192CtrCryptBlocks);
|
||||
}
|
||||
|
||||
void aes256CtrContextCreate(Aes256CtrContext *out, const void *key, const void *ctr) {
|
||||
/* Initialize inner context. */
|
||||
aes256ContextCreate(&out->aes_ctx, key, true);
|
||||
aes256CtrContextResetCtr(out, ctr);
|
||||
}
|
||||
|
||||
void aes256CtrContextResetCtr(Aes256CtrContext *ctx, const void *ctr) {
|
||||
/* Set CTR, nothing is buffered. */
|
||||
memcpy(ctx->ctr, ctr, sizeof(ctx->ctr));
|
||||
memset(ctx->enc_ctr_buffer, 0, sizeof(ctx->enc_ctr_buffer));
|
||||
ctx->buffer_offset = 0;
|
||||
}
|
||||
|
||||
static inline void _aes256CtrCryptBlocks(Aes256CtrContext *ctx, u8 *dst_u8, const u8 *src_u8, size_t num_blocks) {
|
||||
/* Preload all round keys + iv into neon registers. */
|
||||
DECLARE_ROUND_KEY_VAR(0);
|
||||
@ -624,16 +643,6 @@ static inline void _aes256CtrCryptBlocks(Aes256CtrContext *ctx, u8 *dst_u8, cons
|
||||
vst1q_u8(ctx->ctr, ctr0);
|
||||
}
|
||||
|
||||
void aes256CtrContextCreate(Aes256CtrContext *out, const void *key, const void *ctr) {
|
||||
/* Initialize inner context. */
|
||||
aes256ContextCreate(&out->aes_ctx, key, true);
|
||||
|
||||
/* Set IV, nothing is buffered. */
|
||||
memcpy(out->ctr, ctr, sizeof(out->ctr));
|
||||
memset(out->enc_ctr_buffer, 0, sizeof(out->enc_ctr_buffer));
|
||||
out->buffer_offset = 0;
|
||||
}
|
||||
|
||||
void aes256CtrCrypt(Aes256CtrContext *ctx, void *dst, const void *src, size_t size) {
|
||||
CRYPT_FUNC_BODY(_aes256CtrCryptBlocks);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user