core/common/buffer_util.h (37 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#ifndef BUFFER_UTIL_H_
#define BUFFER_UTIL_H_
#include <stddef.h>
#include <stdint.h>
#include "status/rot_status.h"
/**
* Check if two buffers overlap.
*
* @param buf1 Pointer start address of first buffer.
* @param buf1_len Length of first buffer.
* @param buf2 Pointer start address of second buffer.
* @param buf2_len Length of second buffer.
*
* @return 0 if the buffers do not overlap, 1 if they do.
*/
#define buffer_are_overlapping(buf1, buf1_len, buf2, buf2_len) \
(((buf1 >= buf2) && (buf1 < (buf2 + buf2_len))) || \
((buf2 >= buf1) && (buf2 < (buf1 + buf1_len))))
size_t buffer_copy (const uint8_t *src, size_t src_length, size_t *offset, size_t *dest_length,
uint8_t *dest);
void buffer_reverse (uint8_t *buffer, size_t length);
void buffer_reverse_copy (uint8_t *dest, const uint8_t *src, size_t length);
int buffer_reverse_copy_dwords (uint32_t *dest, const uint32_t *src, size_t length);
int buffer_compare (const uint8_t *buf1, const uint8_t *buf2, size_t length);
int buffer_compare_dwords (const uint32_t *buf1, const uint32_t *buf2, size_t dwords);
void buffer_zeroize (void *buffer, size_t length);
void buffer_zeroize_dwords (uint32_t *buffer, size_t dwords);
void buffer_unaligned_copy16 (uint16_t *dst, const uint16_t *src);
void buffer_unaligned_copy24 (uint8_t *dst, const uint8_t *src);
void buffer_unaligned_copy32 (uint32_t *dst, const uint32_t *src);
void buffer_unaligned_copy64 (uint64_t *dst, const uint64_t *src);
uint16_t buffer_unaligned_read16 (const uint16_t *buffer);
uint32_t buffer_unaligned_read24 (const uint8_t *buffer);
uint32_t buffer_unaligned_read32 (const uint32_t *buffer);
uint64_t buffer_unaligned_read64 (const uint64_t *buffer);
void buffer_unaligned_write16 (uint16_t *buffer, uint16_t value);
void buffer_unaligned_write24 (uint8_t *buffer, uint32_t value);
void buffer_unaligned_write32 (uint32_t *buffer, uint32_t value);
void buffer_unaligned_write64 (uint64_t *buffer, uint64_t value);
#define BUFFER_UTIL_ERROR(code) ROT_ERROR (ROT_MODULE_BUFFER_UTIL, code)
/**
* Error codes that can be generated by buffer utilities.
*/
enum {
BUFFER_UTIL_INVALID_ARGUMENT = BUFFER_UTIL_ERROR (0x00), /**< Input parameter is null or not valid. */
BUFFER_UTIL_NO_MEMORY = BUFFER_UTIL_ERROR (0x01), /**< Memory allocation failed. */
BUFFER_UTIL_DATA_MISMATCH = BUFFER_UTIL_ERROR (0x02), /**< A buffer does not contain the expected data. */
BUFFER_UTIL_UNEXPETCED_ALIGNMENT = BUFFER_UTIL_ERROR (0x03), /**< Detected unexpected buffer address alignment. */
};
#endif /* BUFFER_UTIL_H_ */