MatrixSSL 4.0.0
This commit is contained in:
124
core/include/cl_basic.h
Normal file
124
core/include/cl_basic.h
Normal file
@@ -0,0 +1,124 @@
|
||||
/* cl_basic.h
|
||||
*
|
||||
* Basic Utility operations aiding correctly implementing cryptography.
|
||||
*/
|
||||
|
||||
/*****************************************************************************
|
||||
* Copyright (c) 2016-2017 INSIDE Secure Oy. All Rights Reserved.
|
||||
*
|
||||
* The latest version of this code is available at http://www.matrixssl.org
|
||||
*
|
||||
* This software is open source; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This General Public License does NOT permit incorporating this software
|
||||
* into proprietary programs. If you are unable to comply with the GPL, a
|
||||
* commercial license for this software may be purchased from INSIDE at
|
||||
* http://www.insidesecure.com/
|
||||
*
|
||||
* This program is distributed in WITHOUT ANY WARRANTY; without even the
|
||||
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef INCLUDE_GUARD_CL_BASIC_H
|
||||
#define INCLUDE_GUARD_CL_BASIC_H
|
||||
|
||||
#include "cl_types_base.h"
|
||||
#include "cl_header_begin.h"
|
||||
|
||||
/** @defgroup CL11BASIC The CL Lib API Functions: Utility functions
|
||||
* CL Lib 1.1 API: Utility Functions
|
||||
*
|
||||
* CL Lib 1.1 is commonly used in programs aiming to implement cryptography
|
||||
* correctly. This file defines some useful utility functionality to be
|
||||
* used with cryptographic functionality. These functions do not have
|
||||
* CLS API counterparts as the functions never need locking.
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** Fill memory with given value.
|
||||
* This function fills given memory area with given byte.
|
||||
* The memory fill operation happens even if the C compiler can detect the
|
||||
* area is no longer needed. This is beneficial for Cryptography, where it
|
||||
* is important to carefully erase all memory areas containing sensitive
|
||||
* materials to ensure they do not accidentally leak.
|
||||
*
|
||||
* @param s Target area
|
||||
* @param smax Size of whole target area
|
||||
* @param c Byte to use (usually 0; only 8 bits of the value is used.)
|
||||
* @param n The number of bytes to erase.
|
||||
*/
|
||||
void CL_MemSet(void *s, CL_DataLen_t smax, int c, CL_DataLen_t n);
|
||||
|
||||
/** Check if two memory areas have identical contents.
|
||||
*
|
||||
* If array sizes differ, the function returns 0.
|
||||
* This function compares contents of two memory areas for equality in
|
||||
* data independent time.
|
||||
*
|
||||
* @param p1 Source area 1
|
||||
* @param sz1 Size of source area 1
|
||||
* @param p2 Source area 2
|
||||
* @param sz2 Size of source area 2
|
||||
* @retval 1 only if the areas are same size and have same contents.
|
||||
*/
|
||||
int CL_MemEqual(const void *p1, size_t sz1, const void *p2, size_t sz2);
|
||||
|
||||
/** Compare two arrays and identify if one of arrays is smaller, or same
|
||||
* than the other array.
|
||||
*
|
||||
* If array sizes differ, the function always returns <0 or >0.
|
||||
* This function compares contents of two memory areas in
|
||||
* data independent time. The comparison is based on value of bytes, resulting
|
||||
* e.g. ASCII code based sorting of the values.
|
||||
*
|
||||
* @param p1 Source area 1
|
||||
* @param sz1 Size of source area 1
|
||||
* @param p2 Source area 2
|
||||
* @param sz2 Size of source area 2
|
||||
* @retval <0 If source area is smaller.
|
||||
* @retval 0 If the areas are equal.
|
||||
* @retval >0 If source area is greater.
|
||||
*/
|
||||
int CL_MemCmp(const void *p1, size_t sz1, const void *p2, size_t sz2);
|
||||
|
||||
/** Compare two arrays and identify if one of arrays is smaller, or same
|
||||
* than the other array, with masking for the last byte.
|
||||
*
|
||||
* If array sizes differ, the function always returns <0 or >0.
|
||||
* This function compares contents of two memory areas in
|
||||
* data independent time. The comparison is based on value of bytes, resulting
|
||||
* e.g. ASCII code based sorting of the values.
|
||||
*
|
||||
* This function can be seen as a special version of CL_MemCmp(), which
|
||||
* partially ignore the last byte(s).
|
||||
*
|
||||
* @param p1 Source area 1
|
||||
* @param sz1 Size of source area 1
|
||||
* @param p2 Source area 2
|
||||
* @param sz2 Size of source area 2
|
||||
* @param mask1 Mask for the last byte of source area 1
|
||||
* @param mask2 Mask for the last byte of source area 2
|
||||
* @retval <0 If source area is smaller.
|
||||
* @retval 0 If the areas are equal.
|
||||
* @retval >0 If source area is greater.
|
||||
*/
|
||||
int CL_MemCmpEndMask(const void *p1, size_t sz1, const void *p2, size_t sz2,
|
||||
const unsigned char mask1,
|
||||
const unsigned char mask2);
|
||||
|
||||
/** @} */
|
||||
|
||||
#include "cl_header_end.h"
|
||||
|
||||
#endif /* INCLUDE_GUARD_CL_BASIC_H */
|
||||
|
||||
/* end of file cl_basic.h */
|
||||
Reference in New Issue
Block a user