nRF Connect SDK API 3.4.99
Loading...
Searching...
No Matches
common.h
Go to the documentation of this file.
1 /*
2 * Copyright (c) 2023 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
5 */
6
17#pragma once
18
19#include "cracen_psa.h"
20#include "sxsymcrypt/internal.h"
21
22#include <stddef.h>
23#include <stdint.h>
24#include <zephyr/sys/util.h>
25#include <silexpk/sxbuf/sxbufop.h>
26#include <sxsymcrypt/hashdefs.h>
27#include <silexpk/core.h>
28
29#define CRACEN_PSA_IS_KEY_FLAG(flag, attr) ((flag) == (psa_get_key_usage_flags((attr)) & (flag)))
30#define CRACEN_PSA_IS_KEY_TYPE(flag, attr) ((flag) == (psa_get_key_type((attr)) & (flag)))
31
32#if defined(__has_builtin) && __has_builtin(__builtin_abs)
33#define cracen_abs(x) __builtin_abs(x)
34#else
35#define cracen_abs(x) ((x) < 0 ? -(x) : (x))
36#endif
37
38
39typedef struct {
40 uint8_t slot_number;
41 uint8_t owner_id;
43
44__must_check psa_status_t silex_statuscodes_to_psa(int sx_status);
45
46__must_check psa_status_t
47cracen_hash_get_algo(psa_algorithm_t alg, const struct sxhashalg **sx_hash_algo);
48
49__must_check psa_status_t
50cracen_xof_get_algo(psa_algorithm_t alg, const struct sxhashalg **sx_xof_algo);
51
64psa_status_t cracen_rnd_in_range(uint8_t *n, size_t sz, const uint8_t *upperlimit,
65 size_t retrylimit);
66
74void cracen_xorbytes(uint8_t *a, const uint8_t *b, size_t sz);
75
81psa_status_t cracen_load_keyref(const psa_key_attributes_t *attributes, const uint8_t *key_buffer,
82 size_t key_buffer_size, struct sxkeyref *k);
83
91int cracen_prepare_ik_key(const uint8_t *user_data);
92
104void cracen_be_add(uint8_t *v, size_t v_size, size_t summand);
105
117int cracen_be_sub(const uint8_t *a, const uint8_t *b, uint8_t *c, size_t sz);
118
128void cracen_be_rshift(const uint8_t *a, int n, uint8_t *r, size_t sz);
129
143int cracen_be_cmp(const uint8_t *a, const uint8_t *b, size_t sz, int carry);
144
152void cracen_be_xor(uint8_t *buf, size_t buf_sz, size_t xor_val);
153
160static inline void cracen_put_le16(uint16_t val, uint8_t *dst)
161{
162 dst[0] = val;
163 dst[1] = val >> 8;
164}
165
173static inline uint16_t cracen_get_le16(const uint8_t *src)
174{
175 return ((uint16_t)src[1] << 8) | src[0];
176}
177
184static inline void cracen_put_le32(uint32_t val, uint8_t *dst)
185{
186 cracen_put_le16(val, dst);
187 cracen_put_le16(val >> 16, &dst[2]);
188}
189
197static inline uint32_t cracen_get_le32(const uint8_t src[4])
198{
199 return ((uint32_t)cracen_get_le16(&src[2]) << 16) | cracen_get_le16(&src[0]);
200}
201
215int cracen_hash_all_inputs_with_context(struct sxhash *sxhashopctx, const uint8_t *inputs[],
216 const size_t input_lengths[], size_t input_count,
217 const struct sxhashalg *hashalg, uint8_t *digest);
218
230int cracen_hash_input_with_context(struct sxhash *hashopctx, const uint8_t *input,
231 const size_t input_length, const struct sxhashalg *hashalg,
232 uint8_t *digest);
233
251int cracen_hash_all_inputs(const uint8_t *inputs[], const size_t input_lengths[],
252 size_t input_count, const struct sxhashalg *hashalg, uint8_t *digest);
253
270int cracen_hash_input(const uint8_t *input, const size_t input_length,
271 const struct sxhashalg *hashalg, uint8_t *digest);
272
288int cracen_get_rnd_in_range(const uint8_t *n, size_t nsz, uint8_t *out);
289
static void cracen_put_le16(uint16_t val, uint8_t *dst)
Put a 16-bit integer as little-endian to arbitrary location.
Definition common.h:160
psa_status_t cracen_rnd_in_range(uint8_t *n, size_t sz, const uint8_t *upperlimit, size_t retrylimit)
Use cracen_get_random up to generate a random number in the range [1, upperlimit).
int cracen_get_rnd_in_range(const uint8_t *n, size_t nsz, uint8_t *out)
Generate a random number within the specified range.
__must_check psa_status_t cracen_hash_get_algo(psa_algorithm_t alg, const struct sxhashalg **sx_hash_algo)
static uint32_t cracen_get_le32(const uint8_t src[4])
Get a 32-bit integer stored in little-endian format.
Definition common.h:197
void cracen_be_rshift(const uint8_t *a, int n, uint8_t *r, size_t sz)
Compute r = a >> n.
int cracen_hash_all_inputs(const uint8_t *inputs[], const size_t input_lengths[], size_t input_count, const struct sxhashalg *hashalg, uint8_t *digest)
Hash several elements, managing hardware reservation internally.
int cracen_hash_input_with_context(struct sxhash *hashopctx, const uint8_t *input, const size_t input_length, const struct sxhashalg *hashalg, uint8_t *digest)
Hash a single element with a previously created hash context(sxhash)
void cracen_be_xor(uint8_t *buf, size_t buf_sz, size_t xor_val)
Compute buf = buf ^ xor_val.
psa_status_t cracen_load_keyref(const psa_key_attributes_t *attributes, const uint8_t *key_buffer, size_t key_buffer_size, struct sxkeyref *k)
Loads key buffer and attributes.
int cracen_prepare_ik_key(const uint8_t *user_data)
Prepare ik key.
void cracen_xorbytes(uint8_t *a, const uint8_t *b, size_t sz)
XOR two byte buffers and store result in first buffer.
int cracen_be_sub(const uint8_t *a, const uint8_t *b, uint8_t *c, size_t sz)
Compute c = a - b.
static void cracen_put_le32(uint32_t val, uint8_t *dst)
Put a 32-bit integer as little-endian to arbitrary location.
Definition common.h:184
__must_check psa_status_t cracen_xof_get_algo(psa_algorithm_t alg, const struct sxhashalg **sx_xof_algo)
void cracen_be_add(uint8_t *v, size_t v_size, size_t summand)
Compute v = v + summand.
int cracen_be_cmp(const uint8_t *a, const uint8_t *b, size_t sz, int carry)
Big-Endian compare with carry.
static uint16_t cracen_get_le16(const uint8_t *src)
Get a 16-bit integer stored in little-endian format.
Definition common.h:173
__must_check psa_status_t silex_statuscodes_to_psa(int sx_status)
int cracen_hash_input(const uint8_t *input, const size_t input_length, const struct sxhashalg *hashalg, uint8_t *digest)
Hash a single input, managing hardware reservation internally.
int cracen_hash_all_inputs_with_context(struct sxhash *sxhashopctx, const uint8_t *inputs[], const size_t input_lengths[], size_t input_count, const struct sxhashalg *hashalg, uint8_t *digest)
Hash several elements at different locations in memory with a previously created hash context(sxhash)
uint8_t owner_id
Definition common.h:41
uint8_t slot_number
Definition common.h:40
Definition common.h:39