blob: 1e60579317b20555a1c1cc1b0d5acafbc96963f7 [file] [log] [blame]
Gilad Ben-Yossef033327a2019-05-15 09:24:04 +03001/*
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
11extern "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
35in an integrated operation.
36
37@return \c CC_OK on success.
38@return A non-zero value from bsv_error.h on failure.
39*/
40CCError_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,
50with 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*/
55CCError_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