aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/nRF5_SDK_15.0.0_a53641a/external/nrf_cc310/include/crys_common.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/nRF5_SDK_15.0.0_a53641a/external/nrf_cc310/include/crys_common.h')
-rw-r--r--thirdparty/nRF5_SDK_15.0.0_a53641a/external/nrf_cc310/include/crys_common.h371
1 files changed, 371 insertions, 0 deletions
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/external/nrf_cc310/include/crys_common.h b/thirdparty/nRF5_SDK_15.0.0_a53641a/external/nrf_cc310/include/crys_common.h
new file mode 100644
index 0000000..74c13cf
--- /dev/null
+++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/external/nrf_cc310/include/crys_common.h
@@ -0,0 +1,371 @@
+/**************************************************************************************
+* Copyright (c) 2016-2017, ARM Limited or its affiliates. All rights reserved *
+* *
+* This file and the related binary are licensed under the following license: *
+* *
+* ARM Object Code and Header Files License, v1.0 Redistribution. *
+* *
+* Redistribution and use of object code, header files, and documentation, without *
+* modification, are permitted provided that the following conditions are met: *
+* *
+* 1) Redistributions must reproduce the above copyright notice and the *
+* following disclaimer in the documentation and/or other materials *
+* provided with the distribution. *
+* *
+* 2) Unless to the extent explicitly permitted by law, no reverse *
+* engineering, decompilation, or disassembly of is permitted. *
+* *
+* 3) Redistribution and use is permitted solely for the purpose of *
+* developing or executing applications that are targeted for use *
+* on an ARM-based product. *
+* *
+* DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
+* CONTRIBUTORS "AS IS." ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT *
+* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT, *
+* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
+* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, *
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED *
+* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
+* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
+* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
+**************************************************************************************/
+
+
+
+
+#ifndef CRYS_COMMON_H
+#define CRYS_COMMON_H
+
+#include "crys_common_error.h"
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+/************************ Defines ******************************/
+
+#define CRYS_AES_SECRET_KEY_SIZE_IN_WORDS 4
+
+/* the ROT13 definition - relevant only on SW low level engines compiled in the ROT mode */
+#define CRYS_COMMON_ROT_13_OFFSET 13
+
+
+
+/************************ Enums ********************************/
+
+/************************ Typedefs ****************************/
+
+/************************ Structs *****************************/
+
+/************************ Public Variables *********************/
+
+/************************ Public Functions *********************/
+
+
+
+/***********************************************************************
+ **
+ * @brief This function executes a reverse bytes copying from one buffer to another buffer.
+ *
+ * Overlapping of buffers is not allowed, excluding the case, when destination and source
+ * buffers are the same.
+ * Example of a 5 byte buffer:
+ *
+ * dst_ptr[4] = src_ptr[0]
+ * dst_ptr[3] = src_ptr[1]
+ * dst_ptr[2] = src_ptr[2]
+ * dst_ptr[1] = src_ptr[3]
+ * dst_ptr[0] = src_ptr[4]
+ *
+ * @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.
+ *
+ */
+ CRYSError_t CRYS_COMMON_ReverseMemcpy( uint8_t *dst_ptr , uint8_t *src_ptr , uint32_t size );
+
+
+/***********************************************************************
+ **
+ * @brief This function converts aligned words array to bytes array/
+ *
+ * 1. Assumed, that input buffer is aligned to 4-bytes word and
+ * bytes order is set according to machine endianness.
+ * 2. Output buffer receives data as bytes stream from LSB to MSB.
+ * For increasing performance on small buffers, the output data is given
+ * by rounded down pointer and alignment.
+ * 3. This implementation is given for both Big and Little endian machines.
+ *
+ *
+ * @param[in] in32_ptr - The pointer to aligned input buffer.
+ * @param[in] out32_ptr - The 32-bits pointer to output buffer (rounded down to 4 bytes) .
+ * @param[in] outAlignBits - The actual output data alignment;
+ * @param[in] sizeWords - The size in words (sizeWords >= 1).
+ *
+ * return - no return value.
+ */
+ void CRYS_COMMON_AlignedWordsArrayToBytes( uint32_t *in32_ptr , uint32_t *out32_ptr ,
+ uint32_t outAlignBits, uint32_t sizeWords );
+
+/***********************************************************************/
+ /**
+ * @brief This function converts in place words byffer to bytes buffer with
+ * reversed endianity of output array.
+ *
+ * The function can convert:
+ * - big endian bytes array to words array with little endian order
+ * of words and backward.
+ *
+ * Note:
+ * 1. Endianness of each word in words buffer should be set allways
+ * according to processor used.
+ * 2. Implementation is given for both big and little endianness of
+ * processor.
+ *
+ * @param[in] buf_ptr - The 32-bits pointer to input/output buffer.
+ * @param[in] sizeWords - The size in words (sizeWords > 0).
+ *
+ * @return - no return value.
+ */
+void CRYS_COMMON_InPlaceConvertBytesWordsAndArrayEndianness(
+ uint32_t *buf_ptr,
+ uint32_t sizeWords);
+
+
+/***********************************************************************/
+ /**
+ * @brief This function converts big endianness bytes array to aligned words
+ * array with words order according to little endian /
+ *
+ * 1. Assumed, that input bytes order is set according
+ * to big endianness: MS Byte is most left, i.e. order is from
+ * Msb to Lsb.
+ * 2. Output words array should set according to
+ * little endianness words order: LSWord is most left, i.e. order
+ * is from Lsw to Msw. Order bytes in each word - according to
+ * 3. Implementation is given for both big and little
+ * endianness of processor.
+ *
+ * @param[out] out32_ptr - The 32-bits pointer to output buffer.
+ * @param[in] sizeOutBuffBytes - The size in bytes of output buffer, must be
+ * aligned to 4 bytes and not less than sizeInBytes.
+ * @param[in] in8_ptr - The pointer to input buffer.
+ * @param[in] sizeInBytes - The size in bytes of input data(sizeBytes >= 1).
+ *
+ * @return CRYSError_t - On success CRYS_OK is returned, on failure a
+ * value MODULE_* as defined in .
+ */
+CRYSError_t CRYS_COMMON_ConvertMsbLsbBytesToLswMswWords(
+ uint32_t *out32_ptr,
+ uint32_t sizeOutBuffBytes,
+ const uint8_t *in8_ptr,
+ uint32_t sizeInBytes);
+
+
+/***********************************************************************/
+ /**
+ * @brief This function converts LE 32bit-words array to BE bytes array.
+ *
+ * Note: The function allows output full size of the data and also output
+ * without leading zeros, if the user gives appropriate exact output
+ * size < input size.
+ *
+ * Assuming:
+ * 1. Output bytes order is according to big endianness:
+ * MS Byte is most left, i.e. order is from Msb to Lsb.
+ * 2. Input array words order is set according to
+ * little endianness words order: LSWord is most left, i.e. order
+ * is from Lsw to Msw. Bytes order in each word - according to
+ * processor endianness.
+ * 3. Owerlapping of buffers is not allowed, besides in
+ * place operation and size aligned to full words.
+ * 4. Implementation is given for both big and little
+ * endianness of processor.
+ *
+ * @param[in] out8_ptr - The bytes pointer to the output buffer.
+ * @param[in] sizeOutBuffBytes - The size of the data in bytes to output; must
+ * be not less, than sizeInBytes.
+ * @param[out] in32_ptr - The pointer to the input buffer.
+ * @param[in] sizeInpBytes - The size of the input data in bytes. The size must
+ * be > 0 and aligned to 4 bytes.
+ *
+ * @return CRYSError_t - On success CRYS_OK is returned, on failure a
+ * value MODULE_* as defined in .
+ */
+CRYSError_t CRYS_COMMON_ConvertLswMswWordsToMsbLsbBytes(
+ uint8_t *out8_ptr,
+ uint32_t sizeOutBytes,
+ uint32_t *in32_ptr,
+ uint32_t sizeInpBytes);
+
+
+/***********************************************************************/
+/**
+ * @brief VOS_GetGlobalData get the global random key hidden inside the function
+ * the global data implemented for now are random key buffer and AES secret key buffer
+ *
+ * When no_rtos is declared then we allow a global data. The random key/AES secret key are hidden as static inside the function
+ *
+ *
+ * @param[in] Globalid select the buffer
+ * @param[in] GlobalDataSizeWords - the global data buffer size needed in words - this value must be a predetermined value
+ * @param[out] GlobalData_ptr - Pointer to the global buffer returned. The buffer must be at least GlobalDataSizeWords size
+ *
+ * @return CRYSError_t - On success CRYS_OK is returned, on failure an Error as defined in VOS_error
+ */
+CRYSError_t CRYS_COMMON_GetGlobalData(uint16_t Globalid, uint32_t *GlobalData_ptr, uint16_t GlobalDataSizeWords);
+
+
+/***********************************************************************/
+/**
+* @brief CRYS_COMMON_StoreGlobalData store the global random key into the global buffer hidden inside the function
+* the global data implemented for now are random key buffer and AES secret key buffer
+*
+*
+* @param[in] Globalid - random key / AES secret key
+* @param[in] GlobalDataSizeWords - the global data buffer size needed in words - this value must be a predetermined value
+* @param[in] GlobalData_ptr - Pointer to the global buffer to be saved. The buffer must be at least GlobalDataSizeWords size
+*
+* Return Value:
+*/
+CRYSError_t CRYS_COMMON_StoreGlobalData(uint16_t Globalid, uint32_t *GlobalData_ptr, uint16_t GlobalDataSizeWords);
+
+
+/***********************************************************************/
+/**
+ * @brief The CRYS_COMMON_CutAndSaveEndOfLliData() function saves the data from end of source
+ * memory, pointed by LLI table, to destination memory, and decreases the LLI table accordingly.
+ *
+ * The function executes the following major steps:
+ *
+ * 1. Starts copy bytes from last byte of last chunk of source LLI table into
+ * last byte of destination memory.
+ * 2. Continues copy bytes in reverse order while not completes copying of all amount of data.
+ * 3. If last chunk of source or destination data is not enough, the function crosses
+ * to next chunk of LLI table.
+ * 4. Decreases the Data size of last updated LLI entry and sets the LAST bit.
+ * 5. Exits with the OK code.
+ *
+ *
+ * @param[in] SrcLliTab_ptr - The pointer to the LLI table, containing pointers and sizes of
+ * chunks of source data. The table need to be aligned and placed
+ * in SEP SRAM.
+ * @param[in] SrcLliTabSize_ptr - The pointer to buffer, containing th size of the LLI table in words.
+ * @param[in] Dest_ptr - The destination address for copying the data.
+ * @param[in] DataSize - The count of bytes to copy.
+ *
+ * @return CRYSError_t - On success CRYS_OK is returned,
+ * - CRYS_COMMON_ERROR_IN_SAVING_LLI_DATA_ERROR
+ *
+ * NOTE: 1. Because the function is intended for internal using, it is presumed that all input parameters
+ * are valid.
+ * 2. Assumed, that copied source not may to take more than two last chunks of source memory.
+ */
+ CRYSError_t CRYS_COMMON_CutAndSaveEndOfLliData(
+ uint32_t *SrcLliTab_ptr,
+ uint32_t *SrcLliTabSize_ptr,
+ uint8_t *Dst_ptr,
+ uint32_t DataSize);
+
+/***********************************************************************/
+/**
+ * @brief The CRYS_COMMON_CutAndSaveBeginOfLliData() function saves the data from beginning of source
+ * memory, pointed by LLI table, to destination memory, and decreases the LLI table accordingly.
+ *
+ * The function executes the following major steps:
+ *
+ * 1. Starts copy bytes from first byte of first chunk of source LLI table into
+ * destination memory.
+ * 2. If first chunk of source is not enough, the function crosses
+ * to next chunk of LLI table.
+ * 3. Updates LLI table pointer and size according to copied amount of data.
+ * 5. Exits with the OK code.
+ *
+ * @param[in/out] SrcLliTab_ptr_ptr - The pointer to pointer to the LLI table, containing pointers and
+ * sizes of the chunks of source data. The table need to be aligned and
+ * placed in SRAM.
+ * @param[in/out] SrcLliTabSize_ptr - The pointer to buffer, containing th size of the LLI table in words.
+ * @param[in] Dest_ptr - The destination address for copying the data.
+ * @param[in] DataSize - The count of bytes to copy.
+ *
+ * @return - no return value.
+ *
+ * NOTE: 1. Because the function is intended for internal using, it is presumed that all input parameters
+ * are valid.
+ * 2. Assumed, that copied source not may to take more than two first chunks of source memory.
+ */
+ void CRYS_COMMON_CutAndSaveBeginOfLliData(
+ uint32_t **SrcLliTab_ptr_ptr,
+ uint32_t *SrcLliTabSize_ptr,
+ uint8_t *Dst_ptr,
+ uint32_t DataSize);
+
+/***********************************************************************/
+ /**
+ * @brief This function converts 32-bit words array with little endian
+ * order of words to bytes array with little endian (LE) order of bytes.
+ *
+ * Assuming: no buffers overlapping, in/out pointers and sizes not equall to NULL,
+ the buffer size must be not less, than input data size.
+ *
+ * @param[out] out8Le - The bytes pointer to output buffer.
+ * @param[in] in32Le - The pointer to input 32-bit words buffer.
+ * @param[in] sizeInWords - The size in words of input data (sizeWords >= 0).
+ *
+ * @return CRYSError_t - On success CRYS_OK is returned, on failure a
+ * value MODULE_* as defined in .
+ */
+void CRYS_COMMON_ConvertLswMswWordsToLsbMsbBytes(
+ uint8_t *out8Le,
+ const uint32_t *in32Le,
+ size_t sizeInWords);
+
+
+/***********************************************************************/
+/**
+ * @brief This function converts bytes array with little endian (LE) order of
+ * bytes to 32-bit words array with little endian order of words and bytes.
+ *
+ * Assuming: No owerlapping of buffers; in/out pointers and sizes are not equall to NULL.
+ * If is in-place conversion, then the size must be multiple of 4 bytes.
+ * @param[out] out32Le - The 32-bits pointer to output buffer. The buffer size must be
+ * not less, than input data size.
+ * @param[in] in8Le - The pointer to input buffer.
+ * @param[in] sizeInBytes - The size in bytes of input data(sizeBytes > 0).
+ *
+ * @return CRYSError_t - On success CRYS_OK is returned, on failure a
+ * value MODULE_* as defined in .
+ */
+void CRYS_COMMON_ConvertLsbMsbBytesToLswMswWords(
+ uint32_t *out32Le,
+ const uint8_t *in8Le,
+ size_t sizeInBytes);
+
+
+/**
+ * The function compares value of byte vector to null.
+ *
+ * @author reuvenl (6/20/2016)
+ *
+ * @param vect - a pointer to bytes vector.
+ * @param sizeBytes - size of the vector.
+ *
+ * @return uint32_t - if vector's value iz zero, then returns 1, else - 0;
+ */
+uint32_t CRYS_COMMON_CheckIsVectorZero(uint8_t *vect, uint32_t sizeBytes);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+