 389ff92cc1
			
		
	
	
		389ff92cc1
		
			
		
	
	
	
	
		
			
			* Makefile, Scripts: new linter * About: remove ID from IC * Firmware: remove double define for DIVC/DIVR * Scripts: check folder names too. Docker: replace syntax check with make lint. * Reformat Sources and Migrate to new file naming convention * Docker: symlink clang-format-12 to clang-format * Add coding style guide
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|  * @file furi_hal_crypto.h
 | |
|  * Cryptography HAL API
 | |
|  */
 | |
| #pragma once
 | |
| 
 | |
| #include <stdbool.h>
 | |
| #include <stdint.h>
 | |
| #include <stddef.h>
 | |
| 
 | |
| /** FuriHalCryptoKey Type */
 | |
| typedef enum {
 | |
|     FuriHalCryptoKeyTypeMaster, /**< Master key */
 | |
|     FuriHalCryptoKeyTypeSimple, /**< Simple enencrypted key */
 | |
|     FuriHalCryptoKeyTypeEncrypted, /**< Encrypted with Master key */
 | |
| } FuriHalCryptoKeyType;
 | |
| 
 | |
| /** FuriHalCryptoKey Size in bits */
 | |
| typedef enum {
 | |
|     FuriHalCryptoKeySize128,
 | |
|     FuriHalCryptoKeySize256,
 | |
| } FuriHalCryptoKeySize;
 | |
| 
 | |
| /** FuriHalCryptoKey */
 | |
| typedef struct {
 | |
|     FuriHalCryptoKeyType type;
 | |
|     FuriHalCryptoKeySize size;
 | |
|     uint8_t* data;
 | |
| } FuriHalCryptoKey;
 | |
| 
 | |
| /** Initialize cryptography layer This includes AES engines, PKA and RNG
 | |
|  */
 | |
| void furi_hal_crypto_init();
 | |
| 
 | |
| bool furi_hal_crypto_verify_enclave(uint8_t* keys_nb, uint8_t* valid_keys_nb);
 | |
| 
 | |
| bool furi_hal_crypto_verify_key(uint8_t key_slot);
 | |
| 
 | |
| /** Store key in crypto storage
 | |
|  *
 | |
|  * @param      key   FuriHalCryptoKey to store. Only Master, Simple or
 | |
|  *                   Encrypted
 | |
|  * @param      slot  pinter to int where store slot number will be saved
 | |
|  *
 | |
|  * @return     true on success
 | |
|  */
 | |
| bool furi_hal_crypto_store_add_key(FuriHalCryptoKey* key, uint8_t* slot);
 | |
| 
 | |
| /** Init AES engine and load key from crypto store
 | |
|  *
 | |
|  * @param      slot  store slot number
 | |
|  * @param[in]  iv    pointer to 16 bytes Initialization Vector data
 | |
|  *
 | |
|  * @return     true on success
 | |
|  */
 | |
| bool furi_hal_crypto_store_load_key(uint8_t slot, const uint8_t* iv);
 | |
| 
 | |
| /** Unload key engine and deinit AES engine
 | |
|  *
 | |
|  * @param      slot  store slot number
 | |
|  *
 | |
|  * @return     true on success
 | |
|  */
 | |
| bool furi_hal_crypto_store_unload_key(uint8_t slot);
 | |
| 
 | |
| /** Encrypt data
 | |
|  *
 | |
|  * @param      input   pointer to input data
 | |
|  * @param      output  pointer to output data
 | |
|  * @param      size    input/output buffer size in bytes
 | |
|  *
 | |
|  * @return     true on success
 | |
|  */
 | |
| bool furi_hal_crypto_encrypt(const uint8_t* input, uint8_t* output, size_t size);
 | |
| 
 | |
| /** Decrypt data
 | |
|  *
 | |
|  * @param      input   pointer to input data
 | |
|  * @param      output  pointer to output data
 | |
|  * @param      size    input/output buffer size in bytes
 | |
|  *
 | |
|  * @return     true on success
 | |
|  */
 | |
| bool furi_hal_crypto_decrypt(const uint8_t* input, uint8_t* output, size_t size);
 |