123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- /* Copyright (C) 2018 RDA Technologies Limited and/or its affiliates("RDA").
- * All rights reserved.
- *
- * This software is supplied "AS IS" without any warranties.
- * RDA assumes no responsibility or liability for the use of the software,
- * conveys no license or title under any patent, copyright, or mask work
- * right to the product. RDA reserves the right to make changes in the
- * software without notification. RDA also make no representation or
- * warranty that such application will be suitable for the specified use
- * without further testing or modification.
- */
- #ifndef _DRV_SECURE_H_
- #define _DRV_SECURE_H_
- #include "osi_compiler.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /** 8910 image signature size */
- #define DRV_SECURE_BOOT_SIG_SIZE_8910 (608)
- /**
- * \brief opaque data structure for sig checker
- *
- * \p drvSigChecker_t is for signature checking, without holding all data
- * in RAM. Rather the data to be checked can be feed progressly. For example:
- *
- * \code{.cpp}
- * if (!drvSecureBootEnable())
- * return true;
- *
- * drvSigChecker_t *check = drvSigCheckerCreate(sig);
- * drvSigCheckerUpdate(check, data1, size1);
- * drvSigCheckerUpdate(check, data2, size2);
- * // ......
- * bool result = drvSigCheckerFinalCheck(check);
- * drvSigCheckerDelete(checker);
- * return result;
- * \endcode
- *
- * For progressive signature checker, it is recommended to check whether
- * secure boot is enabled beforehand.
- */
- typedef struct drvSigChecker drvSigChecker_t;
- /**
- * \brief Read the security flag from efuse
- *
- * \return
- * - true secure boot is enable.
- * - false secure boot is disable.
- */
- bool drvSecureBootEnable(void);
- /**
- * \brief Write the security flag into the efuse
- *
- * When secure boot is already enabled, this will return true directly.
- *
- * When bootloader is not signed, it will return false.
- *
- * It is possible to write multiple efuse bits inside. If there are power
- * failure during that, it is possible that efuse bits will be
- * inconsistent. And then the system will be unusable.
- *
- * \return
- * - true on success
- * - false on fail
- */
- bool drvSecureWriteSecureFlags(void);
- /**
- * \brief Get UID
- *
- * UID is a chip unique information. It can be used as unique
- * identification of chip. Also, development certification will use this.
- *
- * \param id output UID
- * \return
- * - true on success
- * - false on fail
- */
- bool drvGetUId(osiBits64_t *id);
- /**
- * \brief create a signature checker
- *
- * Signature check will use public key in efuse, so caller should call this
- * only when there are valid public key in efuse.
- *
- * \param sig signature, the memory can be released after this call
- * \return
- * - signature checker instance
- * - NULL on error, invalid parameter or out of memory
- */
- drvSigChecker_t *drvSigCheckerCreate(const void *sig);
- /**
- * \brief delete the signature checker
- *
- * \param checker signature checker
- */
- void drvSigCheckerDelete(drvSigChecker_t *checker);
- /**
- * \brief update data to be signed to signature checker
- *
- * \param checker signature checker
- * \param data data to be signed
- * \param size data size
- */
- void drvSigCheckerUpdate(drvSigChecker_t *checker, const void *data, uint32_t size);
- /**
- * \brief finalize signature checker, and check signature
- *
- * \param checker signature checker
- * \return
- * - true on success
- * - false on signature check fail
- */
- bool drvSigCheckerFinalCheck(drvSigChecker_t *checker);
- /**
- * \brief signature check with combined data and signature
- *
- * Signature check will use public key in efuse, so caller should call this
- * only when there are valid public key in efuse.
- *
- * The signature size of 8910 is fixed as \p DRV_SECURE_BOOT_SIG_SIZE_8910.
- * And the signature is at the end of \p data.
- *
- * \param data combined data to be signed and signature
- * \param size total size of data and signature
- * \return
- * - true on success
- * - false on fail, invalid parameters or verify fail
- */
- bool drvSecureEmbedSigCheck(const void *data, uint32_t size);
- /**
- * \brief signature check with separated data and signature
- *
- * Signature check will use public key in efuse, so caller should call this
- * only when there are valid public key in efuse.
- *
- * The signature size of 8910 is fixed as \p DRV_SECURE_BOOT_SIG_SIZE_8910.
- *
- * \param data data to be signed
- * \param data_size data size
- * \param sig signature
- * \return
- * - true on success
- * - false on fail, invalid parameters or verify fail
- */
- bool drvSecureSigCheck(const void *data, uint32_t data_size, const void *sig);
- /**
- * \brief signature check for file with embedded signature
- *
- * Signature check will use public key in efuse, so caller should call this
- * only when there are valid public key in efuse.
- *
- * \param fname file name
- * \return
- * - true on success
- * - false on fail, file access error or verify fail
- */
- bool drvSecureFileEmbedSigCheck(const char *fname);
- /**
- * \brief signature header check
- *
- * Check the input whether contains the valid signature header
- *
- * \param sig signature
- * \return
- * - true if contains valid header
- * - false if not valid header
- */
- bool drvSecureContainValidSigHeader(const void *sig);
- #ifdef CONFIG_CP_SIGN_ENABLE
- bool cpimagecheck(const void *header);
- #endif
- //#ifdef CONFIG_TRUSTZONE_SUPPORT //quectel
- #ifdef CONFIG_TEE_SUPPORT
- uint32_t drvGetSecureVersion(void);
- bool drvGetSecureLockStatus(void);
- bool drvVerifyCertPubkey(const void *cert_header);
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif /* _DRV_SECURE_H_ */
|