Gilad Ben-Yossef | 033327a | 2019-05-15 09:24:04 +0300 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2017-2020 ARM Limited and Contributors. All rights reserved. |
| 3 | * |
| 4 | * SPDX-License-Identifier: BSD-3-Clause |
| 5 | */ |
| 6 | |
| 7 | #ifndef _BSV_CRYPTO_API_H |
| 8 | #define _BSV_CRYPTO_API_H |
| 9 | |
| 10 | #ifdef __cplusplus |
| 11 | extern "C" |
| 12 | { |
| 13 | #endif |
| 14 | |
| 15 | /*! |
| 16 | @file |
| 17 | @brief This file contains the cryptographic ROM APIs of the Boot Services. |
| 18 | |
| 19 | @defgroup cc_bsv_crypto_api CryptoCell Boot Services cryptographic ROM APIs |
| 20 | @{ |
| 21 | @ingroup cc_bsv |
| 22 | */ |
| 23 | |
| 24 | #include "cc_pal_types.h" |
| 25 | #include "cc_sec_defs.h" |
| 26 | #include "cc_address_defs.h" |
| 27 | #include "bsv_crypto_defs.h" |
| 28 | |
| 29 | /*---------------------------- |
| 30 | PUBLIC FUNCTIONS |
| 31 | -----------------------------------*/ |
| 32 | |
| 33 | /*! |
| 34 | @brief This function calculates the SHA-256 digest over contiguous memory |
| 35 | in an integrated operation. |
| 36 | |
| 37 | @return \c CC_OK on success. |
| 38 | @return A non-zero value from bsv_error.h on failure. |
| 39 | */ |
| 40 | CCError_t CC_BsvSha256( |
| 41 | unsigned long hwBaseAddress, /*!< [in] The base address of the CryptoCell HW registers. */ |
| 42 | uint8_t *pDataIn, /*!< [in] A pointer to the input buffer to be hashed. The buffer must be contiguous. */ |
| 43 | size_t dataSize, /*!< [in] The size of the data to be hashed, in bytes. */ |
| 44 | CCHashResult_t hashBuff /*!< [out] A pointer to a word-aligned 32-byte buffer. */ |
| 45 | ); |
| 46 | |
| 47 | |
| 48 | /*! |
| 49 | @brief This function allows you to calculate SHA256 digest of an image with decryption base on AES-CTR, |
| 50 | with HW or user key. |
| 51 | |
| 52 | @return \c CC_OK on success. |
| 53 | @return A non-zero value from bsv_error.h on failure. (in this case, hashBuff will be returned clean, while the output data should be cleaned by the user). |
| 54 | */ |
| 55 | CCError_t CC_BsvCryptoImageDecrypt( unsigned long hwBaseAddress, /*!< [in] The base address of the CryptoCell HW registers. */ |
| 56 | CCBsvflowMode_t flow, /*!< [in] The supported operations are: HASH, AES to HASH, AES and HASH. */ |
| 57 | CCBsvKeyType_t keyType, /*!< [in] The key type to use: Kce, Kceicv, or user key. */ |
| 58 | uint8_t *pUserKey, /*!< [in] A pointer to the user key buffer in case keyType is CC_BSV_USER_KEY. */ |
| 59 | size_t userKeySize, /*!< [in] The user key size in bytes (128bits) in case keyType is CC_BSV_USER_KEY. */ |
| 60 | uint8_t *pIvBuf, /*!< [in] A pointer to the IV / counter buffer. */ |
| 61 | uint8_t *pInputData, /*!< [in] A pointer to the input data. */ |
| 62 | uint8_t *pOutputData, /*!< [out] A pointer to the output buffer. (optional – should be null in case of hash only). */ |
| 63 | size_t dataSize, /*!< [in] The size of the input data in bytes. MUST be multiple of AES block size. */ |
| 64 | CCHashResult_t hashBuff /*!< [out] A pointer to a word-aligned 32-byte digest output buffer. */ |
| 65 | ); |
| 66 | |
| 67 | #ifdef __cplusplus |
| 68 | } |
| 69 | #endif |
| 70 | |
| 71 | #endif |
| 72 | |
| 73 | /** |
| 74 | @} |
| 75 | */ |
| 76 | |