mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 19:31:12 +00:00
se: Add set/clear IV and aes key get
This commit is contained in:
parent
100d6cc4a5
commit
88fa4fa861
2 changed files with 36 additions and 0 deletions
32
bdk/sec/se.c
32
bdk/sec/se.c
|
@ -198,6 +198,27 @@ void se_aes_key_set(u32 ks, void *key, u32 size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void se_aes_iv_set(u32 ks, void *iv)
|
||||||
|
{
|
||||||
|
u32 *data = (u32 *)iv;
|
||||||
|
|
||||||
|
for (u32 i = 0; i < TEGRA_SE_AES_MIN_KEY_SIZE / 4; i++)
|
||||||
|
{
|
||||||
|
SE(SE_KEYTABLE_REG_OFFSET) = SE_KEYTABLE_SLOT(ks) | SE_KEYTABLE_QUAD(QUAD_ORG_IV) | i;
|
||||||
|
SE(SE_KEYTABLE_DATA0_REG_OFFSET) = data[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void se_aes_key_get(u32 ks, void *key, u32 size)
|
||||||
|
{
|
||||||
|
u32 *data = (u32 *)key;
|
||||||
|
for (u32 i = 0; i < size / 4; i++)
|
||||||
|
{
|
||||||
|
SE(SE_KEYTABLE_REG_OFFSET) = SE_KEYTABLE_SLOT(ks) | i;
|
||||||
|
data[i] = SE(SE_KEYTABLE_DATA0_REG_OFFSET);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void se_aes_key_clear(u32 ks)
|
void se_aes_key_clear(u32 ks)
|
||||||
{
|
{
|
||||||
for (u32 i = 0; i < TEGRA_SE_AES_MAX_KEY_SIZE / 4; i++)
|
for (u32 i = 0; i < TEGRA_SE_AES_MAX_KEY_SIZE / 4; i++)
|
||||||
|
@ -207,6 +228,16 @@ void se_aes_key_clear(u32 ks)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void se_aes_iv_clear(u32 ks)
|
||||||
|
{
|
||||||
|
for (u32 i = 0; i < TEGRA_SE_AES_MIN_KEY_SIZE / 4; i++)
|
||||||
|
{
|
||||||
|
SE(SE_KEYTABLE_REG_OFFSET) = SE_KEYTABLE_SLOT(ks) | SE_KEYTABLE_QUAD(QUAD_ORG_IV) | i;
|
||||||
|
SE(SE_KEYTABLE_DATA0_REG_OFFSET) = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int se_aes_unwrap_key(u32 ks_dst, u32 ks_src, const void *input)
|
int se_aes_unwrap_key(u32 ks_dst, u32 ks_src, const void *input)
|
||||||
{
|
{
|
||||||
SE(SE_CONFIG_REG_OFFSET) = SE_CONFIG_DEC_ALG(ALG_AES_DEC) | SE_CONFIG_DST(DST_KEYTAB);
|
SE(SE_CONFIG_REG_OFFSET) = SE_CONFIG_DEC_ALG(ALG_AES_DEC) | SE_CONFIG_DST(DST_KEYTAB);
|
||||||
|
@ -336,6 +367,7 @@ int se_calc_sha256(void *hash, u32 *msg_left, const void *src, u32 src_size, u64
|
||||||
int res;
|
int res;
|
||||||
u32 *hash32 = (u32 *)hash;
|
u32 *hash32 = (u32 *)hash;
|
||||||
|
|
||||||
|
//! TODO: src_size must be 512 bit aligned if continuing and not last block for SHA256.
|
||||||
if (src_size > 0xFFFFFF || (u32)hash % 4 || !hash) // Max 16MB - 1 chunks and aligned x4 hash buffer.
|
if (src_size > 0xFFFFFF || (u32)hash % 4 || !hash) // Max 16MB - 1 chunks and aligned x4 hash buffer.
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,12 @@ void se_key_acc_ctrl(u32 ks, u32 flags);
|
||||||
u32 se_key_acc_ctrl_get(u32 ks);
|
u32 se_key_acc_ctrl_get(u32 ks);
|
||||||
void se_get_aes_keys(u8 *buf, u8 *keys, u32 keysize);
|
void se_get_aes_keys(u8 *buf, u8 *keys, u32 keysize);
|
||||||
void se_aes_key_set(u32 ks, void *key, u32 size);
|
void se_aes_key_set(u32 ks, void *key, u32 size);
|
||||||
|
void se_aes_iv_set(u32 ks, void *iv);
|
||||||
|
void se_aes_key_get(u32 ks, void *key, u32 size);
|
||||||
void se_aes_key_clear(u32 ks);
|
void se_aes_key_clear(u32 ks);
|
||||||
|
void se_aes_iv_clear(u32 ks);
|
||||||
int se_aes_unwrap_key(u32 ks_dst, u32 ks_src, const void *input);
|
int se_aes_unwrap_key(u32 ks_dst, u32 ks_src, const void *input);
|
||||||
|
int se_aes_crypt_cbc(u32 ks, u32 enc, void *dst, u32 dst_size, const void *src, u32 src_size);
|
||||||
int se_aes_crypt_ecb(u32 ks, u32 enc, void *dst, u32 dst_size, const void *src, u32 src_size);
|
int se_aes_crypt_ecb(u32 ks, u32 enc, void *dst, u32 dst_size, const void *src, u32 src_size);
|
||||||
int se_aes_crypt_block_ecb(u32 ks, u32 enc, void *dst, const void *src);
|
int se_aes_crypt_block_ecb(u32 ks, u32 enc, void *dst, const void *src);
|
||||||
int se_aes_crypt_ctr(u32 ks, void *dst, u32 dst_size, const void *src, u32 src_size, void *ctr);
|
int se_aes_crypt_ctr(u32 ks, void *dst, u32 dst_size, const void *src, u32 src_size, void *ctr);
|
||||||
|
|
Loading…
Reference in a new issue