nRF Connect SDK API 3.3.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
47hash_get_algo(psa_algorithm_t alg, const struct sxhashalg **sx_hash_algo);
48
61psa_status_t cracen_rnd_in_range(uint8_t *n, size_t sz, const uint8_t *upperlimit,
62 size_t retrylimit);
63
71void cracen_xorbytes(uint8_t *a, const uint8_t *b, size_t sz);
72
78psa_status_t cracen_load_keyref(const psa_key_attributes_t *attributes, const uint8_t *key_buffer,
79 size_t key_buffer_size, struct sxkeyref *k);
80
88int cracen_prepare_ik_key(const uint8_t *user_data);
89
101void cracen_be_add(uint8_t *v, size_t v_size, size_t summand);
102
114int cracen_be_sub(const uint8_t *a, const uint8_t *b, uint8_t *c, size_t sz);
115
125void cracen_be_rshift(const uint8_t *a, int n, uint8_t *r, size_t sz);
126
140int cracen_be_cmp(const uint8_t *a, const uint8_t *b, size_t sz, int carry);
141
149void cracen_be_xor(uint8_t *buf, size_t buf_sz, size_t xor_val);
150
164int cracen_hash_all_inputs_with_context(struct sxhash *sxhashopctx, const uint8_t *inputs[],
165 const size_t input_lengths[], size_t input_count,
166 const struct sxhashalg *hashalg, uint8_t *digest);
167
179int cracen_hash_input_with_context(struct sxhash *hashopctx, const uint8_t *input,
180 const size_t input_length, const struct sxhashalg *hashalg,
181 uint8_t *digest);
182
200int cracen_hash_all_inputs(const uint8_t *inputs[], const size_t input_lengths[],
201 size_t input_count, const struct sxhashalg *hashalg, uint8_t *digest);
202
219int cracen_hash_input(const uint8_t *input, const size_t input_length,
220 const struct sxhashalg *hashalg, uint8_t *digest);
221
237int cracen_get_rnd_in_range(const uint8_t *n, size_t nsz, uint8_t *out);
238
int32_t psa_status_t
Definition error.h:26
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 hash_get_algo(psa_algorithm_t alg, const struct sxhashalg **sx_hash_algo)
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.
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.
__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