v2 / thirdparty / mbedtls / library / psa_crypto_core_common.h
52 lines · 48 sloc · 1.73 KB · 1274cdc3447be8e83616e8512872455e8720c2fd
Raw
1/**
2 * \file psa_crypto_core_common.h
3 *
4 * \brief Utility macros for internal use in the PSA cryptography core.
5 */
6/*
7 * Copyright The Mbed TLS Contributors
8 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
9 */
10
11#ifndef PSA_CRYPTO_CORE_COMMON_H
12#define PSA_CRYPTO_CORE_COMMON_H
13
14/** Return an offset into a buffer.
15 *
16 * This is just the addition of an offset to a pointer, except that this
17 * function also accepts an offset of 0 into a buffer whose pointer is null.
18 * (`p + n` has undefined behavior when `p` is null, even when `n == 0`.
19 * A null pointer is a valid buffer pointer when the size is 0, for example
20 * as the result of `malloc(0)` on some platforms.)
21 *
22 * \param p Pointer to a buffer of at least n bytes.
23 * This may be \p NULL if \p n is zero.
24 * \param n An offset in bytes.
25 * \return Pointer to offset \p n in the buffer \p p.
26 * Note that this is only a valid pointer if the size of the
27 * buffer is at least \p n + 1.
28 */
29static inline unsigned char *psa_crypto_buffer_offset(
30 unsigned char *p, size_t n)
31{
32 return p == NULL ? NULL : p + n;
33}
34
35/** Return an offset into a read-only buffer.
36 *
37 * Similar to mbedtls_buffer_offset(), but for const pointers.
38 *
39 * \param p Pointer to a buffer of at least n bytes.
40 * This may be \p NULL if \p n is zero.
41 * \param n An offset in bytes.
42 * \return Pointer to offset \p n in the buffer \p p.
43 * Note that this is only a valid pointer if the size of the
44 * buffer is at least \p n + 1.
45 */
46static inline const unsigned char *psa_crypto_buffer_offset_const(
47 const unsigned char *p, size_t n)
48{
49 return p == NULL ? NULL : p + n;
50}
51
52#endif /* PSA_CRYPTO_CORE_COMMON_H */
53