Add headers to enable CryptoCell integration
This patch adds header files with required declarations and macro definitions to enable integration with CryptoCell SBROM version `CC712 – Release 1.0.0.1061`. These headers enable ARM Trusted Firmware to build and link with CryptoCell SBROM library. Change-Id: I501eda7fe1429acb61db8e1cab78cc9aee9c1871 Signed-off-by: Soby Mathew <soby.mathew@arm.com>
This commit is contained in:
parent
048531d7ed
commit
bdd1cbf5e8
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef _CC_CRYPTO_BOOT_DEFS_H
|
||||
#define _CC_CRYPTO_BOOT_DEFS_H
|
||||
|
||||
/*! @file
|
||||
@brief This file contains SBROM definitions
|
||||
*/
|
||||
|
||||
/*! Version counters value. */
|
||||
typedef enum {
|
||||
|
||||
CC_SW_VERSION_COUNTER1 = 1, /*!< Counter 1 - trusted version. */
|
||||
CC_SW_VERSION_COUNTER2, /*!< Counter 2 - non trusted version. */
|
||||
|
||||
CC_SW_VERSION_MAX = 0x7FFFFFFF
|
||||
|
||||
} CCSbSwVersionId_t;
|
||||
|
||||
/* HASH boot key definition */
|
||||
typedef enum {
|
||||
CC_SB_HASH_BOOT_KEY_0_128B = 0, /*!< 128-bit truncated SHA256 digest of public key 0. */
|
||||
CC_SB_HASH_BOOT_KEY_1_128B = 1, /*!< 128-bit truncated SHA256 digest of public key 1. */
|
||||
CC_SB_HASH_BOOT_KEY_256B = 2, /*!< 256-bit SHA256 digest of public key. */
|
||||
CC_SB_HASH_BOOT_NOT_USED = 0xFF,
|
||||
CC_SB_HASH_MAX_NUM = 0x7FFFFFFF, /*!\internal use external 128-bit truncated SHA256 digest */
|
||||
} CCSbPubKeyIndexType_t;
|
||||
|
||||
|
||||
#endif
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
/*!
|
||||
@file
|
||||
@brief This file contains the platform-dependent definitions that are used in the SBROM code.
|
||||
*/
|
||||
|
||||
#ifndef _CC_PAL_SB_PLAT_H
|
||||
#define _CC_PAL_SB_PLAT_H
|
||||
|
||||
#include "cc_pal_types.h"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/*! Definition of DMA address type, can be 32 bits or 64 bits according to CryptoCell's HW. */
|
||||
typedef uint64_t CCDmaAddr_t;
|
||||
/*! Definition of CryptoCell address type, can be 32 bits or 64 bits according to platform. */
|
||||
typedef uintptr_t CCAddr_t;
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef CC_PAL_TYPES_H
|
||||
#define CC_PAL_TYPES_H
|
||||
|
||||
/*!
|
||||
@file
|
||||
@brief This file contains platform-dependent definitions and types.
|
||||
*/
|
||||
|
||||
#include "cc_pal_types_plat.h"
|
||||
|
||||
typedef enum {
|
||||
CC_FALSE = 0,
|
||||
CC_TRUE = 1
|
||||
} CCBool;
|
||||
|
||||
#define CC_SUCCESS 0UL
|
||||
#define CC_FAIL 1UL
|
||||
|
||||
#define CC_1K_SIZE_IN_BYTES 1024
|
||||
#define CC_BITS_IN_BYTE 8
|
||||
#define CC_BITS_IN_32BIT_WORD 32
|
||||
#define CC_32BIT_WORD_SIZE (sizeof(uint32_t))
|
||||
|
||||
#define CC_OK CC_SUCCESS
|
||||
|
||||
#define CC_UNUSED_PARAM(prm) ((void)prm)
|
||||
|
||||
#define CC_MAX_UINT32_VAL (0xFFFFFFFF)
|
||||
|
||||
#define CALC_FULL_BYTES(numBits) (((numBits) + (CC_BITS_IN_BYTE - 1))/CC_BITS_IN_BYTE)
|
||||
#define CALC_FULL_32BIT_WORDS(numBits) (((numBits) + (CC_BITS_IN_32BIT_WORD - 1))/CC_BITS_IN_32BIT_WRD)
|
||||
#define CALC_32BIT_WORDS_FROM_BYTES(sizeBytes) (((sizeBytes) + CC_32BIT_WORD_SIZE - 1)/CC_32BIT_WORD_SIZE)
|
||||
|
||||
#endif
|
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
/*! @file
|
||||
@brief This file contains basic type definitions that are platform-dependent.
|
||||
*/
|
||||
#ifndef _CC_PAL_TYPES_PLAT_H
|
||||
#define _CC_PAL_TYPES_PLAT_H
|
||||
/* Host specific types for standard (ISO-C99) compilant platforms */
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
|
||||
typedef uint32_t CCStatus;
|
||||
|
||||
#define CCError_t CCStatus
|
||||
#define CC_INFINITE 0xFFFFFFFF
|
||||
|
||||
#define CEXPORT_C
|
||||
#define CIMPORT_C
|
||||
|
||||
#endif /*_CC_PAL_TYPES_PLAT_H*/
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef _CC_SEC_DEFS_H
|
||||
#define _CC_SEC_DEFS_H
|
||||
|
||||
/*!
|
||||
@file
|
||||
@brief This file contains general hash definitions and types.
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/*! The hashblock size in words. */
|
||||
#define HASH_BLOCK_SIZE_IN_WORDS 16
|
||||
/*! The hash - SHA2 results in words. */
|
||||
#define HASH_RESULT_SIZE_IN_WORDS 8
|
||||
#define HASH_RESULT_SIZE_IN_BYTES 32
|
||||
|
||||
/*! Definition for hash result array. */
|
||||
typedef uint32_t CCHashResult_t[HASH_RESULT_SIZE_IN_WORDS];
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef _CRYPTO_DRIVER_H
|
||||
#define _CRYPTO_DRIVER_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include "cc_pal_sb_plat.h"
|
||||
#include "cc_sec_defs.h"
|
||||
|
||||
/*----------------------------
|
||||
PUBLIC FUNCTIONS
|
||||
-----------------------------------*/
|
||||
/*!
|
||||
* @brief This function gives the functionality of integrated hash
|
||||
*
|
||||
* @param[in] hwBaseAddress - CryptoCell base address
|
||||
* @param[out] hashResult - the HASH result.
|
||||
*
|
||||
*/
|
||||
CCError_t SBROM_CryptoHash(unsigned long hwBaseAddress, CCDmaAddr_t inputDataAddr, uint32_t BlockSize,
|
||||
CCHashResult_t hashResult);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef _NVM__H
|
||||
#define _NVM__H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include "cc_crypto_boot_defs.h"
|
||||
#include "cc_sec_defs.h"
|
||||
#include "cc_pal_types.h"
|
||||
|
||||
/*------------------------------------
|
||||
DEFINES
|
||||
-------------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief This function reads the LCS from the SRAM/NVM
|
||||
*
|
||||
* @param[in] hwBaseAddress - CryptoCell base address
|
||||
*
|
||||
* @param[in/out] lcs_ptr - pointer to memory to store the LCS
|
||||
*
|
||||
* @return CCError_t - On success the value CC_OK is returned, and on failure -a value from NVM_error.h
|
||||
*/
|
||||
CCError_t NVM_GetLCS(unsigned long hwBaseAddress, uint32_t *lcs_ptr);
|
||||
|
||||
/**
|
||||
* @brief The NVM_ReadHASHPubKey function is a NVM interface function -
|
||||
* The function retrieves the HASH of the device Public key from the SRAM/NVM
|
||||
*
|
||||
* @param[in] hwBaseAddress - CryptoCell base address
|
||||
*
|
||||
* @param[in] pubKeyIndex - Index of HASH in the OTP
|
||||
*
|
||||
* @param[out] PubKeyHASH - the public key HASH.
|
||||
*
|
||||
* @param[in] hashSizeInWords - hash size (valid values: 4W, 8W)
|
||||
*
|
||||
* @return CCError_t - On success the value CC_OK is returned, and on failure -a value from NVM_error.h
|
||||
*/
|
||||
|
||||
CCError_t NVM_ReadHASHPubKey(unsigned long hwBaseAddress, CCSbPubKeyIndexType_t pubKeyIndex, CCHashResult_t PubKeyHASH, uint32_t hashSizeInWords);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef _NVM_OTP_H
|
||||
#define _NVM_OTP_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include "cc_crypto_boot_defs.h"
|
||||
#include "cc_pal_types.h"
|
||||
|
||||
/*------------------------------------
|
||||
DEFINES
|
||||
-------------------------------------*/
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief The NVM_GetSwVersion function is a NVM interface function -
|
||||
* The function retrieves the SW version from the SRAM/NVM.
|
||||
* In case of OTP, we support up to 16 anti-rollback counters (taken from the certificate)
|
||||
*
|
||||
* @param[in] hwBaseAddress - CryptoCell base address
|
||||
*
|
||||
* @param[in] counterId - relevant only for OTP (valid values: 1,2)
|
||||
*
|
||||
* @param[out] swVersion - the minimum SW version
|
||||
*
|
||||
* @return CCError_t - On success the value CC_OK is returned, and on failure -a value from NVM_error.h
|
||||
*/
|
||||
CCError_t NVM_GetSwVersion(unsigned long hwBaseAddress, CCSbSwVersionId_t counterId, uint32_t *swVersion);
|
||||
|
||||
|
||||
/**
|
||||
* @brief The NVM_SetSwVersion function is a NVM interface function -
|
||||
* The function writes the SW version into the SRAM/NVM.
|
||||
* In case of OTP, we support up to 16 anti-rollback counters (taken from the certificate)
|
||||
*
|
||||
* @param[in] hwBaseAddress - CryptoCell base address
|
||||
*
|
||||
* @param[in] counterId - relevant only for OTP (valid values: 1,2)
|
||||
*
|
||||
* @param[in] swVersion - the minimum SW version
|
||||
*
|
||||
* @return CCError_t - On success the value CC_OK is returned, and on failure -a value from NVM_error.h
|
||||
*/
|
||||
CCError_t NVM_SetSwVersion(unsigned long hwBaseAddress, CCSbSwVersionId_t counterId, uint32_t swVersion);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef RSA_H
|
||||
#define RSA_H
|
||||
|
||||
/*
|
||||
* All the includes that are needed for code using this module to
|
||||
* compile correctly should be #included here.
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include "cc_pal_types.h"
|
||||
|
||||
/************************ Defines ******************************/
|
||||
|
||||
/* the modulus size ion bits */
|
||||
#define RSA_MOD_SIZE_IN_BITS 2048UL
|
||||
#define RSA_MOD_SIZE_IN_BYTES (CALC_FULL_BYTES(RSA_MOD_SIZE_IN_BITS))
|
||||
#define RSA_MOD_SIZE_IN_WORDS (CALC_FULL_32BIT_WORDS(RSA_MOD_SIZE_IN_BITS))
|
||||
#define RSA_MOD_SIZE_IN_256BITS (RSA_MOD_SIZE_IN_WORDS/8)
|
||||
#define RSA_EXP_SIZE_IN_BITS 17UL
|
||||
#define RSA_EXP_SIZE_IN_BYTES (CALC_FULL_BYTES(RSA_EXP_SIZE_IN_BITS))
|
||||
|
||||
/* size of buffer for Barrett modulus tag NP, used in PKA algorithms */
|
||||
#define RSA_HW_PKI_PKA_BARRETT_MOD_TAG_SIZE_IN_BITS 132
|
||||
#define RSA_HW_PKI_PKA_BARRETT_MOD_TAG_SIZE_IN_BYTES (CALC_FULL_BYTES(RSA_HW_PKI_PKA_BARRETT_MOD_TAG_SIZE_IN_BITS))
|
||||
#define RSA_HW_PKI_PKA_BARRETT_MOD_TAG_SIZE_IN_WORDS (CALC_FULL_32BIT_WORDS(RSA_HW_PKI_PKA_BARRETT_MOD_TAG_SIZE_IN_BITS))
|
||||
|
||||
/*
|
||||
* @brief The RSA_CalcNp calculates Np value and saves it into Np_ptr:
|
||||
*
|
||||
*
|
||||
|
||||
* @param[in] hwBaseAddress - HW base address. Relevant for HW
|
||||
* implementation, for SW it is ignored.
|
||||
* @N_ptr[in] - The pointer to the modulus buffer.
|
||||
* @Np_ptr[out] - pointer to Np vector buffer. Its size must be >= 160.
|
||||
*/
|
||||
void RSA_CalcNp(unsigned long hwBaseAddress,
|
||||
uint32_t *N_ptr,
|
||||
uint32_t *Np_ptr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef _SBROM_BSV_API_H
|
||||
#define _SBROM_BSV_API_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/*! @file
|
||||
@brief This file contains all SBROM library APIs and definitions.
|
||||
*/
|
||||
#include "cc_pal_types.h"
|
||||
|
||||
/* Life cycle state definitions */
|
||||
#define CC_BSV_CHIP_MANUFACTURE_LCS 0x0 /*!< CM lifecycle value. */
|
||||
#define CC_BSV_DEVICE_MANUFACTURE_LCS 0x1 /*!< DM lifecycle value. */
|
||||
#define CC_BSV_SECURITY_DISABLED_LCS 0x3 /*!< SD lifecycle value. */
|
||||
#define CC_BSV_SECURE_LCS 0x5 /*!< Secure lifecycle value. */
|
||||
#define CC_BSV_RMA_LCS 0x7 /*!< RMA lifecycle value. */
|
||||
|
||||
/*----------------------------
|
||||
PUBLIC FUNCTIONS
|
||||
-----------------------------------*/
|
||||
|
||||
/*!
|
||||
@brief This function should be the first ARM TrustZone CryptoCell TEE SBROM library API called.
|
||||
It verifies the HW product and version numbers.
|
||||
|
||||
@return CC_OK On success.
|
||||
@return A non-zero value from sbrom_bsv_error.h on failure.
|
||||
*/
|
||||
CCError_t CC_BsvSbromInit(
|
||||
unsigned long hwBaseAddress /*!< [in] HW registers base address. */
|
||||
);
|
||||
|
||||
|
||||
/*!
|
||||
@brief This function can be used for checking the LCS value, after CC_BsvLcsGetAndInit was called by the Boot ROM.
|
||||
|
||||
@return CC_OK On success.
|
||||
@return A non-zero value from sbrom_bsv_error.h on failure.
|
||||
*/
|
||||
CCError_t CC_BsvLcsGet(
|
||||
unsigned long hwBaseAddress, /*!< [in] HW registers base address. */
|
||||
uint32_t *pLcs /*!< [out] Returned lifecycle state. */
|
||||
);
|
||||
|
||||
/*!
|
||||
@brief This function retrieves the HW security lifecycle state, performs validity checks,
|
||||
and additional initializations in case the LCS is RMA (sets the Kce to fixed value).
|
||||
\note Invalid LCS results in an error returned.
|
||||
In this case, the customer's code must completely disable the device.
|
||||
|
||||
@return CC_OK On success.
|
||||
@return A non-zero value from sbrom_bsv_error.h on failure.
|
||||
*/
|
||||
CCError_t CC_BsvLcsGetAndInit(
|
||||
unsigned long hwBaseAddress, /*!< [in] HW registers base address. */
|
||||
uint32_t *pLcs /*!< [out] Returned lifecycle state. */
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef _SECURE_BOOT_BASE_FUNC_H
|
||||
#define _SECURE_BOOT_BASE_FUNC_H
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include "cc_pal_types.h"
|
||||
#include "secureboot_gen_defs.h"
|
||||
|
||||
|
||||
/*----------------------------
|
||||
PUBLIC FUNCTIONS
|
||||
-----------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief This function calculates the HASH over the given data and than verify
|
||||
* RSA signature on that hashed data
|
||||
*
|
||||
* @param[in] hwBaseAddr - CryptoCell base address
|
||||
* @param[in] pData - pointer to the data to be verified
|
||||
* @param[in] pNParams - a pointer to the public key parameters
|
||||
* @param[in] pSignature - a pointer to the signature structure
|
||||
* @param[in] sizeOfData - size of the data to calculate the HASH on (in bytes)
|
||||
* @param[in] RSAAlg - RSA algorithm to use
|
||||
*
|
||||
* @return CCError_t - On success the value CC_OK is returned,
|
||||
* on failure - a value from BootImagesVerifier_error.h
|
||||
*/
|
||||
CCError_t CCSbVerifySignature(unsigned long hwBaseAddress,
|
||||
uint32_t *pData,
|
||||
CCSbNParams_t *pNParams,
|
||||
CCSbSignature_t *pSignature,
|
||||
uint32_t sizeOfData,
|
||||
CCSbRsaAlg_t RSAAlg);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef _SECURE_BOOT_GEN_DEFS_H
|
||||
#define _SECURE_BOOT_GEN_DEFS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/*! @file
|
||||
@brief This file contains all of the definitions and structures that are used for the secure boot.
|
||||
*/
|
||||
|
||||
#include "cc_pal_sb_plat.h"
|
||||
#include "cc_sec_defs.h"
|
||||
|
||||
|
||||
/* General definitions */
|
||||
/***********************/
|
||||
|
||||
/*RSA definitions*/
|
||||
#define SB_RSA_MOD_SIZE_IN_WORDS 64
|
||||
#define SB_RSA_HW_PKI_PKA_BARRETT_MOD_TAG_SIZE_IN_WORDS 5
|
||||
|
||||
|
||||
/*! Public key data structure. */
|
||||
typedef struct {
|
||||
uint32_t N[SB_RSA_MOD_SIZE_IN_WORDS]; /*!< N public key, big endian representation. */
|
||||
uint32_t Np[SB_RSA_HW_PKI_PKA_BARRETT_MOD_TAG_SIZE_IN_WORDS]; /*!< Np (Barrett n' value). */
|
||||
} CCSbNParams_t;
|
||||
|
||||
/*! Signature structure. */
|
||||
typedef struct {
|
||||
uint32_t sig[SB_RSA_MOD_SIZE_IN_WORDS]; /*!< RSA PSS signature. */
|
||||
} CCSbSignature_t;
|
||||
|
||||
|
||||
/********* Supported algorithms definitions ***********/
|
||||
|
||||
/*! RSA supported algorithms */
|
||||
typedef enum {
|
||||
RSA_PSS_2048 = 0x01, /*!< RSA PSS 2048 after hash SHA 256 */
|
||||
RSA_PKCS15_2048 = 0x02, /*!< RSA PKX15 */
|
||||
RSA_Last = 0x7FFFFFFF
|
||||
} CCSbRsaAlg_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef UTIL_H
|
||||
#define UTIL_H
|
||||
|
||||
/*
|
||||
* All the includes that are needed for code using this module to
|
||||
* compile correctly should be #included here.
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/************************ Defines ******************************/
|
||||
|
||||
/* invers the bytes on a word- used for output from HASH */
|
||||
#ifdef BIG__ENDIAN
|
||||
#define UTIL_INVERSE_UINT32_BYTES(val) (val)
|
||||
#else
|
||||
#define UTIL_INVERSE_UINT32_BYTES(val) \
|
||||
(((val) >> 24) | (((val) & 0x00FF0000) >> 8) | (((val) & 0x0000FF00) << 8) | (((val) & 0x000000FF) << 24))
|
||||
#endif
|
||||
|
||||
/* invers the bytes on a word - used for input data for HASH */
|
||||
#ifdef BIG__ENDIAN
|
||||
#define UTIL_REVERT_UINT32_BYTES(val) \
|
||||
(((val) >> 24) | (((val) & 0x00FF0000) >> 8) | (((val) & 0x0000FF00) << 8) | (((val) & 0x000000FF) << 24))
|
||||
#else
|
||||
#define UTIL_REVERT_UINT32_BYTES(val) (val)
|
||||
#endif
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
**
|
||||
* @brief This function executes a reverse bytes copying from one buffer to another buffer.
|
||||
*
|
||||
* @param[in] dst_ptr - The pointer to destination buffer.
|
||||
* @param[in] src_ptr - The pointer to source buffer.
|
||||
* @param[in] size - The size in bytes.
|
||||
*
|
||||
*/
|
||||
|
||||
void UTIL_ReverseMemCopy(uint8_t *dst_ptr, uint8_t *src_ptr, uint32_t size);
|
||||
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
**
|
||||
* @brief This function executes a reversed byte copy on a specified buffer.
|
||||
*
|
||||
* on a 6 byte byffer:
|
||||
*
|
||||
* buff[5] <---> buff[0]
|
||||
* buff[4] <---> buff[1]
|
||||
* buff[3] <---> buff[2]
|
||||
*
|
||||
* @param[in] dst_ptr - The counter buffer.
|
||||
* @param[in] src_ptr - The counter size in bytes.
|
||||
*
|
||||
*/
|
||||
void UTIL_ReverseBuff(uint8_t *buff_ptr, uint32_t size);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue