From b7f1641bced881eb2a5e564688dedc79849e4fc8 Mon Sep 17 00:00:00 2001 From: CTCaer Date: Tue, 6 Jan 2026 22:49:57 +0200 Subject: [PATCH] bdk: se: add AES OFB encryption/decryption support --- bdk/sec/se.c | 10 ++++++++++ bdk/sec/se.h | 1 + 2 files changed, 11 insertions(+) diff --git a/bdk/sec/se.c b/bdk/sec/se.c index bb1f89ec..7b6e65fe 100644 --- a/bdk/sec/se.c +++ b/bdk/sec/se.c @@ -350,6 +350,16 @@ int se_aes_crypt_cbc(u32 ks, int enc, void *dst, const void *src, u32 size) return _se_execute_aes_oneshot(dst, src, size); } +int se_aes_crypt_ofb(u32 ks, void *dst, const void *src, u32 size) +{ + SE(SE_SPARE_REG) = SE_INPUT_NONCE_LE; + SE(SE_CONFIG_REG) = SE_CONFIG_ENC_MODE(MODE_KEY128) | SE_CONFIG_ENC_ALG(ALG_AES_ENC) | SE_CONFIG_DST(DST_MEMORY); + SE(SE_CRYPTO_CONFIG_REG) = SE_CRYPTO_KEY_INDEX(ks) | SE_CRYPTO_INPUT_SEL(INPUT_AESOUT) | + SE_CRYPTO_CORE_SEL(CORE_ENCRYPT) | SE_CRYPTO_XOR_POS(XOR_BOTTOM); + + return _se_execute_aes_oneshot(dst, src, size); +} + int se_aes_crypt_ctr(u32 ks, void *dst, const void *src, u32 size, void *ctr) { SE(SE_SPARE_REG) = SE_INPUT_NONCE_LE; diff --git a/bdk/sec/se.h b/bdk/sec/se.h index 4de3f721..fe23b933 100644 --- a/bdk/sec/se.h +++ b/bdk/sec/se.h @@ -36,6 +36,7 @@ void se_get_aes_keys(u8 *buf, u8 *keys, u32 keysize); /*! Encryption Functions */ int se_aes_crypt_ecb(u32 ks, int enc, void *dst, const void *src, u32 size); int se_aes_crypt_cbc(u32 ks, int enc, void *dst, const void *src, u32 size); +int se_aes_crypt_ofb(u32 ks, void *dst, const void *src, u32 size); int se_aes_crypt_ctr(u32 ks, void *dst, const void *src, u32 size, void *ctr); int se_aes_xts_crypt_sec(u32 tweak_ks, u32 crypt_ks, int enc, u64 sec, void *dst, void *src, u32 secsize); int se_aes_xts_crypt_sec_nx(u32 tweak_ks, u32 crypt_ks, int enc, u64 sec, u8 *tweak, bool regen_tweak, u32 tweak_exp, void *dst, void *src, u32 sec_size);