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
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
40#if defined(PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS)
41#if defined(PSA_NEED_CRACEN_CHACHA20_POLY1305)
42#include "poly1305_ext.h"
43#endif /* PSA_NEED_CRACEN_CHACHA20_POLY1305 */
44#endif /* PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS */
45
46#define SX_BLKCIPHER_IV_SZ (16U)
47#define SX_BLKCIPHER_AES_BLK_SZ (16U)
48
49#define SX_BLKCIPHER_CHACHA20_BLK_SZ (64U)
50
51#if defined(PSA_NEED_CRACEN_STREAM_CIPHER_CHACHA20)
56#define SX_BLKCIPHER_MAX_BLK_SZ SX_BLKCIPHER_CHACHA20_BLK_SZ
57#else
58#define SX_BLKCIPHER_MAX_BLK_SZ SX_BLKCIPHER_AES_BLK_SZ
59#endif
60
61#define CRACEN_MAX_AES_KEY_SIZE (32u)
62#define CRACEN_MAX_AEAD_BLOCK_SIZE (64u)
63
64#if defined(PSA_NEED_CRACEN_SP800_108_COUNTER_HMAC)
65#define CRACEN_MAC_CTR_MAX_KEY_SIZE (128u)
66#else
67#define CRACEN_MAC_CTR_MAX_KEY_SIZE CRACEN_MAX_AES_KEY_SIZE
68#endif /* PSA_NEED_CRACEN_SP800_108_COUNTER_HMAC */
69
75#define CRACEN_MAX_AEAD_KEY_SIZE (32u)
76
82#define CRACEN_MAX_CHACHA20_KEY_SIZE (32u)
83
84/* Maximum ChaCha20 counter size. */
85#define CRACEN_CHACHA20_COUNTER_SIZE (4u)
86
87/* Defined by RFC8439 */
88#define CRACEN_POLY1305_TAG_SIZE (16u)
89#define CRACEN_POLY1305_KEY_SIZE (32u)
90/* BA417 uses 131 bit */
91#define CRACEN_POLY1305_ACC_SIZE (17u)
92
98#define CRACEN_MAX_CIPHER_KEY_SIZE (32u)
99
105#define CRACEN_PBKDF_MAX_SALT_SIZE 128
106
112#define CRACEN_HKDF_MAX_INFO_SIZE 128
113
114#define CRACEN_MAC_MAX_LABEL_SIZE 127
115#define CRACEN_MAC_MAX_CONTEXT_SIZE 160
116#define CRACEN_JPAKE_USER_ID_MAX_SIZE 16
117#define CRACEN_P256_KEY_SIZE 32
118#define CRACEN_P256_POINT_SIZE 64
119#define CRACEN_TLS12_PRF_MAX_LABEL_SIZE 128
120#define CRACEN_TLS12_PRF_MAX_SEED_SIZE 128
121
126#define CRACEN_PRNG_KEY_SIZE (32u)
127
132#define CRACEN_PRNG_ENTROPY_SIZE (48u)
133
138#define CRACEN_PRNG_NONCE_SIZE (0u)
139
144#define CRACEN_PRNG_PERSONALIZATION_MAX_SIZE (48u)
145
150#define CRACEN_PRNG_WORKMEM_SIZE (176u)
151
156#define CRACEN_PRNG_MAX_REQUEST_SIZE (1u << 16)
157
158#define CRACEN_SPAKE2P_HASH_LEN PSA_HASH_LENGTH(PSA_ALG_SHA_256)
159
160#define CRACEN_WPA3_SAE_MAX_SSID_LEN (32u)
161#define CRACEN_WPA3_SAE_MAX_PWD_LEN (256u)
162#define CRACEN_WPA3_SAE_MAX_PWID_LEN (256u)
163
168#define CRACEN_WPA3_SAE_PMK_LEN (32u)
169
170#define CRACEN_WPA3_SAE_PMKID_SIZE (16u)
171#define CRACEN_WPA3_SAE_STA_ID_LEN (6u)
172
178#define CRACEN_WPA3_SAE_IANA_GROUP_SIZE (2u)
179
184#define CRACEN_WPA3_SAE_COMMIT_SIZE (CRACEN_P256_KEY_SIZE + \
185 CRACEN_P256_POINT_SIZE)
186
187#define CRACEN_WPA3_SAE_SEND_CONFIRM_SIZE (2u)
188
193#define CRACEN_WPA3_SAE_CONFIRM_SIZE (CRACEN_WPA3_SAE_SEND_CONFIRM_SIZE + \
194 PSA_HASH_LENGTH(PSA_ALG_SHA_256))
195
199#define CRACEN_AES_GCM_HTABLE_SIZE 16
200
205
248
260
263 const struct sxhashalg *sx_hash_algo;
264
265 /* Internal sxcrypto context. */
266 struct sxhash sx_ctx;
267
268 /* The driver can perform a processing round after getting a multiple of the block size.
269 * Therefore, the driver must know how much data is left to fill the next block.
270 */
272
273 /* Buffer for input data to fill up the next block. */
274 uint8_t input_buffer[SX_HASH_MAX_ENABLED_BLOCK_SIZE];
275
276 /* Flag indicating saved state exists that needs to be resumed */
278};
280
284
287 uint8_t pool[SX_XOF_POOL_BUF_SZ];
290};
292
307
310 uint8_t cbc_mac[SX_BLKCIPHER_AES_BLK_SZ]; /* CBC-MAC state. */
311 uint8_t ctr_block[SX_BLKCIPHER_AES_BLK_SZ]; /* Counter block for CTR mode. */
312 uint8_t keystream[SX_BLKCIPHER_AES_BLK_SZ]; /* Generated keystream. */
313 uint8_t partial_block[SX_BLKCIPHER_AES_BLK_SZ]; /* Buffer for partial blocks. */
314 size_t keystream_offset; /* Position in keystream buffer. */
315 size_t total_ad_fed; /* Total AD bytes processed. */
316 size_t data_partial_len; /* Partial data block length. */
317 bool cbc_mac_initialized; /* CBC-MAC initialization flag. */
318 bool ctr_initialized; /* CTR initialization flag. */
319 bool has_partial_ad_block; /* Partial AD block flag. */
320};
322
325 /* Precalculated HTable */
327 uint8_t ghash_block[SX_BLKCIPHER_AES_BLK_SZ]; /* GHASH calculation result */
328 uint8_t ctr_block[SX_BLKCIPHER_AES_BLK_SZ]; /* Counter block for CTR mode */
329 uint8_t keystream[SX_BLKCIPHER_AES_BLK_SZ]; /* Generated keystream */
330 size_t keystream_offset; /* Position in keystream buffer */
331 size_t total_ad_fed; /* Total AD bytes processed */
332 size_t total_data_enc; /* Total size of the ciphertext */
333 bool ctr_initialized; /* CTR initialization flag */
334 bool ghash_initialized; /* GHASH initialization flag */
335};
337
338#if defined(PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS)
339#if defined(PSA_NEED_CRACEN_CHACHA20_POLY1305)
341struct cracen_sw_chacha20_poly1305_context_s {
342 uint8_t ctr[CRACEN_CHACHA20_COUNTER_SIZE]; /* Counter */
343 uint8_t keystream[SX_BLKCIPHER_CHACHA20_BLK_SZ]; /* Generated keystream */
344 size_t keystream_offset; /* Position in keystream buffer */
345 poly1305_ext_context poly_ctx;
346 size_t total_ad_fed; /* Total AD bytes processed */
347 size_t total_data_enc; /* Total size of the ciphertext */
348 bool ctr_initialized; /* CTR initialization flag */
349 bool poly_initialized; /* Poly1305 initialization flag */
350};
351typedef struct cracen_sw_chacha20_poly1305_context_s cracen_sw_chacha20_poly1305_context_t;
352#endif /* PSA_NEED_CRACEN_CHACHA20_POLY1305 */
353#endif /* PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS */
354
357 psa_algorithm_t alg;
358 struct sxkeyref keyref;
360 uint8_t nonce[PSA_AEAD_NONCE_MAX_SIZE];
362 size_t ad_length;
367 uint8_t tag_size;
370 struct sxaead ctx;
371#if defined(PSA_NEED_CRACEN_CTR_SIZE_WORKAROUNDS)
372#if defined(PSA_NEED_CRACEN_CCM_AES)
373 cracen_sw_ccm_context_t sw_ccm_ctx;
374#endif /* PSA_NEED_CRACEN_CCM_AES */
375#endif /* PSA_NEED_CRACEN_CTR_SIZE_WORKAROUNDS */
376
377#if defined(PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS)
378#if defined(PSA_NEED_CRACEN_GCM_AES)
379 cracen_sw_gcm_context_t sw_gcm_ctx;
380#endif /* PSA_NEED_CRACEN_GCM_AES */
381
382#if defined(PSA_NEED_CRACEN_CHACHA20_POLY1305)
383 cracen_sw_chacha20_poly1305_context_t sw_chacha_poly_ctx;
384#endif /* PSA_NEED_CRACEN_CHACHA20_POLY1305 */
385#endif /* PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS */
386};
388
391 uint8_t mac_state[SX_BLKCIPHER_AES_BLK_SZ]; /* Current MAC state. */
394 size_t processed_len; /* Total length of data processed so far, in bytes. */
395};
397
400 psa_algorithm_t alg;
401 size_t mac_size;
402
403 /* The driver can perform a processing round after getting a multiple of the block size.
404 * Therefore, the driver must know how much data is left to fill the next block.
405 */
407
408 /* Buffer for input data to fill up the next block. */
409 uint8_t input_buffer[SX_MAX(SX_HASH_MAX_ENABLED_BLOCK_SIZE, SX_BLKCIPHER_PRIV_SZ)];
410
411 /* Flag indicating saved state exists that needs to be resumed */
413 union {
414#if defined(PSA_NEED_CRACEN_HMAC)
415 struct {
416 struct sxhash hashctx;
417 uint8_t workmem[SX_HASH_MAX_ENABLED_BLOCK_SIZE +
418 PSA_HASH_MAX_SIZE];
419 } hmac;
420#endif /* PSA_NEED_CRACEN_HMAC */
421#if defined(PSA_NEED_CRACEN_CMAC)
422 struct {
423 struct sxmac ctx;
424 struct sxkeyref keyref;
425 uint8_t key_buffer[CRACEN_MAX_AES_KEY_SIZE];
426#if defined(PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS)
428 struct sxblkcipher cipher;
429#endif /* PSA_NEED_CRACEN_MULTIPART_WORKAROUNDS */
430 } cmac;
431#endif /* PSA_NEED_CRACEN_CMAC */
432 uint8_t _unused;
433 };
434};
436
439 psa_algorithm_t alg;
441 uint64_t capacity;
442 uint8_t output_block[SX_MAX(SX_HASH_MAX_ENABLED_BLOCK_SIZE, SX_BLKCIPHER_PRIV_SZ)];
444 union{
447 };
448 union {
449#if defined(PSA_NEED_CRACEN_HKDF)
450 struct {
451 uint8_t blk_counter;
452 uint8_t prk[SX_HASH_MAX_ENABLED_BLOCK_SIZE];
453 uint8_t t[SX_HASH_MAX_ENABLED_BLOCK_SIZE];
454 uint8_t info[CRACEN_HKDF_MAX_INFO_SIZE];
455 size_t info_length;
456 bool info_set;
457 } hkdf;
458#endif /* PSA_NEED_CRACEN_HKDF */
459#if defined(PSA_NEED_CRACEN_PBKDF2_HMAC)
460 struct {
461 uint64_t input_cost;
462 uint8_t password[SX_HASH_MAX_ENABLED_BLOCK_SIZE];
463 size_t password_length;
464 uint8_t salt[CRACEN_PBKDF_MAX_SALT_SIZE];
465 size_t salt_length;
466 uint32_t blk_counter;
467 uint8_t uj[PSA_MAC_MAX_SIZE];
468 uint8_t tj[PSA_MAC_MAX_SIZE];
469 } pbkdf2;
470#endif /* PSA_NEED_CRACEN_PBKDF2_HMAC */
471#if defined(PSA_NEED_CRACEN_SP800_108_COUNTER_CMAC) || \
472 defined(PSA_NEED_CRACEN_SP800_108_COUNTER_HMAC)
473 struct {
474#if defined(PSA_NEED_CRACEN_SP800_108_COUNTER_CMAC)
475 uint8_t K_0[SX_BLKCIPHER_AES_BLK_SZ];
476#endif /* PSA_NEED_CRACEN_SP800_108_COUNTER_CMAC */
477 psa_key_lifetime_t key_lifetime;
478 mbedtls_svc_key_id_t key_id;
479 uint8_t key_buffer[CRACEN_MAC_CTR_MAX_KEY_SIZE];
480 size_t key_size;
481 uint32_t counter;
482 /* The +1 here is meant to store an algorithm-specific byte needed after
483 * the label.
484 */
485 uint8_t label[CRACEN_MAC_MAX_LABEL_SIZE + 1];
486 size_t label_length;
487 uint8_t context[CRACEN_MAC_MAX_CONTEXT_SIZE];
488 size_t context_length;
489 uint32_t L;
490 } mac_ctr;
491#endif /* PSA_NEED_CRACEN_SP800_108_COUNTER_CMAC || PSA_NEED_CRACEN_SP800_108_COUNTER_HMAC */
492#if defined(PSA_NEED_CRACEN_TLS12_ECJPAKE_TO_PMS)
493 struct {
494 uint8_t key[32];
495 } ecjpake_to_pms;
496#endif /* PSA_NEED_CRACEN_TLS12_ECJPAKE_TO_PMS */
497#if defined(PSA_NEED_CRACEN_TLS12_PRF) || defined(PSA_NEED_CRACEN_TLS12_PSK_TO_MS)
498 struct {
499 /* May contain secret, length of secret as uint16be, other secret and
500 * other secret length as uint16be.
501 */
502 uint8_t secret[PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE * 2 + 4];
503 size_t secret_length;
504 uint8_t seed[CRACEN_TLS12_PRF_MAX_SEED_SIZE];
505 size_t seed_length;
506 uint8_t label[CRACEN_TLS12_PRF_MAX_LABEL_SIZE];
507 size_t label_length;
508 size_t counter;
509 uint8_t a[SX_HASH_MAX_ENABLED_BLOCK_SIZE];
510 } tls12;
511#endif /* PSA_NEED_CRACEN_TLS12_PRF || PSA_NEED_CRACEN_TLS12_PSK_TO_MS */
512 };
513};
515
518 psa_algorithm_t alg; /* Hashing algorithm. */
519 uint8_t secret[CRACEN_P256_KEY_SIZE]; /* Secret value derived from the password. */
524 uint8_t rd_idx;
525 uint8_t wr_idx;
526 uint8_t x[3][CRACEN_P256_KEY_SIZE]; /* Private keys. */
527 uint8_t X[3][CRACEN_P256_POINT_SIZE]; /* Public keys. */
528 uint8_t P[3][CRACEN_P256_POINT_SIZE]; /* Peer keys. */
531 const struct sx_pk_ecurve *curve;
532};
534
543
544#define CRACEN_SRP_HASH_ALG PSA_ALG_SHA_512
545#define CRACEN_SRP_HASH_LENGTH PSA_HASH_LENGTH(CRACEN_SRP_HASH_ALG)
547#define CRACEN_SRP_RFC3526_KEY_BITS_SIZE 3072
548#define CRACEN_SRP_FIELD_SIZE PSA_BITS_TO_BYTES(CRACEN_SRP_RFC3526_KEY_BITS_SIZE)
549
554#define CRACEN_SRP_MAX_SALT_LENGTH 64
555
558 psa_pake_role_t role; /* Protocol role. */
559 uint8_t user_hash[CRACEN_SRP_HASH_LENGTH]; /* Hash of the username. */
560 uint8_t salt[CRACEN_SRP_MAX_SALT_LENGTH]; /* Salt chosen by server. */
561 size_t salt_len; /* Length of salt. */
562 union {
563 /* x = SHA512(salt | SHA512(user | ":" | pass)). */
565 uint8_t v[CRACEN_SRP_FIELD_SIZE]; /* v = g^x mod N. */
566 };
567 uint8_t ab[32]; /* Random a for client, b for server. */
568 uint8_t A[CRACEN_SRP_FIELD_SIZE]; /* (v + g^b) mod N. */
569 uint8_t B[CRACEN_SRP_FIELD_SIZE]; /* g^a mod N. */
570
571 uint8_t M[CRACEN_SRP_HASH_LENGTH]; /* H(H(N) xor H(g) | H(U) | salt | A | B | K). */
572 uint8_t K[CRACEN_SRP_HASH_LENGTH]; /* Shared key k = H_Interleaved(S). */
573};
575
578 psa_algorithm_t alg;
579 cracen_hash_operation_t hash_op; /* Protocol transcript (TT). */
581 uint8_t w1_or_L[CRACEN_P256_POINT_SIZE]; /* w1 is scalar, L is a point. */
583 /* Includes prefix for uncompressed points (0x04). */
585 /* Includes prefix for uncompressed points (0x04). */
588 uint8_t shared_len;
591 uint8_t prover[32];
592 uint8_t verifier[32];
593 uint8_t prover_len;
595 const uint8_t *MN;
596 const uint8_t *NM;
597 psa_pake_role_t role;
598 const struct sx_pk_ecurve *curve;
599};
601
631
634 psa_algorithm_t alg;
635 union {
636#ifdef PSA_NEED_CRACEN_SRP_6
637 cracen_srp_operation_t cracen_srp_ctx;
638#endif /* PSA_NEED_CRACEN_SRP_6 */
639#ifdef PSA_NEED_CRACEN_ECJPAKE
640 cracen_jpake_operation_t cracen_jpake_ctx;
641#endif /* PSA_NEED_CRACEN_ECJPAKE */
642#ifdef PSA_NEED_CRACEN_SPAKE2P
643 cracen_spake2p_operation_t cracen_spake2p_ctx;
644#endif /* PSA_NEED_CRACEN_SPAKE2P */
645#ifdef PSA_NEED_CRACEN_WPA3_SAE
646 cracen_wpa3_sae_operation_t cracen_wpa3_sae_ctx;
647#endif /* PSA_NEED_CRACEN_WPA3_SAE */
648 uint8_t _unused;
649 };
650};
652
660 size_t sz;
661 uint8_t *r;
662 uint8_t *s;
663};
664
672 size_t sz;
673 const uint8_t *r;
674 const uint8_t *s;
675};
676
679 const struct sx_pk_ecurve *curve;
680 const uint8_t *d;
681};
682
685 const struct sx_pk_ecurve *curve;
686 uint8_t *qx;
687 uint8_t *qy;
688};
689
695
698 const struct sx_pk_cmd_def *cmd;
699 unsigned int slotmask;
700 unsigned int dataidx;
701 const struct sx_buf *elements[5];
702};
703
710 uint8_t *addr;
711 size_t sz;
712};
713
716 const uint8_t *a;
717 size_t asz;
718 const uint8_t *b;
719 size_t bsz;
720};
721
724 const uint8_t *pubexp;
725 size_t pubexpsz;
726 uint8_t *p;
727 uint8_t *q;
729 size_t mrrounds;
730};
731
734 const uint8_t *pubexp;
735 size_t pubexpsz;
736 uint8_t *p;
737 uint8_t *q;
738 uint8_t *rndout;
739 uint8_t *qptr;
741 size_t attempts;
742};
743
746#endif /* CRACEN_PSA_PRIMITIVES_H */
#define CRACEN_WPA3_SAE_MAX_PWD_LEN
Definition cracen_psa_primitives.h:161
#define CRACEN_WPA3_SAE_COMMIT_SIZE
Definition cracen_psa_primitives.h:184
#define CRACEN_PBKDF_MAX_SALT_SIZE
Definition cracen_psa_primitives.h:105
#define CRACEN_MAX_CIPHER_KEY_SIZE
Definition cracen_psa_primitives.h:98
#define CRACEN_WPA3_SAE_PMK_LEN
Definition cracen_psa_primitives.h:168
#define CRACEN_WPA3_SAE_PMKID_SIZE
Definition cracen_psa_primitives.h:170
#define CRACEN_PRNG_KEY_SIZE
Definition cracen_psa_primitives.h:126
#define CRACEN_TLS12_PRF_MAX_SEED_SIZE
Definition cracen_psa_primitives.h:120
#define SX_BLKCIPHER_MAX_BLK_SZ
Definition cracen_psa_primitives.h:58
#define SX_BLKCIPHER_IV_SZ
Definition cracen_psa_primitives.h:46
cracen_context_state
Definition cracen_psa_primitives.h:255
@ CRACEN_CONTEXT_INITIALIZED
Definition cracen_psa_primitives.h:257
@ CRACEN_NOT_INITIALIZED
Definition cracen_psa_primitives.h:256
@ CRACEN_HW_RESERVED
Definition cracen_psa_primitives.h:258
cracen_kd_state
Definition cracen_psa_primitives.h:207
@ CRACEN_KD_STATE_MAC_CTR_INPUT_LABEL
Definition cracen_psa_primitives.h:225
@ CRACEN_KD_STATE_MAC_CTR_OUTPUT
Definition cracen_psa_primitives.h:227
@ CRACEN_KD_STATE_WPA3_SAE_H2E_SALT
Definition cracen_psa_primitives.h:243
@ CRACEN_KD_STATE_MAC_CTR_INPUT_CONTEXT
Definition cracen_psa_primitives.h:226
@ CRACEN_KD_STATE_PBKDF2_PASSWORD
Definition cracen_psa_primitives.h:219
@ CRACEN_KD_STATE_HKDF_INIT
Definition cracen_psa_primitives.h:211
@ CRACEN_KD_STATE_WPA3_SAE_H2E_PASSWORD
Definition cracen_psa_primitives.h:244
@ CRACEN_KD_STATE_HKDF_OUTPUT
Definition cracen_psa_primitives.h:214
@ CRACEN_KD_STATE_WPA3_SAE_H2E_INIT
Definition cracen_psa_primitives.h:242
@ CRACEN_KD_STATE_TLS12_PSK_TO_MS_OUTPUT
Definition cracen_psa_primitives.h:235
@ CRACEN_KD_STATE_TLS12_ECJPAKE_TO_PMS_OUTPUT
Definition cracen_psa_primitives.h:239
@ CRACEN_KD_STATE_WPA3_SAE_H2E_OUTPUT
Definition cracen_psa_primitives.h:246
@ CRACEN_KD_STATE_MAC_CTR_KEY_LOADED
Definition cracen_psa_primitives.h:224
@ CRACEN_KD_STATE_PBKDF2_INIT
Definition cracen_psa_primitives.h:217
@ CRACEN_KD_STATE_TLS12_PSK_TO_MS_INIT
Definition cracen_psa_primitives.h:234
@ CRACEN_KD_STATE_HKDF_KEYED
Definition cracen_psa_primitives.h:213
@ CRACEN_KD_STATE_HKDF_STARTED
Definition cracen_psa_primitives.h:212
@ CRACEN_KD_STATE_PBKDF2_OUTPUT
Definition cracen_psa_primitives.h:220
@ CRACEN_KD_STATE_MAC_CTR_INIT
Definition cracen_psa_primitives.h:223
@ CRACEN_KD_STATE_TLS12_PRF_INIT
Definition cracen_psa_primitives.h:230
@ CRACEN_KD_STATE_WPA3_SAE_H2E_INFO
Definition cracen_psa_primitives.h:245
@ CRACEN_KD_STATE_INVALID
Definition cracen_psa_primitives.h:208
@ CRACEN_KD_STATE_TLS12_PRF_OUTPUT
Definition cracen_psa_primitives.h:231
@ CRACEN_KD_STATE_PBKDF2_SALT
Definition cracen_psa_primitives.h:218
@ CRACEN_KD_STATE_TLS12_ECJPAKE_TO_PMS_INIT
Definition cracen_psa_primitives.h:238
#define CRACEN_MAC_MAX_LABEL_SIZE
Definition cracen_psa_primitives.h:114
#define CRACEN_MAX_AEAD_KEY_SIZE
Definition cracen_psa_primitives.h:75
#define CRACEN_SRP_MAX_SALT_LENGTH
Definition cracen_psa_primitives.h:554
#define CRACEN_SRP_FIELD_SIZE
Definition cracen_psa_primitives.h:548
#define CRACEN_MAC_CTR_MAX_KEY_SIZE
Definition cracen_psa_primitives.h:67
#define CRACEN_AES_GCM_HTABLE_SIZE
Definition cracen_psa_primitives.h:199
#define CRACEN_P256_POINT_SIZE
Definition cracen_psa_primitives.h:118
#define CRACEN_CHACHA20_COUNTER_SIZE
Definition cracen_psa_primitives.h:85
cipher_operation
Definition cracen_psa_primitives.h:201
@ CRACEN_ENCRYPT
Definition cracen_psa_primitives.h:203
@ CRACEN_DECRYPT
Definition cracen_psa_primitives.h:202
#define CRACEN_TLS12_PRF_MAX_LABEL_SIZE
Definition cracen_psa_primitives.h:119
#define SX_BLKCIPHER_CHACHA20_BLK_SZ
Definition cracen_psa_primitives.h:49
#define CRACEN_WPA3_SAE_STA_ID_LEN
Definition cracen_psa_primitives.h:171
#define SX_BLKCIPHER_AES_BLK_SZ
Definition cracen_psa_primitives.h:47
#define CRACEN_SPAKE2P_HASH_LEN
Definition cracen_psa_primitives.h:158
#define CRACEN_MAC_MAX_CONTEXT_SIZE
Definition cracen_psa_primitives.h:115
#define CRACEN_MAX_AEAD_BLOCK_SIZE
Definition cracen_psa_primitives.h:62
#define CRACEN_JPAKE_USER_ID_MAX_SIZE
Definition cracen_psa_primitives.h:116
#define CRACEN_HKDF_MAX_INFO_SIZE
Definition cracen_psa_primitives.h:112
#define CRACEN_MAX_AES_KEY_SIZE
Definition cracen_psa_primitives.h:61
#define CRACEN_SRP_HASH_LENGTH
Definition cracen_psa_primitives.h:545
#define CRACEN_P256_KEY_SIZE
Definition cracen_psa_primitives.h:117
peer_id
Definition peer_conn_event.h:32
uint8_t nonce_length
Definition cracen_psa_primitives.h:361
size_t plaintext_length
Definition cracen_psa_primitives.h:363
bool ad_finished
Definition cracen_psa_primitives.h:369
uint8_t unprocessed_input[(64u)]
Definition cracen_psa_primitives.h:365
uint8_t tag_size
Definition cracen_psa_primitives.h:367
size_t ad_length
Definition cracen_psa_primitives.h:362
uint8_t key_buffer[(32u)]
Definition cracen_psa_primitives.h:359
enum cipher_operation dir
Definition cracen_psa_primitives.h:364
psa_algorithm_t alg
Definition cracen_psa_primitives.h:357
uint8_t nonce[PSA_AEAD_NONCE_MAX_SIZE]
Definition cracen_psa_primitives.h:360
struct sxaead ctx
Definition cracen_psa_primitives.h:370
uint8_t unprocessed_input_bytes
Definition cracen_psa_primitives.h:366
struct sxkeyref keyref
Definition cracen_psa_primitives.h:358
enum cracen_context_state context_state
Definition cracen_psa_primitives.h:368
Definition cracen_psa_primitives.h:356
uint8_t blk_size
Definition cracen_psa_primitives.h:303
struct sxkeyref keyref
Definition cracen_psa_primitives.h:299
uint8_t unprocessed_input[(16U)]
Definition cracen_psa_primitives.h:301
enum cipher_operation dir
Definition cracen_psa_primitives.h:304
psa_algorithm_t alg
Definition cracen_psa_primitives.h:295
uint8_t unprocessed_input_bytes
Definition cracen_psa_primitives.h:302
uint8_t iv[(16U)]
Definition cracen_psa_primitives.h:298
bool initialized
Definition cracen_psa_primitives.h:297
struct sxblkcipher cipher
Definition cracen_psa_primitives.h:296
uint8_t key_buffer[(32u)]
Definition cracen_psa_primitives.h:300
Definition cracen_psa_primitives.h:294
size_t processed_len
Definition cracen_psa_primitives.h:394
size_t partial_len
Definition cracen_psa_primitives.h:393
uint8_t mac_state[(16U)]
Definition cracen_psa_primitives.h:391
uint8_t partial_block[(16U)]
Definition cracen_psa_primitives.h:392
Definition cracen_psa_primitives.h:390
const uint8_t * s
Definition cracen_psa_primitives.h:674
size_t sz
Definition cracen_psa_primitives.h:672
const uint8_t * r
Definition cracen_psa_primitives.h:673
Definition cracen_psa_primitives.h:671
size_t bsz
Definition cracen_psa_primitives.h:719
const uint8_t * a
Definition cracen_psa_primitives.h:716
const uint8_t * b
Definition cracen_psa_primitives.h:718
size_t asz
Definition cracen_psa_primitives.h:717
Definition cracen_psa_primitives.h:715
uint8_t * addr
Definition cracen_psa_primitives.h:710
size_t sz
Definition cracen_psa_primitives.h:711
Definition cracen_psa_primitives.h:709
struct cracen_ecc_pub_key pub_key
Definition cracen_psa_primitives.h:693
struct cracen_ecc_priv_key priv_key
Definition cracen_psa_primitives.h:692
Definition cracen_psa_primitives.h:691
const struct sx_pk_ecurve * curve
Definition cracen_psa_primitives.h:679
const uint8_t * d
Definition cracen_psa_primitives.h:680
Definition cracen_psa_primitives.h:678
const struct sx_pk_ecurve * curve
Definition cracen_psa_primitives.h:685
uint8_t * qx
Definition cracen_psa_primitives.h:686
uint8_t * qy
Definition cracen_psa_primitives.h:687
Definition cracen_psa_primitives.h:684
struct sxhash sx_ctx
Definition cracen_psa_primitives.h:266
const struct sxhashalg * sx_hash_algo
Definition cracen_psa_primitives.h:263
uint8_t input_buffer[SX_HASH_MAX_ENABLED_BLOCK_SIZE]
Definition cracen_psa_primitives.h:274
bool has_saved_state
Definition cracen_psa_primitives.h:277
size_t bytes_left_for_next_block
Definition cracen_psa_primitives.h:271
Definition cracen_psa_primitives.h:262
uint8_t x[3][32]
Definition cracen_psa_primitives.h:526
uint8_t P[3][64]
Definition cracen_psa_primitives.h:528
psa_algorithm_t alg
Definition cracen_psa_primitives.h:518
size_t user_id_length
Definition cracen_psa_primitives.h:522
const struct sx_pk_ecurve * curve
Definition cracen_psa_primitives.h:531
uint8_t X[3][64]
Definition cracen_psa_primitives.h:527
uint8_t wr_idx
Definition cracen_psa_primitives.h:525
uint8_t rd_idx
Definition cracen_psa_primitives.h:524
uint8_t user_id[16]
Definition cracen_psa_primitives.h:520
uint8_t secret[32]
Definition cracen_psa_primitives.h:519
uint8_t r[32]
Definition cracen_psa_primitives.h:530
uint8_t V[64]
Definition cracen_psa_primitives.h:529
size_t peer_id_length
Definition cracen_psa_primitives.h:523
Definition cracen_psa_primitives.h:517
cracen_hash_operation_t hash_op
Definition cracen_psa_primitives.h:446
psa_algorithm_t alg
Definition cracen_psa_primitives.h:439
uint8_t output_block_available_bytes
Definition cracen_psa_primitives.h:443
cracen_mac_operation_t mac_op
Definition cracen_psa_primitives.h:445
enum cracen_kd_state state
Definition cracen_psa_primitives.h:440
uint8_t output_block[SX_MAX(SX_HASH_MAX_ENABLED_BLOCK_SIZE, SX_BLKCIPHER_PRIV_SZ)]
Definition cracen_psa_primitives.h:442
uint64_t capacity
Definition cracen_psa_primitives.h:441
Definition cracen_psa_primitives.h:438
uint8_t input_buffer[SX_MAX(SX_HASH_MAX_ENABLED_BLOCK_SIZE, SX_BLKCIPHER_PRIV_SZ)]
Definition cracen_psa_primitives.h:409
size_t mac_size
Definition cracen_psa_primitives.h:401
size_t bytes_left_for_next_block
Definition cracen_psa_primitives.h:406
bool has_saved_state
Definition cracen_psa_primitives.h:412
psa_algorithm_t alg
Definition cracen_psa_primitives.h:400
Definition cracen_psa_primitives.h:399
psa_algorithm_t alg
Definition cracen_psa_primitives.h:634
Definition cracen_psa_primitives.h:633
uint32_t initialized
Definition cracen_psa_primitives.h:540
uint8_t V[(16U)]
Definition cracen_psa_primitives.h:538
uint64_t reseed_counter
Definition cracen_psa_primitives.h:539
uint8_t key[(32u)]
Definition cracen_psa_primitives.h:537
Definition cracen_psa_primitives.h:536
unsigned int slotmask
Definition cracen_psa_primitives.h:699
const struct sx_pk_cmd_def * cmd
Definition cracen_psa_primitives.h:698
const struct sx_buf * elements[5]
Definition cracen_psa_primitives.h:701
unsigned int dataidx
Definition cracen_psa_primitives.h:700
Definition cracen_psa_primitives.h:697
uint8_t * q
Definition cracen_psa_primitives.h:727
size_t pubexpsz
Definition cracen_psa_primitives.h:725
uint8_t * p
Definition cracen_psa_primitives.h:726
const uint8_t * pubexp
Definition cracen_psa_primitives.h:724
size_t candidatesz
Definition cracen_psa_primitives.h:728
size_t mrrounds
Definition cracen_psa_primitives.h:729
Definition cracen_psa_primitives.h:723
size_t attempts
Definition cracen_psa_primitives.h:741
uint8_t * p
Definition cracen_psa_primitives.h:736
uint8_t * qptr
Definition cracen_psa_primitives.h:739
size_t pubexpsz
Definition cracen_psa_primitives.h:735
const uint8_t * pubexp
Definition cracen_psa_primitives.h:734
size_t candidatesz
Definition cracen_psa_primitives.h:740
uint8_t * q
Definition cracen_psa_primitives.h:737
uint8_t * rndout
Definition cracen_psa_primitives.h:738
Definition cracen_psa_primitives.h:733
uint8_t * s
Definition cracen_psa_primitives.h:662
size_t sz
Definition cracen_psa_primitives.h:660
uint8_t * r
Definition cracen_psa_primitives.h:661
Definition cracen_psa_primitives.h:659
uint8_t prover_len
Definition cracen_psa_primitives.h:593
uint8_t verifier_len
Definition cracen_psa_primitives.h:594
uint8_t YX[64+1]
Definition cracen_psa_primitives.h:586
const uint8_t * NM
Definition cracen_psa_primitives.h:596
uint8_t xy[32]
Definition cracen_psa_primitives.h:582
psa_algorithm_t alg
Definition cracen_psa_primitives.h:578
uint8_t verifier[32]
Definition cracen_psa_primitives.h:592
const uint8_t * MN
Definition cracen_psa_primitives.h:595
const struct sx_pk_ecurve * curve
Definition cracen_psa_primitives.h:598
uint8_t KconfPV[PSA_HASH_LENGTH(PSA_ALG_SHA_256)]
Definition cracen_psa_primitives.h:589
cracen_hash_operation_t hash_op
Definition cracen_psa_primitives.h:579
uint8_t XY[64+1]
Definition cracen_psa_primitives.h:584
uint8_t w0[32]
Definition cracen_psa_primitives.h:580
uint8_t KconfVP[PSA_HASH_LENGTH(PSA_ALG_SHA_256)]
Definition cracen_psa_primitives.h:590
uint8_t prover[32]
Definition cracen_psa_primitives.h:591
uint8_t shared[PSA_HASH_LENGTH(PSA_ALG_SHA_256)]
Definition cracen_psa_primitives.h:587
uint8_t shared_len
Definition cracen_psa_primitives.h:588
psa_pake_role_t role
Definition cracen_psa_primitives.h:597
uint8_t w1_or_L[64]
Definition cracen_psa_primitives.h:581
Definition cracen_psa_primitives.h:577
uint8_t B[PSA_BITS_TO_BYTES(3072)]
Definition cracen_psa_primitives.h:569
uint8_t K[PSA_HASH_LENGTH(PSA_ALG_SHA_512)]
Definition cracen_psa_primitives.h:572
uint8_t x[PSA_HASH_LENGTH(PSA_ALG_SHA_512)]
Definition cracen_psa_primitives.h:564
psa_pake_role_t role
Definition cracen_psa_primitives.h:558
uint8_t user_hash[PSA_HASH_LENGTH(PSA_ALG_SHA_512)]
Definition cracen_psa_primitives.h:559
uint8_t v[PSA_BITS_TO_BYTES(3072)]
Definition cracen_psa_primitives.h:565
uint8_t ab[32]
Definition cracen_psa_primitives.h:567
uint8_t A[PSA_BITS_TO_BYTES(3072)]
Definition cracen_psa_primitives.h:568
uint8_t M[PSA_HASH_LENGTH(PSA_ALG_SHA_512)]
Definition cracen_psa_primitives.h:571
uint8_t salt[64]
Definition cracen_psa_primitives.h:560
size_t salt_len
Definition cracen_psa_primitives.h:561
Definition cracen_psa_primitives.h:557
uint8_t keystream[(16U)]
Definition cracen_psa_primitives.h:312
uint8_t cbc_mac[(16U)]
Definition cracen_psa_primitives.h:310
uint8_t ctr_block[(16U)]
Definition cracen_psa_primitives.h:311
bool cbc_mac_initialized
Definition cracen_psa_primitives.h:317
bool has_partial_ad_block
Definition cracen_psa_primitives.h:319
size_t total_ad_fed
Definition cracen_psa_primitives.h:315
size_t keystream_offset
Definition cracen_psa_primitives.h:314
size_t data_partial_len
Definition cracen_psa_primitives.h:316
bool ctr_initialized
Definition cracen_psa_primitives.h:318
uint8_t partial_block[(16U)]
Definition cracen_psa_primitives.h:313
Definition cracen_psa_primitives.h:309
bool ghash_initialized
Definition cracen_psa_primitives.h:334
size_t keystream_offset
Definition cracen_psa_primitives.h:330
uint8_t ctr_block[(16U)]
Definition cracen_psa_primitives.h:328
uint64_t h_table[16][(16U)/sizeof(uint64_t)]
Definition cracen_psa_primitives.h:326
size_t total_data_enc
Definition cracen_psa_primitives.h:332
bool ctr_initialized
Definition cracen_psa_primitives.h:333
size_t total_ad_fed
Definition cracen_psa_primitives.h:331
uint8_t keystream[(16U)]
Definition cracen_psa_primitives.h:329
uint8_t ghash_block[(16U)]
Definition cracen_psa_primitives.h:327
Definition cracen_psa_primitives.h:324
uint8_t commit[(32+64)]
Definition cracen_psa_primitives.h:620
uint8_t use_h2e
Definition cracen_psa_primitives.h:624
cracen_mac_operation_t mac_op
Definition cracen_psa_primitives.h:604
uint8_t max_id_min_id[2 *(6u)]
Definition cracen_psa_primitives.h:614
uint8_t password[(256u)]
Definition cracen_psa_primitives.h:606
uint8_t min_id[(6u)]
Definition cracen_psa_primitives.h:612
uint8_t kck[32]
Definition cracen_psa_primitives.h:617
uint8_t peer_commit[(32+64)]
Definition cracen_psa_primitives.h:621
uint8_t pmkid[(16u)]
Definition cracen_psa_primitives.h:619
uint8_t salt_set
Definition cracen_psa_primitives.h:626
psa_algorithm_t hash_alg
Definition cracen_psa_primitives.h:605
uint8_t max_id[(6u)]
Definition cracen_psa_primitives.h:611
uint8_t hash_length
Definition cracen_psa_primitives.h:622
uint8_t pwe[64]
Definition cracen_psa_primitives.h:608
uint16_t send_confirm
Definition cracen_psa_primitives.h:627
const struct sx_pk_ecurve * curve
Definition cracen_psa_primitives.h:628
uint8_t pmk_length
Definition cracen_psa_primitives.h:623
uint16_t pw_length
Definition cracen_psa_primitives.h:607
uint8_t keys_set
Definition cracen_psa_primitives.h:625
uint8_t rand[32]
Definition cracen_psa_primitives.h:616
uint8_t pmk[(32u)]
Definition cracen_psa_primitives.h:618
Definition cracen_psa_primitives.h:603
size_t pool_avail
Definition cracen_psa_primitives.h:289
size_t pool_offset
Definition cracen_psa_primitives.h:288
cracen_hash_operation_t hash_op
Definition cracen_psa_primitives.h:283
size_t prev_squeezed
Definition cracen_psa_primitives.h:286
uint8_t pool[SX_XOF_POOL_BUF_SZ]
Definition cracen_psa_primitives.h:287
Definition cracen_psa_primitives.h:282