Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/targets/furi_hal_include/furi_hal_crypto.h')
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_crypto.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/firmware/targets/furi_hal_include/furi_hal_crypto.h b/firmware/targets/furi_hal_include/furi_hal_crypto.h
new file mode 100644
index 00000000..fc3974bb
--- /dev/null
+++ b/firmware/targets/furi_hal_include/furi_hal_crypto.h
@@ -0,0 +1,84 @@
+/**
+ * @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);