mirror of
https://github.com/switchbrew/libnx.git
synced 2025-07-04 18:42:15 +02:00
Implement accelerated AES-XTS
This commit is contained in:
parent
182a372c5b
commit
f2fe4da722
@ -8,4 +8,5 @@
|
|||||||
|
|
||||||
#include "crypto/aes.h"
|
#include "crypto/aes.h"
|
||||||
#include "crypto/aes_cbc.h"
|
#include "crypto/aes_cbc.h"
|
||||||
#include "crypto/aes_ctr.h"
|
#include "crypto/aes_ctr.h"
|
||||||
|
#include "crypto/aes_xts.h"
|
55
nx/include/switch/crypto/aes_xts.h
Normal file
55
nx/include/switch/crypto/aes_xts.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/**
|
||||||
|
* @file aes_xts.h
|
||||||
|
* @brief Switch accelerated AES-XTS implementation.
|
||||||
|
* @copyright libnx Authors
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
#include "aes.h"
|
||||||
|
|
||||||
|
/// Context for AES-128 XTS.
|
||||||
|
typedef struct {
|
||||||
|
Aes128Context aes_ctx;
|
||||||
|
Aes128Context tweak_ctx;
|
||||||
|
u8 tweak[AES_BLOCK_SIZE];
|
||||||
|
u8 buffer[AES_BLOCK_SIZE];
|
||||||
|
size_t num_buffered;
|
||||||
|
} Aes128XtsContext;
|
||||||
|
|
||||||
|
/// Context for AES-192 XTS.
|
||||||
|
typedef struct {
|
||||||
|
Aes192Context aes_ctx;
|
||||||
|
Aes192Context tweak_ctx;
|
||||||
|
u8 tweak[AES_BLOCK_SIZE];
|
||||||
|
u8 buffer[AES_BLOCK_SIZE];
|
||||||
|
size_t num_buffered;
|
||||||
|
} Aes192XtsContext;
|
||||||
|
|
||||||
|
/// Context for AES-256 XTS.
|
||||||
|
typedef struct {
|
||||||
|
Aes256Context aes_ctx;
|
||||||
|
Aes256Context tweak_ctx;
|
||||||
|
u8 tweak[AES_BLOCK_SIZE];
|
||||||
|
u8 buffer[AES_BLOCK_SIZE];
|
||||||
|
size_t num_buffered;
|
||||||
|
} Aes256XtsContext;
|
||||||
|
|
||||||
|
/// 128-bit XTS API.
|
||||||
|
void aes128XtsContextCreate(Aes128XtsContext *out, const void *key0, const void *key1, bool is_encryptor);
|
||||||
|
void aes128XtsContextResetTweak(Aes128XtsContext *ctx, const void *tweak);
|
||||||
|
void aes128XtsContextResetSector(Aes128XtsContext *ctx, uint64_t sector, bool nintendo);
|
||||||
|
size_t aes128XtsEncrypt(Aes128XtsContext *ctx, void *dst, const void *src, size_t size);
|
||||||
|
size_t aes128XtsDecrypt(Aes128XtsContext *ctx, void *dst, const void *src, size_t size);
|
||||||
|
|
||||||
|
/// 192-bit XTS API.
|
||||||
|
void aes192XtsContextCreate(Aes192XtsContext *out, const void *key0, const void *key1, bool is_encryptor);
|
||||||
|
void aes192XtsContextResetTweak(Aes192XtsContext *ctx, const void *tweak);
|
||||||
|
void aes192XtsContextResetSector(Aes192XtsContext *ctx, uint64_t sector, bool nintendo);
|
||||||
|
size_t aes192XtsEncrypt(Aes192XtsContext *ctx, void *dst, const void *src, size_t size);
|
||||||
|
size_t aes192XtsDecrypt(Aes192XtsContext *ctx, void *dst, const void *src, size_t size);
|
||||||
|
|
||||||
|
/// 256-bit XTS API.
|
||||||
|
void aes256XtsContextCreate(Aes256XtsContext *out, const void *key0, const void *key1, bool is_encryptor);
|
||||||
|
void aes256XtsContextResetTweak(Aes256XtsContext *ctx, const void *tweak);
|
||||||
|
void aes256XtsContextResetSector(Aes256XtsContext *ctx, uint64_t sector, bool nintendo);
|
||||||
|
size_t aes256XtsEncrypt(Aes256XtsContext *ctx, void *dst, const void *src, size_t size);
|
||||||
|
size_t aes256XtsDecrypt(Aes256XtsContext *ctx, void *dst, const void *src, size_t size);
|
1207
nx/source/crypto/aes_xts.c
Normal file
1207
nx/source/crypto/aes_xts.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user