123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /*############################################################################
- # Copyright 2016 Intel Corporation
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- ############################################################################*/
- #ifndef EPID_COMMON_SRC_MEMORY_H_
- #define EPID_COMMON_SRC_MEMORY_H_
- #include <stdlib.h>
- #include <string.h>
- /*!
- * \file
- * \brief Memory access interface.
- * \addtogroup EpidCommon
- * @{
- */
- /// When enabled secrets are wiped out from the memory by EpidFree
- #define EPID_ENABLE_EPID_ZERO_MEMORY_ON_FREE
- /// Clear information stored in block of memory pointer to by ptr
- /*!
- \warning
- This function may be optimized away by some compilers. If it is, you
- should consider using a compiler or operating system specific memory
- sanitization function (e.g. memcpy_s or SecureZeroMemory).
- \param[in] ptr
- pointer to memory block
- \param[in] size
- number of bytes to clear
- */
- void EpidZeroMemory(void* ptr, size_t size);
- /// Allocates memory of size bytes
- /*!
- The content of memory is initialized with zeros.
- Memory must be freed with EpidFree function.
- \param[in] size
- number of bytes to allocate
- \returns pointer to allocated memory.
- */
- void* EpidAlloc(size_t size);
- /// Reallocates memory allocated by EpidAlloc
- /*!
- In case of error NULL pointer is returned and input memory block
- is not changed.
- Memory must be freed with EpidFree function.
- \param[in] ptr
- pointer to memory block to reallocate
- \param[in] new_size
- number of bytes to reallocate for
- \returns pointer to allocated memory.
- */
- void* EpidRealloc(void* ptr, size_t new_size);
- /// Frees memory allocated by EpidAlloc
- /*!
- Clears information stored in the block of memory.
- \param[in] ptr
- pointer to allocated memory block
- */
- void EpidFree(void* ptr);
- #if !defined(SAFE_ALLOC)
- /// Allocates zero initalized block of memory
- #define SAFE_ALLOC(size) EpidAlloc(size);
- #endif // !defined(SAFE_ALLOC)
- #if !defined(SAFE_FREE)
- /// Deallocates space allocated by SAFE_ALLOC() and nulls pointer
- #define SAFE_FREE(ptr) \
- { \
- if (NULL != (ptr)) { \
- EpidFree(ptr); \
- (ptr) = NULL; \
- } \
- }
- #endif // !defined(SAFE_FREE)
- #if !defined(SAFE_REALLOC)
- /// Changes the size of the memory block pointed to by ptr
- #define SAFE_REALLOC(ptr, size) EpidRealloc((ptr), (size))
- #endif // !defined(SAFE_REALLOC)
- /// Copies bytes between buffers with security ehancements
- /*!
- Copies count bytes from src to dest. If the source and destination
- overlap, the behavior is undefined.
- \param[out] dest
- pointer to the object to copy to
- \param[in] destsz
- max number of bytes to modify in the destination (typically the size
- of the destination object)
- \param[in] src
- pointer to the object to copy from
- \param[in] count
- number of bytes to copy
- \returns zero on success and non-zero value on error.
- */
- int memcpy_S(void* dest, size_t destsz, void const* src, size_t count);
- /*! @} */
- #endif // EPID_COMMON_SRC_MEMORY_H_
|