nRF Connect SDK API 3.4.99
Loading...
Searching...
No Matches
cracen_psa_primitives.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
25
26#ifndef CRACEN_PSA_PRIMITIVES_H
27#define CRACEN_PSA_PRIMITIVES_H
28
29#include <psa/crypto_sizes.h>
30#include <psa/crypto_types.h>
31#include <psa/crypto_values.h>
32#include <silexpk/blinding.h>
33#include <stdbool.h>
34#include <stdint.h>
35#include <sxsymcrypt/cmac.h>
36#include <sxsymcrypt/internal.h>
37#include <sxsymcrypt/trng.h>
38#include <sxsymcrypt/hashdefs.h>
39#include <string.h>
40#include <zephyr/sys/byteorder.h>
41
42#if defined(PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS)
43#if defined(PSA_NEED_CRACEN_CHACHA20_POLY1305)
44#include "poly1305_ext.h"
45#endif /* PSA_NEED_CRACEN_CHACHA20_POLY1305 */
46#endif /* PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS */
47
48#define SX_BLKCIPHER_IV_SZ (16U)
49#define SX_BLKCIPHER_AES_BLK_SZ (16U)
50
51#define SX_BLKCIPHER_CHACHA20_BLK_SZ (64U)
52
53/* CCM* (IEEE Std 802.15.4, Annex B) with a zero-length authentication field is
54 * AES-CTR over the counter blocks
55 *
56 * A_i = Flags(1) || Nonce(15 - L) || i(L, big endian)
57 *
58 * with the length field L fixed at 2 and the keystream starting at A_1; A_0 would
59 * encrypt the authentication field, which this mode does not have. L = 2 gives the
60 * 13-octet nonce that PSA_CIPHER_IV_LENGTH() reports, and caps the message at
61 * 2^(8 * L) - 1 octets, which is also what keeps i from carrying into the nonce.
62 */
63#define CCM_STAR_L 2
64#define CCM_STAR_NONCE_LENGTH PSA_CIPHER_IV_LENGTH(PSA_KEY_TYPE_AES, PSA_ALG_CCM_STAR_NO_TAG)
65#define CCM_STAR_MAX_MESSAGE_LEN (BIT(8 * CCM_STAR_L) - 1)
66
68 "A_i must tile one cipher block");
69
71static inline void cracen_ccm_star_build_a1(uint8_t iv[SX_BLKCIPHER_IV_SZ], const uint8_t *nonce)
72{
73 iv[0] = CCM_STAR_L - 1;
74 memcpy(&iv[1], nonce, CCM_STAR_NONCE_LENGTH);
75 sys_put_be16(1, &iv[1 + CCM_STAR_NONCE_LENGTH]);
76}
77
78#if defined(PSA_NEED_CRACEN_STREAM_CIPHER_CHACHA20)
83#define SX_BLKCIPHER_MAX_BLK_SZ SX_BLKCIPHER_CHACHA20_BLK_SZ
84#else
85#define SX_BLKCIPHER_MAX_BLK_SZ SX_BLKCIPHER_AES_BLK_SZ
86#endif
87
88#define CRACEN_MAX_AES_KEY_SIZE (32u)
89#define CRACEN_MAX_AEAD_BLOCK_SIZE (64u)
90
91#if defined(PSA_NEED_CRACEN_SP800_108_COUNTER_HMAC)
92#define CRACEN_MAC_CTR_MAX_KEY_SIZE (128u)
93#else
94#define CRACEN_MAC_CTR_MAX_KEY_SIZE CRACEN_MAX_AES_KEY_SIZE
95#endif /* PSA_NEED_CRACEN_SP800_108_COUNTER_HMAC */
96
102#define CRACEN_MAX_AEAD_KEY_SIZE (32u)
103
109#define CRACEN_MAX_CHACHA20_KEY_SIZE (32u)
110
111/* Maximum ChaCha20 counter size. */
112#define CRACEN_CHACHA20_COUNTER_SIZE (4u)
113
114/* Defined by RFC8439 */
115#define CRACEN_POLY1305_TAG_SIZE (16u)
116#define CRACEN_POLY1305_KEY_SIZE (32u)
117/* BA417 uses 131 bit */
118#define CRACEN_POLY1305_ACC_SIZE (17u)
119
125#define CRACEN_MAX_CIPHER_KEY_SIZE (32u)
126
132#define CRACEN_PBKDF_MAX_SALT_SIZE 128
133
139#define CRACEN_HKDF_MAX_INFO_SIZE 128
140
141#define CRACEN_MAC_MAX_LABEL_SIZE 127
142#define CRACEN_MAC_MAX_CONTEXT_SIZE 160
143#define CRACEN_JPAKE_USER_ID_MAX_SIZE 16
144#define CRACEN_P256_KEY_SIZE 32
145#define CRACEN_P256_POINT_SIZE 64
146#define CRACEN_TLS12_PRF_MAX_LABEL_SIZE 128
147#define CRACEN_TLS12_PRF_MAX_SEED_SIZE 128
148
153#define CRACEN_PRNG_KEY_SIZE (32u)
154
159#define CRACEN_PRNG_ENTROPY_SIZE (48u)
160
165#define CRACEN_PRNG_NONCE_SIZE (0u)
166
171#define CRACEN_PRNG_PERSONALIZATION_MAX_SIZE (48u)
172
177#define CRACEN_PRNG_WORKMEM_SIZE (176u)
178
183#define CRACEN_PRNG_MAX_REQUEST_SIZE (1u << 16)
184
185#define CRACEN_SPAKE2P_HASH_LEN PSA_HASH_LENGTH(PSA_ALG_SHA_256)
186
187#define CRACEN_WPA3_SAE_MAX_SSID_LEN (32u)
188#define CRACEN_WPA3_SAE_MAX_PWD_LEN (256u)
189#define CRACEN_WPA3_SAE_MAX_PWID_LEN (256u)
190
195#define CRACEN_WPA3_SAE_PMK_LEN (32u)
196
197#define CRACEN_WPA3_SAE_PMKID_SIZE (16u)
198#define CRACEN_WPA3_SAE_STA_ID_LEN (6u)
199
205#define CRACEN_WPA3_SAE_IANA_GROUP_SIZE (2u)
206
211#define CRACEN_WPA3_SAE_COMMIT_SIZE (CRACEN_P256_KEY_SIZE + \
212 CRACEN_P256_POINT_SIZE)
213
214#define CRACEN_WPA3_SAE_SEND_CONFIRM_SIZE (2u)
215
220#define CRACEN_WPA3_SAE_CONFIRM_SIZE (CRACEN_WPA3_SAE_SEND_CONFIRM_SIZE + \
221 PSA_HASH_LENGTH(PSA_ALG_SHA_256))
222
226#define CRACEN_AES_GCM_HTABLE_SIZE 16
227
232
275
287
290 const struct sxhashalg *sx_hash_algo;
291
292 /* Internal sxcrypto context. */
293 struct sxhash sx_ctx;
294
295 /* The driver can perform a processing round after getting a multiple of the block size.
296 * Therefore, the driver must know how much data is left to fill the next block.
297 */
299
300 /* Buffer for input data to fill up the next block. */
301 uint8_t input_buffer[SX_HASH_MAX_ENABLED_BLOCK_SIZE];
302
303 /* Flag indicating saved state exists that needs to be resumed */
305};
307
311
314 uint8_t pool[SX_XOF_POOL_BUF_SZ];
317};
319
336
337/* CCM* only: reject input that would take the message past CCM_STAR_MAX_MESSAGE_LEN.
338 * Called once the other checks on the update have passed, so a rejected update
339 * leaves the operation untouched.
340 */
341static inline psa_status_t cracen_ccm_star_add_length(cracen_cipher_operation_t *operation,
342 size_t input_length)
343{
344 if (!IS_ENABLED(PSA_NEED_CRACEN_CCM_STAR_NO_TAG_AES) ||
345 operation->alg != PSA_ALG_CCM_STAR_NO_TAG) {
346 return PSA_SUCCESS;
347 }
348
349 if (input_length > CCM_STAR_MAX_MESSAGE_LEN - operation->processed_length) {
350 return PSA_ERROR_INVALID_ARGUMENT;
351 }
352
353 operation->processed_length += input_length;
354
355 return PSA_SUCCESS;
356}
357
360 uint8_t cbc_mac[SX_BLKCIPHER_AES_BLK_SZ]; /* CBC-MAC state. */
361 uint8_t ctr_block[SX_BLKCIPHER_AES_BLK_SZ]; /* Counter block for CTR mode. */
362 uint8_t keystream[SX_BLKCIPHER_AES_BLK_SZ]; /* Generated keystream. */
363 uint8_t partial_block[SX_BLKCIPHER_AES_BLK_SZ]; /* Partial CBC-MAC input block. */
364 size_t keystream_offset; /* Position in keystream buffer. */
365 size_t partial_len; /* Bytes in partial_block. */
366 bool cbc_mac_initialized; /* CBC-MAC initialization flag. */
367 bool ctr_initialized; /* CTR initialization flag. */
368};
370
373 /* Precalculated HTable */
375 uint8_t ghash_block[SX_BLKCIPHER_AES_BLK_SZ]; /* GHASH calculation result */
376 uint8_t ctr_block[SX_BLKCIPHER_AES_BLK_SZ]; /* Counter block for CTR mode */
377 uint8_t keystream[SX_BLKCIPHER_AES_BLK_SZ]; /* Generated keystream */
378 size_t keystream_offset; /* Position in keystream buffer */
379 size_t total_ad_fed; /* Total AD bytes processed */
380 size_t total_data_enc; /* Total size of the ciphertext */
381 bool ctr_initialized; /* CTR initialization flag */
382 bool ghash_initialized; /* GHASH initialization flag */
383};
385
386#if defined(PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS)
387#if defined(PSA_NEED_CRACEN_CHACHA20_POLY1305)
389struct cracen_sw_chacha20_poly1305_context_s {
390 uint8_t ctr[CRACEN_CHACHA20_COUNTER_SIZE]; /* Counter */
391 uint8_t keystream[SX_BLKCIPHER_CHACHA20_BLK_SZ]; /* Generated keystream */
392 size_t keystream_offset; /* Position in keystream buffer */
393 poly1305_ext_context poly_ctx;
394 size_t total_ad_fed; /* Total AD bytes processed */
395 size_t total_data_enc; /* Total size of the ciphertext */
396 bool ctr_initialized; /* CTR initialization flag */
397 bool poly_initialized; /* Poly1305 initialization flag */
398};
399typedef struct cracen_sw_chacha20_poly1305_context_s cracen_sw_chacha20_poly1305_context_t;
400#endif /* PSA_NEED_CRACEN_CHACHA20_POLY1305 */
401#endif /* PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS */
402
405 psa_algorithm_t alg;
406 struct sxkeyref keyref;
408 uint8_t nonce[PSA_AEAD_NONCE_MAX_SIZE];
410 size_t ad_length;
415 uint8_t tag_size;
418 struct sxaead ctx;
419#if defined(PSA_NEED_CRACEN_CTR_SIZE_WORKAROUNDS)
420#if defined(PSA_NEED_CRACEN_CCM_AES)
421 cracen_sw_ccm_context_t sw_ccm_ctx;
422#endif /* PSA_NEED_CRACEN_CCM_AES */
423#endif /* PSA_NEED_CRACEN_CTR_SIZE_WORKAROUNDS */
424
425#if defined(PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS)
426#if defined(PSA_NEED_CRACEN_GCM_AES)
427 cracen_sw_gcm_context_t sw_gcm_ctx;
428#endif /* PSA_NEED_CRACEN_GCM_AES */
429
430#if defined(PSA_NEED_CRACEN_CHACHA20_POLY1305)
431 cracen_sw_chacha20_poly1305_context_t sw_chacha_poly_ctx;
432#endif /* PSA_NEED_CRACEN_CHACHA20_POLY1305 */
433#endif /* PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS */
434};
436
439 uint8_t mac_state[SX_BLKCIPHER_AES_BLK_SZ]; /* Current MAC state. */
442 size_t processed_len; /* Total length of data processed so far, in bytes. */
443};
445
448 psa_algorithm_t alg;
449 size_t mac_size;
450
451 /* The driver can perform a processing round after getting a multiple of the block size.
452 * Therefore, the driver must know how much data is left to fill the next block.
453 */
455
456 /* Buffer for input data to fill up the next block. */
457 uint8_t input_buffer[SX_MAX(SX_HASH_MAX_ENABLED_BLOCK_SIZE, SX_BLKCIPHER_PRIV_SZ)];
458
459 /* Flag indicating saved state exists that needs to be resumed */
461 union {
462#if defined(PSA_NEED_CRACEN_HMAC)
463 struct {
464 struct sxhash hashctx;
465 uint8_t workmem[SX_HASH_MAX_ENABLED_BLOCK_SIZE +
466 PSA_HASH_MAX_SIZE];
467 } hmac;
468#endif /* PSA_NEED_CRACEN_HMAC */
469#if defined(PSA_NEED_CRACEN_CMAC)
470 struct {
471 struct sxmac ctx;
472 struct sxkeyref keyref;
473 uint8_t key_buffer[CRACEN_MAX_AES_KEY_SIZE];
474#if defined(PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS)
476 struct sxblkcipher cipher;
477#endif /* PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS */
478 } cmac;
479#endif /* PSA_NEED_CRACEN_CMAC */
480 uint8_t _unused;
481 };
482};
484
487 psa_algorithm_t alg;
489 uint64_t capacity;
490 uint8_t output_block[SX_MAX(SX_HASH_MAX_ENABLED_BLOCK_SIZE, SX_BLKCIPHER_PRIV_SZ)];
492 union{
495 };
496 union {
497#if defined(PSA_NEED_CRACEN_HKDF)
498 struct {
499 uint8_t blk_counter;
500 uint8_t prk[SX_HASH_MAX_ENABLED_BLOCK_SIZE];
501 uint8_t t[SX_HASH_MAX_ENABLED_BLOCK_SIZE];
502 uint8_t info[CRACEN_HKDF_MAX_INFO_SIZE];
503 size_t info_length;
504 bool info_set;
505 } hkdf;
506#endif /* PSA_NEED_CRACEN_HKDF */
507#if defined(PSA_NEED_CRACEN_PBKDF2_HMAC)
508 struct {
509 uint64_t input_cost;
510 uint8_t password[SX_HASH_MAX_ENABLED_BLOCK_SIZE];
511 size_t password_length;
512 uint8_t salt[CRACEN_PBKDF_MAX_SALT_SIZE];
513 size_t salt_length;
514 uint32_t blk_counter;
515 uint8_t uj[PSA_MAC_MAX_SIZE];
516 uint8_t tj[PSA_MAC_MAX_SIZE];
517 } pbkdf2;
518#endif /* PSA_NEED_CRACEN_PBKDF2_HMAC */
519#if defined(PSA_NEED_CRACEN_SP800_108_COUNTER_CMAC) || \
520 defined(PSA_NEED_CRACEN_SP800_108_COUNTER_HMAC)
521 struct {
522#if defined(PSA_NEED_CRACEN_SP800_108_COUNTER_CMAC)
523 uint8_t K_0[SX_BLKCIPHER_AES_BLK_SZ];
524#endif /* PSA_NEED_CRACEN_SP800_108_COUNTER_CMAC */
525 psa_key_lifetime_t key_lifetime;
526 mbedtls_svc_key_id_t key_id;
527 uint8_t key_buffer[CRACEN_MAC_CTR_MAX_KEY_SIZE];
528 size_t key_size;
529 uint32_t counter;
530 /* The +1 here is meant to store an algorithm-specific byte needed after
531 * the label.
532 */
533 uint8_t label[CRACEN_MAC_MAX_LABEL_SIZE + 1];
534 size_t label_length;
535 uint8_t context[CRACEN_MAC_MAX_CONTEXT_SIZE];
536 size_t context_length;
537 uint32_t L;
538 } mac_ctr;
539#endif /* PSA_NEED_CRACEN_SP800_108_COUNTER_CMAC || PSA_NEED_CRACEN_SP800_108_COUNTER_HMAC */
540#if defined(PSA_NEED_CRACEN_TLS12_ECJPAKE_TO_PMS)
541 struct {
542 uint8_t key[32];
543 } ecjpake_to_pms;
544#endif /* PSA_NEED_CRACEN_TLS12_ECJPAKE_TO_PMS */
545#if defined(PSA_NEED_CRACEN_TLS12_PRF) || defined(PSA_NEED_CRACEN_TLS12_PSK_TO_MS)
546 struct {
547 /* May contain secret, length of secret as uint16be, other secret and
548 * other secret length as uint16be.
549 */
550 uint8_t secret[PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE * 2 + 4];
551 size_t secret_length;
552 uint8_t seed[CRACEN_TLS12_PRF_MAX_SEED_SIZE];
553 size_t seed_length;
554 uint8_t label[CRACEN_TLS12_PRF_MAX_LABEL_SIZE];
555 size_t label_length;
556 size_t counter;
557 uint8_t a[SX_HASH_MAX_ENABLED_BLOCK_SIZE];
558 } tls12;
559#endif /* PSA_NEED_CRACEN_TLS12_PRF || PSA_NEED_CRACEN_TLS12_PSK_TO_MS */
560 };
561};
563
566 psa_algorithm_t alg; /* Hashing algorithm. */
567 uint8_t secret[CRACEN_P256_KEY_SIZE]; /* Secret value derived from the password. */
572 uint8_t rd_idx;
573 uint8_t wr_idx;
574 uint8_t x[3][CRACEN_P256_KEY_SIZE]; /* Private keys. */
575 uint8_t X[3][CRACEN_P256_POINT_SIZE]; /* Public keys. */
576 uint8_t P[3][CRACEN_P256_POINT_SIZE]; /* Peer keys. */
579 const struct sx_pk_ecurve *curve;
580};
582
591
592#define CRACEN_SRP_HASH_ALG PSA_ALG_SHA_512
593#define CRACEN_SRP_HASH_LENGTH PSA_HASH_LENGTH(CRACEN_SRP_HASH_ALG)
595#define CRACEN_SRP_RFC3526_KEY_BITS_SIZE 3072
596#define CRACEN_SRP_FIELD_SIZE PSA_BITS_TO_BYTES(CRACEN_SRP_RFC3526_KEY_BITS_SIZE)
597
602#define CRACEN_SRP_MAX_SALT_LENGTH 64
603
606 psa_pake_role_t role; /* Protocol role. */
607 uint8_t user_hash[CRACEN_SRP_HASH_LENGTH]; /* Hash of the username. */
608 uint8_t salt[CRACEN_SRP_MAX_SALT_LENGTH]; /* Salt chosen by server. */
609 size_t salt_len; /* Length of salt. */
610 union {
611 /* x = SHA512(salt | SHA512(user | ":" | pass)). */
613 uint8_t v[CRACEN_SRP_FIELD_SIZE]; /* v = g^x mod N. */
614 };
615 uint8_t ab[32]; /* Random a for client, b for server. */
616 uint8_t A[CRACEN_SRP_FIELD_SIZE]; /* (v + g^b) mod N. */
617 uint8_t B[CRACEN_SRP_FIELD_SIZE]; /* g^a mod N. */
618
619 uint8_t M[CRACEN_SRP_HASH_LENGTH]; /* H(H(N) xor H(g) | H(U) | salt | A | B | K). */
620 uint8_t K[CRACEN_SRP_HASH_LENGTH]; /* Shared key k = H_Interleaved(S). */
621};
623
626 psa_algorithm_t alg;
627 cracen_hash_operation_t hash_op; /* Protocol transcript (TT). */
629 uint8_t w1_or_L[CRACEN_P256_POINT_SIZE]; /* w1 is scalar, L is a point. */
631 /* Includes prefix for uncompressed points (0x04). */
633 /* Includes prefix for uncompressed points (0x04). */
636 uint8_t shared_len;
639 uint8_t prover[32];
640 uint8_t verifier[32];
641 uint8_t prover_len;
643 const uint8_t *MN;
644 const uint8_t *NM;
645 psa_pake_role_t role;
646 const struct sx_pk_ecurve *curve;
647};
649
679
682 psa_algorithm_t alg;
683 union {
684#ifdef PSA_NEED_CRACEN_SRP_6
685 cracen_srp_operation_t cracen_srp_ctx;
686#endif /* PSA_NEED_CRACEN_SRP_6 */
687#ifdef PSA_NEED_CRACEN_ECJPAKE
688 cracen_jpake_operation_t cracen_jpake_ctx;
689#endif /* PSA_NEED_CRACEN_ECJPAKE */
690#ifdef PSA_NEED_CRACEN_SPAKE2P
691 cracen_spake2p_operation_t cracen_spake2p_ctx;
692#endif /* PSA_NEED_CRACEN_SPAKE2P */
693#ifdef PSA_NEED_CRACEN_WPA3_SAE
694 cracen_wpa3_sae_operation_t cracen_wpa3_sae_ctx;
695#endif /* PSA_NEED_CRACEN_WPA3_SAE */
696 uint8_t _unused;
697 };
698};
700
708 size_t sz;
709 uint8_t *r;
710 uint8_t *s;
711};
712
720 size_t sz;
721 const uint8_t *r;
722 const uint8_t *s;
723};
724
727 const struct sx_pk_ecurve *curve;
728 const uint8_t *d;
729};
730
733 const struct sx_pk_ecurve *curve;
734 uint8_t *qx;
735 uint8_t *qy;
736};
737
743
746 const struct sx_pk_cmd_def *cmd;
747 unsigned int slotmask;
748 unsigned int dataidx;
749 const struct sx_buf *elements[5];
750};
751
758 uint8_t *addr;
759 size_t sz;
760};
761
764 const uint8_t *a;
765 size_t asz;
766 const uint8_t *b;
767 size_t bsz;
768};
769
772 const uint8_t *pubexp;
773 size_t pubexpsz;
774 uint8_t *p;
775 uint8_t *q;
777 size_t mrrounds;
778};
779
782 const uint8_t *pubexp;
783 size_t pubexpsz;
784 uint8_t *p;
785 uint8_t *q;
786 uint8_t *rndout;
787 uint8_t *qptr;
789 size_t attempts;
790};
791
793
794#endif /* CRACEN_PSA_PRIMITIVES_H */
#define CRACEN_WPA3_SAE_MAX_PWD_LEN
Definition cracen_psa_primitives.h:188
#define CRACEN_WPA3_SAE_COMMIT_SIZE
Definition cracen_psa_primitives.h:211
struct cracen_spake2p_operation cracen_spake2p_operation_t
Definition cracen_psa_primitives.h:648
struct cracen_cipher_operation cracen_cipher_operation_t
Definition cracen_psa_primitives.h:335
#define CRACEN_PBKDF_MAX_SALT_SIZE
Definition cracen_psa_primitives.h:132
struct cracen_sw_gcm_context_s cracen_sw_gcm_context_t
Definition cracen_psa_primitives.h:384
#define CRACEN_MAX_CIPHER_KEY_SIZE
Definition cracen_psa_primitives.h:125
#define CRACEN_WPA3_SAE_PMK_LEN
Definition cracen_psa_primitives.h:195
#define CRACEN_WPA3_SAE_PMKID_SIZE
Definition cracen_psa_primitives.h:197
struct cracen_prng_context cracen_prng_context_t
Definition cracen_psa_primitives.h:590
struct cracen_srp_operation cracen_srp_operation_t
Definition cracen_psa_primitives.h:622
#define CRACEN_PRNG_KEY_SIZE
Definition cracen_psa_primitives.h:153
#define CRACEN_TLS12_PRF_MAX_SEED_SIZE
Definition cracen_psa_primitives.h:147
#define SX_BLKCIPHER_MAX_BLK_SZ
Definition cracen_psa_primitives.h:85
#define SX_BLKCIPHER_IV_SZ
Definition cracen_psa_primitives.h:48
struct cracen_hash_operation_s cracen_hash_operation_t
Definition cracen_psa_primitives.h:306
cracen_context_state
Definition cracen_psa_primitives.h:282
@ CRACEN_CONTEXT_INITIALIZED
Definition cracen_psa_primitives.h:284
@ CRACEN_NOT_INITIALIZED
Definition cracen_psa_primitives.h:283
@ CRACEN_HW_RESERVED
Definition cracen_psa_primitives.h:285
struct cracen_xof_operation_s cracen_xof_operation_t
Definition cracen_psa_primitives.h:318
cracen_kd_state
Definition cracen_psa_primitives.h:234
@ CRACEN_KD_STATE_MAC_CTR_INPUT_LABEL
Definition cracen_psa_primitives.h:252
@ CRACEN_KD_STATE_MAC_CTR_OUTPUT
Definition cracen_psa_primitives.h:254
@ CRACEN_KD_STATE_WPA3_SAE_H2E_SALT
Definition cracen_psa_primitives.h:270
@ CRACEN_KD_STATE_MAC_CTR_INPUT_CONTEXT
Definition cracen_psa_primitives.h:253
@ CRACEN_KD_STATE_PBKDF2_PASSWORD
Definition cracen_psa_primitives.h:246
@ CRACEN_KD_STATE_HKDF_INIT
Definition cracen_psa_primitives.h:238
@ CRACEN_KD_STATE_WPA3_SAE_H2E_PASSWORD
Definition cracen_psa_primitives.h:271
@ CRACEN_KD_STATE_HKDF_OUTPUT
Definition cracen_psa_primitives.h:241
@ CRACEN_KD_STATE_WPA3_SAE_H2E_INIT
Definition cracen_psa_primitives.h:269
@ CRACEN_KD_STATE_TLS12_PSK_TO_MS_OUTPUT
Definition cracen_psa_primitives.h:262
@ CRACEN_KD_STATE_TLS12_ECJPAKE_TO_PMS_OUTPUT
Definition cracen_psa_primitives.h:266
@ CRACEN_KD_STATE_WPA3_SAE_H2E_OUTPUT
Definition cracen_psa_primitives.h:273
@ CRACEN_KD_STATE_MAC_CTR_KEY_LOADED
Definition cracen_psa_primitives.h:251
@ CRACEN_KD_STATE_PBKDF2_INIT
Definition cracen_psa_primitives.h:244
@ CRACEN_KD_STATE_TLS12_PSK_TO_MS_INIT
Definition cracen_psa_primitives.h:261
@ CRACEN_KD_STATE_HKDF_KEYED
Definition cracen_psa_primitives.h:240
@ CRACEN_KD_STATE_HKDF_STARTED
Definition cracen_psa_primitives.h:239
@ CRACEN_KD_STATE_PBKDF2_OUTPUT
Definition cracen_psa_primitives.h:247
@ CRACEN_KD_STATE_MAC_CTR_INIT
Definition cracen_psa_primitives.h:250
@ CRACEN_KD_STATE_TLS12_PRF_INIT
Definition cracen_psa_primitives.h:257
@ CRACEN_KD_STATE_WPA3_SAE_H2E_INFO
Definition cracen_psa_primitives.h:272
@ CRACEN_KD_STATE_INVALID
Definition cracen_psa_primitives.h:235
@ CRACEN_KD_STATE_TLS12_PRF_OUTPUT
Definition cracen_psa_primitives.h:258
@ CRACEN_KD_STATE_PBKDF2_SALT
Definition cracen_psa_primitives.h:245
@ CRACEN_KD_STATE_TLS12_ECJPAKE_TO_PMS_INIT
Definition cracen_psa_primitives.h:265
#define CRACEN_MAC_MAX_LABEL_SIZE
Definition cracen_psa_primitives.h:141
#define CRACEN_MAX_AEAD_KEY_SIZE
Definition cracen_psa_primitives.h:102
struct cracen_pake_operation cracen_pake_operation_t
Definition cracen_psa_primitives.h:699
#define CRACEN_SRP_MAX_SALT_LENGTH
Definition cracen_psa_primitives.h:602
#define CRACEN_SRP_FIELD_SIZE
Definition cracen_psa_primitives.h:596
#define CRACEN_MAC_CTR_MAX_KEY_SIZE
Definition cracen_psa_primitives.h:94
#define CCM_STAR_L
Definition cracen_psa_primitives.h:63
#define CRACEN_AES_GCM_HTABLE_SIZE
Definition cracen_psa_primitives.h:226
#define CRACEN_P256_POINT_SIZE
Definition cracen_psa_primitives.h:145
struct cracen_cmac_context_s cracen_cmac_context_t
Definition cracen_psa_primitives.h:444
struct cracen_mac_operation_s cracen_mac_operation_t
Definition cracen_psa_primitives.h:483
static psa_status_t cracen_ccm_star_add_length(cracen_cipher_operation_t *operation, size_t input_length)
Definition cracen_psa_primitives.h:341
#define CRACEN_CHACHA20_COUNTER_SIZE
Definition cracen_psa_primitives.h:112
cipher_operation
Definition cracen_psa_primitives.h:228
@ CRACEN_ENCRYPT
Definition cracen_psa_primitives.h:230
@ CRACEN_DECRYPT
Definition cracen_psa_primitives.h:229
#define CRACEN_TLS12_PRF_MAX_LABEL_SIZE
Definition cracen_psa_primitives.h:146
#define SX_BLKCIPHER_CHACHA20_BLK_SZ
Definition cracen_psa_primitives.h:51
#define CRACEN_WPA3_SAE_STA_ID_LEN
Definition cracen_psa_primitives.h:198
struct cracen_sw_ccm_context_s cracen_sw_ccm_context_t
Definition cracen_psa_primitives.h:369
#define CCM_STAR_NONCE_LENGTH
Definition cracen_psa_primitives.h:64
#define SX_BLKCIPHER_AES_BLK_SZ
Definition cracen_psa_primitives.h:49
#define CRACEN_SPAKE2P_HASH_LEN
Definition cracen_psa_primitives.h:185
#define CRACEN_MAC_MAX_CONTEXT_SIZE
Definition cracen_psa_primitives.h:142
#define CCM_STAR_MAX_MESSAGE_LEN
Definition cracen_psa_primitives.h:65
struct cracen_key_derivation_operation cracen_key_derivation_operation_t
Definition cracen_psa_primitives.h:562
static void cracen_ccm_star_build_a1(uint8_t iv[(16U)], const uint8_t *nonce)
Definition cracen_psa_primitives.h:71
#define CRACEN_MAX_AEAD_BLOCK_SIZE
Definition cracen_psa_primitives.h:89
struct cracen_wpa3_sae_operation cracen_wpa3_sae_operation_t
Definition cracen_psa_primitives.h:678
#define CRACEN_JPAKE_USER_ID_MAX_SIZE
Definition cracen_psa_primitives.h:143
struct cracen_aead_operation cracen_aead_operation_t
Definition cracen_psa_primitives.h:435
#define CRACEN_HKDF_MAX_INFO_SIZE
Definition cracen_psa_primitives.h:139
struct cracen_jpake_operation cracen_jpake_operation_t
Definition cracen_psa_primitives.h:581
#define CRACEN_MAX_AES_KEY_SIZE
Definition cracen_psa_primitives.h:88
#define CRACEN_SRP_HASH_LENGTH
Definition cracen_psa_primitives.h:593
#define CRACEN_P256_KEY_SIZE
Definition cracen_psa_primitives.h:144
uint8_t nonce_length
Definition cracen_psa_primitives.h:409
size_t plaintext_length
Definition cracen_psa_primitives.h:411
bool ad_finished
Definition cracen_psa_primitives.h:417
uint8_t unprocessed_input[(64u)]
Definition cracen_psa_primitives.h:413
uint8_t tag_size
Definition cracen_psa_primitives.h:415
size_t ad_length
Definition cracen_psa_primitives.h:410
uint8_t key_buffer[(32u)]
Definition cracen_psa_primitives.h:407
enum cipher_operation dir
Definition cracen_psa_primitives.h:412
psa_algorithm_t alg
Definition cracen_psa_primitives.h:405
uint8_t nonce[PSA_AEAD_NONCE_MAX_SIZE]
Definition cracen_psa_primitives.h:408
struct sxaead ctx
Definition cracen_psa_primitives.h:418
uint8_t unprocessed_input_bytes
Definition cracen_psa_primitives.h:414
struct sxkeyref keyref
Definition cracen_psa_primitives.h:406
enum cracen_context_state context_state
Definition cracen_psa_primitives.h:416
Definition cracen_psa_primitives.h:404
uint8_t blk_size
Definition cracen_psa_primitives.h:330
struct sxkeyref keyref
Definition cracen_psa_primitives.h:326
uint8_t unprocessed_input[(16U)]
Definition cracen_psa_primitives.h:328
enum cipher_operation dir
Definition cracen_psa_primitives.h:333
psa_algorithm_t alg
Definition cracen_psa_primitives.h:322
uint16_t processed_length
Definition cracen_psa_primitives.h:332
uint8_t unprocessed_input_bytes
Definition cracen_psa_primitives.h:329
uint8_t iv[(16U)]
Definition cracen_psa_primitives.h:325
bool initialized
Definition cracen_psa_primitives.h:324
struct sxblkcipher cipher
Definition cracen_psa_primitives.h:323
uint8_t key_buffer[(32u)]
Definition cracen_psa_primitives.h:327
Definition cracen_psa_primitives.h:321
size_t processed_len
Definition cracen_psa_primitives.h:442
size_t partial_len
Definition cracen_psa_primitives.h:441
uint8_t mac_state[(16U)]
Definition cracen_psa_primitives.h:439
uint8_t partial_block[(16U)]
Definition cracen_psa_primitives.h:440
Definition cracen_psa_primitives.h:438
const uint8_t * s
Definition cracen_psa_primitives.h:722
size_t sz
Definition cracen_psa_primitives.h:720
const uint8_t * r
Definition cracen_psa_primitives.h:721
Definition cracen_psa_primitives.h:719
size_t bsz
Definition cracen_psa_primitives.h:767
const uint8_t * a
Definition cracen_psa_primitives.h:764
const uint8_t * b
Definition cracen_psa_primitives.h:766
size_t asz
Definition cracen_psa_primitives.h:765
Definition cracen_psa_primitives.h:763
uint8_t * addr
Definition cracen_psa_primitives.h:758
size_t sz
Definition cracen_psa_primitives.h:759
Definition cracen_psa_primitives.h:757
struct cracen_ecc_pub_key pub_key
Definition cracen_psa_primitives.h:741
struct cracen_ecc_priv_key priv_key
Definition cracen_psa_primitives.h:740
Definition cracen_psa_primitives.h:739
const struct sx_pk_ecurve * curve
Definition cracen_psa_primitives.h:727
const uint8_t * d
Definition cracen_psa_primitives.h:728
Definition cracen_psa_primitives.h:726
const struct sx_pk_ecurve * curve
Definition cracen_psa_primitives.h:733
uint8_t * qx
Definition cracen_psa_primitives.h:734
uint8_t * qy
Definition cracen_psa_primitives.h:735
Definition cracen_psa_primitives.h:732
struct sxhash sx_ctx
Definition cracen_psa_primitives.h:293
const struct sxhashalg * sx_hash_algo
Definition cracen_psa_primitives.h:290
uint8_t input_buffer[SX_HASH_MAX_ENABLED_BLOCK_SIZE]
Definition cracen_psa_primitives.h:301
bool has_saved_state
Definition cracen_psa_primitives.h:304
size_t bytes_left_for_next_block
Definition cracen_psa_primitives.h:298
Definition cracen_psa_primitives.h:289
uint8_t x[3][32]
Definition cracen_psa_primitives.h:574
uint8_t P[3][64]
Definition cracen_psa_primitives.h:576
psa_algorithm_t alg
Definition cracen_psa_primitives.h:566
size_t user_id_length
Definition cracen_psa_primitives.h:570
const struct sx_pk_ecurve * curve
Definition cracen_psa_primitives.h:579
uint8_t X[3][64]
Definition cracen_psa_primitives.h:575
uint8_t wr_idx
Definition cracen_psa_primitives.h:573
uint8_t rd_idx
Definition cracen_psa_primitives.h:572
uint8_t user_id[16]
Definition cracen_psa_primitives.h:568
uint8_t secret[32]
Definition cracen_psa_primitives.h:567
uint8_t r[32]
Definition cracen_psa_primitives.h:578
uint8_t peer_id[16]
Definition cracen_psa_primitives.h:569
uint8_t V[64]
Definition cracen_psa_primitives.h:577
size_t peer_id_length
Definition cracen_psa_primitives.h:571
Definition cracen_psa_primitives.h:565
cracen_hash_operation_t hash_op
Definition cracen_psa_primitives.h:494
psa_algorithm_t alg
Definition cracen_psa_primitives.h:487
uint8_t output_block_available_bytes
Definition cracen_psa_primitives.h:491
cracen_mac_operation_t mac_op
Definition cracen_psa_primitives.h:493
enum cracen_kd_state state
Definition cracen_psa_primitives.h:488
uint8_t output_block[SX_MAX(SX_HASH_MAX_ENABLED_BLOCK_SIZE, SX_BLKCIPHER_PRIV_SZ)]
Definition cracen_psa_primitives.h:490
uint64_t capacity
Definition cracen_psa_primitives.h:489
Definition cracen_psa_primitives.h:486
uint8_t input_buffer[SX_MAX(SX_HASH_MAX_ENABLED_BLOCK_SIZE, SX_BLKCIPHER_PRIV_SZ)]
Definition cracen_psa_primitives.h:457
size_t mac_size
Definition cracen_psa_primitives.h:449
size_t bytes_left_for_next_block
Definition cracen_psa_primitives.h:454
bool has_saved_state
Definition cracen_psa_primitives.h:460
psa_algorithm_t alg
Definition cracen_psa_primitives.h:448
Definition cracen_psa_primitives.h:447
psa_algorithm_t alg
Definition cracen_psa_primitives.h:682
Definition cracen_psa_primitives.h:681
uint32_t initialized
Definition cracen_psa_primitives.h:588
uint8_t V[(16U)]
Definition cracen_psa_primitives.h:586
uint64_t reseed_counter
Definition cracen_psa_primitives.h:587
uint8_t key[(32u)]
Definition cracen_psa_primitives.h:585
Definition cracen_psa_primitives.h:584
unsigned int slotmask
Definition cracen_psa_primitives.h:747
const struct sx_pk_cmd_def * cmd
Definition cracen_psa_primitives.h:746
const struct sx_buf * elements[5]
Definition cracen_psa_primitives.h:749
unsigned int dataidx
Definition cracen_psa_primitives.h:748
Definition cracen_psa_primitives.h:745
uint8_t * q
Definition cracen_psa_primitives.h:775
size_t pubexpsz
Definition cracen_psa_primitives.h:773
uint8_t * p
Definition cracen_psa_primitives.h:774
const uint8_t * pubexp
Definition cracen_psa_primitives.h:772
size_t candidatesz
Definition cracen_psa_primitives.h:776
size_t mrrounds
Definition cracen_psa_primitives.h:777
Definition cracen_psa_primitives.h:771
size_t attempts
Definition cracen_psa_primitives.h:789
uint8_t * p
Definition cracen_psa_primitives.h:784
uint8_t * qptr
Definition cracen_psa_primitives.h:787
size_t pubexpsz
Definition cracen_psa_primitives.h:783
const uint8_t * pubexp
Definition cracen_psa_primitives.h:782
size_t candidatesz
Definition cracen_psa_primitives.h:788
uint8_t * q
Definition cracen_psa_primitives.h:785
uint8_t * rndout
Definition cracen_psa_primitives.h:786
Definition cracen_psa_primitives.h:781
uint8_t * s
Definition cracen_psa_primitives.h:710
size_t sz
Definition cracen_psa_primitives.h:708
uint8_t * r
Definition cracen_psa_primitives.h:709
Definition cracen_psa_primitives.h:707
uint8_t prover_len
Definition cracen_psa_primitives.h:641
uint8_t verifier_len
Definition cracen_psa_primitives.h:642
uint8_t YX[64+1]
Definition cracen_psa_primitives.h:634
const uint8_t * NM
Definition cracen_psa_primitives.h:644
uint8_t xy[32]
Definition cracen_psa_primitives.h:630
psa_algorithm_t alg
Definition cracen_psa_primitives.h:626
uint8_t verifier[32]
Definition cracen_psa_primitives.h:640
const uint8_t * MN
Definition cracen_psa_primitives.h:643
const struct sx_pk_ecurve * curve
Definition cracen_psa_primitives.h:646
uint8_t KconfPV[PSA_HASH_LENGTH(PSA_ALG_SHA_256)]
Definition cracen_psa_primitives.h:637
cracen_hash_operation_t hash_op
Definition cracen_psa_primitives.h:627
uint8_t XY[64+1]
Definition cracen_psa_primitives.h:632
uint8_t w0[32]
Definition cracen_psa_primitives.h:628
uint8_t KconfVP[PSA_HASH_LENGTH(PSA_ALG_SHA_256)]
Definition cracen_psa_primitives.h:638
uint8_t prover[32]
Definition cracen_psa_primitives.h:639
uint8_t shared[PSA_HASH_LENGTH(PSA_ALG_SHA_256)]
Definition cracen_psa_primitives.h:635
uint8_t shared_len
Definition cracen_psa_primitives.h:636
psa_pake_role_t role
Definition cracen_psa_primitives.h:645
uint8_t w1_or_L[64]
Definition cracen_psa_primitives.h:629
Definition cracen_psa_primitives.h:625
uint8_t B[PSA_BITS_TO_BYTES(3072)]
Definition cracen_psa_primitives.h:617
uint8_t K[PSA_HASH_LENGTH(PSA_ALG_SHA_512)]
Definition cracen_psa_primitives.h:620
uint8_t x[PSA_HASH_LENGTH(PSA_ALG_SHA_512)]
Definition cracen_psa_primitives.h:612
psa_pake_role_t role
Definition cracen_psa_primitives.h:606
uint8_t user_hash[PSA_HASH_LENGTH(PSA_ALG_SHA_512)]
Definition cracen_psa_primitives.h:607
uint8_t v[PSA_BITS_TO_BYTES(3072)]
Definition cracen_psa_primitives.h:613
uint8_t ab[32]
Definition cracen_psa_primitives.h:615
uint8_t A[PSA_BITS_TO_BYTES(3072)]
Definition cracen_psa_primitives.h:616
uint8_t M[PSA_HASH_LENGTH(PSA_ALG_SHA_512)]
Definition cracen_psa_primitives.h:619
uint8_t salt[64]
Definition cracen_psa_primitives.h:608
size_t salt_len
Definition cracen_psa_primitives.h:609
Definition cracen_psa_primitives.h:605
uint8_t keystream[(16U)]
Definition cracen_psa_primitives.h:362
uint8_t cbc_mac[(16U)]
Definition cracen_psa_primitives.h:360
uint8_t ctr_block[(16U)]
Definition cracen_psa_primitives.h:361
bool cbc_mac_initialized
Definition cracen_psa_primitives.h:366
size_t keystream_offset
Definition cracen_psa_primitives.h:364
size_t partial_len
Definition cracen_psa_primitives.h:365
bool ctr_initialized
Definition cracen_psa_primitives.h:367
uint8_t partial_block[(16U)]
Definition cracen_psa_primitives.h:363
Definition cracen_psa_primitives.h:359
bool ghash_initialized
Definition cracen_psa_primitives.h:382
size_t keystream_offset
Definition cracen_psa_primitives.h:378
uint8_t ctr_block[(16U)]
Definition cracen_psa_primitives.h:376
uint64_t h_table[16][(16U)/sizeof(uint64_t)]
Definition cracen_psa_primitives.h:374
size_t total_data_enc
Definition cracen_psa_primitives.h:380
bool ctr_initialized
Definition cracen_psa_primitives.h:381
size_t total_ad_fed
Definition cracen_psa_primitives.h:379
uint8_t keystream[(16U)]
Definition cracen_psa_primitives.h:377
uint8_t ghash_block[(16U)]
Definition cracen_psa_primitives.h:375
Definition cracen_psa_primitives.h:372
uint8_t commit[(32+64)]
Definition cracen_psa_primitives.h:668
uint8_t use_h2e
Definition cracen_psa_primitives.h:672
cracen_mac_operation_t mac_op
Definition cracen_psa_primitives.h:652
uint8_t max_id_min_id[2 *(6u)]
Definition cracen_psa_primitives.h:662
uint8_t password[(256u)]
Definition cracen_psa_primitives.h:654
uint8_t min_id[(6u)]
Definition cracen_psa_primitives.h:660
uint8_t kck[32]
Definition cracen_psa_primitives.h:665
uint8_t peer_commit[(32+64)]
Definition cracen_psa_primitives.h:669
uint8_t pmkid[(16u)]
Definition cracen_psa_primitives.h:667
uint8_t salt_set
Definition cracen_psa_primitives.h:674
psa_algorithm_t hash_alg
Definition cracen_psa_primitives.h:653
uint8_t max_id[(6u)]
Definition cracen_psa_primitives.h:659
uint8_t hash_length
Definition cracen_psa_primitives.h:670
uint8_t pwe[64]
Definition cracen_psa_primitives.h:656
uint16_t send_confirm
Definition cracen_psa_primitives.h:675
const struct sx_pk_ecurve * curve
Definition cracen_psa_primitives.h:676
uint8_t pmk_length
Definition cracen_psa_primitives.h:671
uint16_t pw_length
Definition cracen_psa_primitives.h:655
uint8_t keys_set
Definition cracen_psa_primitives.h:673
uint8_t rand[32]
Definition cracen_psa_primitives.h:664
uint8_t pmk[(32u)]
Definition cracen_psa_primitives.h:666
Definition cracen_psa_primitives.h:651
size_t pool_avail
Definition cracen_psa_primitives.h:316
size_t pool_offset
Definition cracen_psa_primitives.h:315
cracen_hash_operation_t hash_op
Definition cracen_psa_primitives.h:310
size_t prev_squeezed
Definition cracen_psa_primitives.h:313
uint8_t pool[SX_XOF_POOL_BUF_SZ]
Definition cracen_psa_primitives.h:314
Definition cracen_psa_primitives.h:309