2018-02-17 07:55:08 +00:00
|
|
|
#ifndef EXOSPHERE_SE_H
|
|
|
|
#define EXOSPHERE_SE_H
|
|
|
|
|
|
|
|
/* Exosphere driver for the Tegra X1 security engine. */
|
|
|
|
|
|
|
|
/* TODO: Define constants for the C driver. */
|
|
|
|
|
|
|
|
/* WIP, API subject to change. */
|
|
|
|
|
|
|
|
#define KEYSLOT_AES_MAX 0x10
|
|
|
|
#define KEYSLOT_RSA_MAX 0x2
|
|
|
|
|
|
|
|
void set_security_engine_address(void *security_engine);
|
|
|
|
|
|
|
|
void set_aes_keyslot_flags(unsigned int keyslot, unsigned int flags);
|
|
|
|
void set_rsa_keyslot_flags(unsigned int keyslot, unsigned int flags);
|
|
|
|
void clear_aes_keyslot(unsigned int keyslot);
|
|
|
|
void clear_rsa_keyslot(unsigned int keyslot);
|
|
|
|
|
|
|
|
void set_aes_keyslot(unsigned int keyslot, const char *key, unsigned int key_size);
|
2018-02-17 07:57:44 +00:00
|
|
|
void crypt_data_into_keyslot(unsigned int keyslot_dst, unsigned int keyslot_src, const char *wrapped_key, unsigned int wrapped_key_size);
|
2018-02-17 07:55:08 +00:00
|
|
|
void set_rsa_keyslot(unsigned int keyslot, const char *modulus, unsigned int modulus_size, const char *exp, unsigned int exp_size);
|
|
|
|
void set_aes_keyslot_iv(unsigned int keyslot, const char *iv, unsigned int iv_size);
|
|
|
|
void set_se_ctr(const unsigned int *ctr);
|
|
|
|
|
|
|
|
void se_crypt_aes(unsigned int keyslot, char *dst, unsigned int dst_size, const char *src, unsigned int src_size, unsigned int config, unsigned int mode, unsigned int (*callback)(void));
|
|
|
|
void se_exp_mod(unsigned int keyslot, char *buf, unsigned int size, unsigned int (*callback)(void));
|
|
|
|
|
|
|
|
/* TODO: SE context save API, consider extending AES API for secure world vs non-secure world operations. */
|
|
|
|
/* In particular, smc_crypt_aes takes in raw DMA lists, and we need to support that. */
|
|
|
|
|
|
|
|
#endif /* EXOSPHERE_SE_H */
|