SharkSSL C/C++ Reference
TLS, cryptography, certificates, and PSA integration
crypto.h
Go to the documentation of this file.
1
44#ifndef SHARKSSL_PSA_CRYPTO_H
45#define SHARKSSL_PSA_CRYPTO_H
46
47#include <stddef.h>
48#include <stdint.h>
49#include <limits.h>
50#include "TargConfig.h"
51#include "SharkSSL_cfg.h"
52
53#ifdef __cplusplus
54extern "C" {
55#endif
56
57typedef int32_t psa_status_t;
58typedef uint32_t psa_algorithm_t;
59typedef uint16_t psa_key_type_t;
60typedef uint32_t psa_key_id_t;
61typedef uint32_t psa_key_lifetime_t;
62typedef uint8_t psa_key_persistence_t;
63typedef uint32_t psa_key_location_t;
64typedef uint32_t psa_key_usage_t;
66
67#define PSA_CRYPTO_API_VERSION_MAJOR 1
68#if (defined(SHARKSSL_PSA_PROFILE_1_4_1) && (SHARKSSL_PSA_PROFILE_1_4_1))
69#define PSA_CRYPTO_API_VERSION_MINOR 4
70#else
71#define PSA_CRYPTO_API_VERSION_MINOR 5
72#endif
73
74#define PSA_BITS_TO_BYTES(bits) (((bits) + CHAR_BIT - 1) / CHAR_BIT)
75
76/* SharkSSL-specific capability flags for this staged PSA subset. */
77#define SHARKSSL_PSA_HAS_SHA_256 1
78#define SHARKSSL_PSA_HAS_SHA_384 SHARKSSL_USE_SHA_384
79#define SHARKSSL_PSA_HAS_SHA_512 SHARKSSL_USE_SHA_512
80#define SHARKSSL_PSA_HAS_CHACHA20_POLY1305 (SHARKSSL_USE_CHACHA20 && SHARKSSL_USE_POLY1305)
81#define SHARKSSL_PSA_HAS_VOLATILE_KEYS 1
82#define SHARKSSL_PSA_HAS_PERSISTENT_KEYS 1
83#define SHARKSSL_PSA_HAS_KEY_USAGE_QUERY 1
84#define SHARKSSL_PSA_HAS_RANDOM 1
85#define SHARKSSL_PSA_HAS_HMAC_OPERATIONS 1
86#define SHARKSSL_PSA_HAS_HMAC_SHA_384 SHARKSSL_USE_SHA_384
87#define SHARKSSL_PSA_HAS_HMAC_SHA_512 SHARKSSL_USE_SHA_512
88#define SHARKSSL_PSA_HAS_AEAD_OPERATIONS 1
89#define SHARKSSL_PSA_HAS_AEAD_MULTIPART 1
90#define SHARKSSL_PSA_HAS_AES_CCM (SHARKSSL_ENABLE_AES_GCM && (SHARKSSL_USE_AES_128 || SHARKSSL_USE_AES_256))
91#if (SHARKSSL_USE_AES_128 || SHARKSSL_USE_AES_256)
92#if (SHARKSSL_DISABLE_AES_ECB_DECRYPT)
93#define SHARKSSL_PSA_HAS_CIPHER_OPERATIONS 0
94#else
95#define SHARKSSL_PSA_HAS_CIPHER_OPERATIONS 1
96#endif
97#else
98#define SHARKSSL_PSA_HAS_CIPHER_OPERATIONS 0
99#endif
100#define SHARKSSL_PSA_HAS_AES_KW SHARKSSL_PSA_HAS_CIPHER_OPERATIONS
101#define SHARKSSL_PSA_HAS_HKDF 1
102#define SHARKSSL_PSA_HAS_HKDF_SHA_384 SHARKSSL_USE_SHA_384
103#define SHARKSSL_PSA_HAS_HKDF_SHA_512 SHARKSSL_USE_SHA_512
104#if (SHARKSSL_USE_ECC && SHARKSSL_ECC_USE_CURVE25519 && SHARKSSL_ENABLE_X25519_API)
105#define SHARKSSL_PSA_HAS_X25519 1
106#else
107#define SHARKSSL_PSA_HAS_X25519 0
108#endif
109#if (SHARKSSL_USE_ECC && SHARKSSL_ECC_USE_SECP256R1 && SHARKSSL_ENABLE_ECDSA && \
110 (SHARKSSL_ECC_VERIFY_POINT || SHARKSSL_TLS_1_3))
111#define SHARKSSL_PSA_HAS_ECDSA_P256 1
112#else
113#define SHARKSSL_PSA_HAS_ECDSA_P256 0
114#endif
115#if (SHARKSSL_USE_ECC && SHARKSSL_ECC_USE_SECP384R1 && SHARKSSL_ENABLE_ECDSA && \
116 (SHARKSSL_ECC_VERIFY_POINT || SHARKSSL_TLS_1_3))
117#define SHARKSSL_PSA_HAS_ECDSA_P384 1
118#else
119#define SHARKSSL_PSA_HAS_ECDSA_P384 0
120#endif
121#define SHARKSSL_PSA_HAS_ECDSA_VERIFY (SHARKSSL_PSA_HAS_ECDSA_P256 || SHARKSSL_PSA_HAS_ECDSA_P384)
122#define SHARKSSL_PSA_ECDSA_CURVE_SUPPORTED(bits) \
123 ((((bits) == 256) && SHARKSSL_PSA_HAS_ECDSA_P256) || \
124 (((bits) == 384) && SHARKSSL_PSA_HAS_ECDSA_P384))
125#if (SHARKSSL_PSA_HAS_ECDSA_VERIFY && SHARKSSL_ENABLE_ECDSA_API && \
126 (!SHARKSSL_ECDSA_ONLY_VERIFY))
127#define SHARKSSL_PSA_HAS_ECDSA_SIGN 1
128#else
129#define SHARKSSL_PSA_HAS_ECDSA_SIGN 0
130#endif
131#define SHARKSSL_PSA_HAS_RSA_PKCS1V15_VERIFY SHARKSSL_ENABLE_RSA
132#define SHARKSSL_PSA_HAS_RSA_KEY_PAIR SHARKSSL_ENABLE_RSA
133#define SHARKSSL_PSA_HAS_RSA_KEY_GENERATION (SHARKSSL_ENABLE_RSA && SHARKSSL_ENABLE_RSA_API && SHARKSSL_ENABLE_RSAKEY_CREATE)
134#define SHARKSSL_PSA_HAS_RSA_PKCS1V15_SIGN (SHARKSSL_ENABLE_RSA && SHARKSSL_ENABLE_RSA_API)
135#define SHARKSSL_PSA_HAS_RSA_PKCS1V15_ENCRYPT SHARKSSL_ENABLE_RSA
136#define SHARKSSL_PSA_HAS_RSA_PKCS1V15_DECRYPT (SHARKSSL_ENABLE_RSA && SHARKSSL_ENABLE_RSA_API)
137#define SHARKSSL_PSA_HAS_RSA_ASYMMETRIC_ENCRYPT SHARKSSL_ENABLE_RSA
138#define SHARKSSL_PSA_HAS_RSA_ASYMMETRIC_DECRYPT (SHARKSSL_ENABLE_RSA && SHARKSSL_ENABLE_RSA_API)
139#define SHARKSSL_PSA_HAS_RSA_OAEP_ENCRYPT SHARKSSL_ENABLE_RSA
140#define SHARKSSL_PSA_HAS_RSA_OAEP_DECRYPT (SHARKSSL_ENABLE_RSA && SHARKSSL_ENABLE_RSA_API)
141#define SHARKSSL_PSA_HAS_RSA_PSS_VERIFY SHARKSSL_ENABLE_RSA
142#define SHARKSSL_PSA_HAS_RSA_PSS_SIGN (SHARKSSL_ENABLE_RSA && SHARKSSL_ENABLE_RSA_API)
143#define SHARKSSL_PSA_RSA_PRIVATE_MAX_SIZE ((size_t)1792)
144#define SHARKSSL_PSA_RSA_MAX_BITS 3072
145#define SHARKSSL_PSA_RSA_PUBLIC_MAX_BITS 4096
146#define SHARKSSL_PSA_RSA_PUBLIC_MAX_SIZE ((size_t)(SHARKSSL_PSA_RSA_PUBLIC_MAX_BITS / 8 + 16))
147#define SHARKSSL_PSA_HAS_ECDH_P256 (SHARKSSL_PSA_HAS_ECDSA_P256 && SHARKSSL_PSA_HAS_ECDSA_SIGN)
148#define SHARKSSL_PSA_HAS_ECIES_P256 SHARKSSL_PSA_HAS_ECDH_P256
149#if (SHARKSSL_USE_ECC && SHARKSSL_ECC_USE_SECP384R1 && SHARKSSL_ENABLE_ECDSA_API && \
150 (!SHARKSSL_ECDSA_ONLY_VERIFY) && (SHARKSSL_ECC_VERIFY_POINT || SHARKSSL_TLS_1_3))
151#define SHARKSSL_PSA_HAS_ECDH_P384 1
152#else
153#define SHARKSSL_PSA_HAS_ECDH_P384 0
154#endif
155#define SHARKSSL_PSA_HAS_SECP_R1_KEYS (SHARKSSL_PSA_HAS_ECDSA_VERIFY || SHARKSSL_PSA_HAS_ECDH_P384)
156#define SHARKSSL_PSA_HAS_SECP_R1_PRIVATE (SHARKSSL_PSA_HAS_ECDSA_SIGN || SHARKSSL_PSA_HAS_ECDH_P384)
157#define SHARKSSL_PSA_SECP_R1_KEY_SUPPORTED(bits) \
158 ((((bits) == 256) && SHARKSSL_PSA_HAS_ECDSA_P256) || \
159 (((bits) == 384) && (SHARKSSL_PSA_HAS_ECDSA_P384 || SHARKSSL_PSA_HAS_ECDH_P384)))
160
161#define PSA_SUCCESS ((psa_status_t)0)
162#define PSA_ERROR_GENERIC_ERROR ((psa_status_t)-132)
163#define PSA_ERROR_NOT_PERMITTED ((psa_status_t)-133)
164#define PSA_ERROR_NOT_SUPPORTED ((psa_status_t)-134)
165#define PSA_ERROR_INVALID_ARGUMENT ((psa_status_t)-135)
166#define PSA_ERROR_INVALID_HANDLE ((psa_status_t)-136)
167#define PSA_ERROR_BAD_STATE ((psa_status_t)-137)
168#define PSA_ERROR_BUFFER_TOO_SMALL ((psa_status_t)-138)
169#define PSA_ERROR_ALREADY_EXISTS ((psa_status_t)-139)
170#define PSA_ERROR_DOES_NOT_EXIST ((psa_status_t)-140)
171#define PSA_ERROR_INSUFFICIENT_MEMORY ((psa_status_t)-141)
172#define PSA_ERROR_INSUFFICIENT_STORAGE ((psa_status_t)-142)
173#define PSA_ERROR_INSUFFICIENT_DATA ((psa_status_t)-143)
174#define PSA_ERROR_COMMUNICATION_FAILURE ((psa_status_t)-145)
175#define PSA_ERROR_STORAGE_FAILURE ((psa_status_t)-146)
176#define PSA_ERROR_HARDWARE_FAILURE ((psa_status_t)-147)
177#define PSA_ERROR_INSUFFICIENT_ENTROPY ((psa_status_t)-148)
178#define PSA_ERROR_INVALID_SIGNATURE ((psa_status_t)-149)
179#define PSA_ERROR_INVALID_PADDING ((psa_status_t)-150)
180#define PSA_ERROR_CORRUPTION_DETECTED ((psa_status_t)-151)
181#define PSA_ERROR_DATA_CORRUPT ((psa_status_t)-152)
182#define PSA_ERROR_DATA_INVALID ((psa_status_t)-153)
183
184#define PSA_ALG_NONE ((psa_algorithm_t)0x00000000)
185/* Standard identifiers are available even when the provider omits an algorithm. */
186#define PSA_ALG_ANY_HASH ((psa_algorithm_t)0x020000ff)
187#define PSA_ALG_SHA_1 ((psa_algorithm_t)0x02000005)
188#define PSA_ALG_SHA_224 ((psa_algorithm_t)0x02000008)
189#define PSA_ALG_SHA_256 ((psa_algorithm_t)0x02000009)
190#define PSA_ALG_SHA_384 ((psa_algorithm_t)0x0200000a)
191#define PSA_ALG_SHA_512 ((psa_algorithm_t)0x0200000b)
195#define SHARKSSL_PSA_HASH_SUPPORTED(alg) \
196 ((PSA_ALG_SHA_256 == (alg)) || \
197 (SHARKSSL_PSA_HAS_SHA_384 && (PSA_ALG_SHA_384 == (alg))) || \
198 (SHARKSSL_PSA_HAS_SHA_512 && (PSA_ALG_SHA_512 == (alg))))
199#define PSA_ALG_HMAC(hash_alg) ((psa_algorithm_t)(0x03800000 | ((psa_algorithm_t)(hash_alg) & 0xff)))
200#define PSA_ALG_HKDF(hash_alg) ((psa_algorithm_t)(0x08000100 | ((psa_algorithm_t)(hash_alg) & 0xff)))
201#define PSA_ALG_HKDF_EXTRACT(hash_alg) ((psa_algorithm_t)(0x08000400 | ((psa_algorithm_t)(hash_alg) & 0xff)))
202#define PSA_ALG_HKDF_EXPAND(hash_alg) ((psa_algorithm_t)(0x08000500 | ((psa_algorithm_t)(hash_alg) & 0xff)))
203#define PSA_ALG_SP800_108_COUNTER_HMAC(hash_alg) ((psa_algorithm_t)(0x08000700 | ((psa_algorithm_t)(hash_alg) & 0xff)))
204#define PSA_ALG_TLS12_PRF(hash_alg) ((psa_algorithm_t)(0x08000200 | ((psa_algorithm_t)(hash_alg) & 0xff)))
205#define PSA_ALG_TLS12_PSK_TO_MS(hash_alg) ((psa_algorithm_t)(0x08000300 | ((psa_algorithm_t)(hash_alg) & 0xff)))
206#define PSA_ALG_PBKDF2_HMAC(hash_alg) ((psa_algorithm_t)(0x08800100 | ((psa_algorithm_t)(hash_alg) & 0xff)))
207/* SharkSSL policy extension: PASSWORD/PEPPER roots may authorize SHA-256 and SHA-512. */
208#define SHARKSSL_PSA_ALG_PBKDF2_HMAC_ANY_HASH PSA_ALG_PBKDF2_HMAC(PSA_ALG_ANY_HASH)
209#define PSA_ALG_IS_KEY_DERIVATION(alg) \
210 (0x08000000 == (((psa_algorithm_t)(alg)) & 0x7f000000))
211#define PSA_ALG_IS_HKDF(alg) \
212 (0x08000100 == (((psa_algorithm_t)(alg)) & 0xffffff00))
213#define PSA_ALG_IS_HKDF_EXTRACT(alg) \
214 (0x08000400 == (((psa_algorithm_t)(alg)) & 0xffffff00))
215#define PSA_ALG_IS_HKDF_EXPAND(alg) \
216 (0x08000500 == (((psa_algorithm_t)(alg)) & 0xffffff00))
217#define PSA_ALG_IS_ANY_HKDF(alg) \
218 (PSA_ALG_IS_HKDF(alg) || PSA_ALG_IS_HKDF_EXTRACT(alg) || \
219 PSA_ALG_IS_HKDF_EXPAND(alg))
220#define PSA_ALG_IS_PBKDF2_HMAC(alg) \
221 (0x08800100 == (((psa_algorithm_t)(alg)) & 0xffffff00))
222#define PSA_ALG_IS_SP800_108_COUNTER_HMAC(alg) \
223 (0x08000700 == (((psa_algorithm_t)(alg)) & 0xffffff00))
224#define PSA_ALG_IS_TLS12_PRF(alg) \
225 (0x08000200 == (((psa_algorithm_t)(alg)) & 0xffffff00))
226#define PSA_ALG_IS_TLS12_PSK_TO_MS(alg) \
227 (0x08000300 == (((psa_algorithm_t)(alg)) & 0xffffff00))
228#define PSA_ALG_CHACHA20_POLY1305 ((psa_algorithm_t)0x05100500)
229#define PSA_ALG_GCM ((psa_algorithm_t)0x05500200)
230#define PSA_ALG_CCM ((psa_algorithm_t)0x05500100)
231#define PSA_ALG_CTR ((psa_algorithm_t)0x04c01000)
232#define PSA_ALG_ECB_NO_PADDING ((psa_algorithm_t)0x04404400)
233#define PSA_ALG_CBC_NO_PADDING ((psa_algorithm_t)0x04404000)
234#define PSA_ALG_KW ((psa_algorithm_t)0x0b400100)
235#define PSA_ALG_KWP ((psa_algorithm_t)0x0bc00200)
236#define PSA_ALG_IS_KEY_WRAP(alg) \
237 (((alg) == PSA_ALG_KW) || ((alg) == PSA_ALG_KWP))
238#define PSA_ALG_IS_CIPHER(alg) \
239 (0x04000000 == (((psa_algorithm_t)(alg)) & 0x7f000000))
240#define PSA_ALG_ECDH ((psa_algorithm_t)0x09020000)
241#define PSA_ALG_ECIES_SEC1 ((psa_algorithm_t)0x0c000100)
242#define PSA_ALG_IS_KEY_ENCAPSULATION(alg) \
243 (0x0c000000 == (((psa_algorithm_t)(alg)) & 0x7f000000))
244#define PSA_ALG_KEY_AGREEMENT(ka_alg, kdf_alg) \
245 ((psa_algorithm_t)((ka_alg) | (kdf_alg)))
246#define PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) \
247 ((psa_algorithm_t)(((psa_algorithm_t)(alg) & 0xffff0000) | 0x09000000))
248#define PSA_ALG_KEY_AGREEMENT_GET_KDF(alg) \
249 ((psa_algorithm_t)(((psa_algorithm_t)(alg) & 0xfe00ffff) | 0x08000000))
250#define PSA_ALG_ECDSA(hash_alg) ((psa_algorithm_t)(0x06000600 | ((psa_algorithm_t)(hash_alg) & 0xff)))
251#define PSA_ALG_ECDSA_ANY ((psa_algorithm_t)0x06000600)
252#define PSA_ALG_DETERMINISTIC_ECDSA(hash_alg) ((psa_algorithm_t)(0x06000700 | ((psa_algorithm_t)(hash_alg) & 0xff)))
253#define PSA_ALG_IS_ECDSA(alg) \
254 (0x06000600 == (((psa_algorithm_t)(alg)) & 0x7ffffe00))
255#define PSA_ALG_IS_RANDOMIZED_ECDSA(alg) \
256 (0x06000600 == (((psa_algorithm_t)(alg)) & 0x7fffff00))
257#define PSA_ALG_IS_DETERMINISTIC_ECDSA(alg) \
258 (0x06000700 == (((psa_algorithm_t)(alg)) & 0x7fffff00))
262#define SHARKSSL_PSA_ECDSA_SUPPORTED(alg) \
263 ((PSA_ALG_ECDSA_ANY == (psa_algorithm_t)(alg)) || \
264 (((PSA_ALG_ECDSA(PSA_ALG_GET_HASH(alg)) == (alg)) || \
265 (PSA_ALG_DETERMINISTIC_ECDSA(PSA_ALG_GET_HASH(alg)) == (alg))) && \
266 SHARKSSL_PSA_HASH_SUPPORTED(PSA_ALG_GET_HASH(alg))))
267#define PSA_ALG_RSA_PKCS1V15_SIGN(hash_alg) \
268 ((psa_algorithm_t)(0x06000200 | ((psa_algorithm_t)(hash_alg) & 0xff)))
269#define PSA_ALG_RSA_PKCS1V15_SIGN_RAW ((psa_algorithm_t)0x06000200)
270#define PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg) \
271 (0x06000200 == (((psa_algorithm_t)(alg)) & 0x7fffff00))
275#define SHARKSSL_PSA_RSA_PKCS1V15_SUPPORTED(alg) \
276 ((PSA_ALG_RSA_PKCS1V15_SIGN_RAW == (psa_algorithm_t)(alg)) || \
277 ((PSA_ALG_RSA_PKCS1V15_SIGN(PSA_ALG_GET_HASH(alg)) == (alg)) && \
278 SHARKSSL_PSA_HASH_SUPPORTED(PSA_ALG_GET_HASH(alg))))
279#define PSA_ALG_RSA_PSS(hash_alg) \
280 ((psa_algorithm_t)(0x06000300 | ((psa_algorithm_t)(hash_alg) & 0xff)))
281#define PSA_ALG_RSA_PSS_ANY_SALT(hash_alg) \
282 ((psa_algorithm_t)(0x06001300 | ((psa_algorithm_t)(hash_alg) & 0xff)))
283#define PSA_ALG_IS_RSA_PSS_STANDARD_SALT(alg) \
284 (0x06000300 == (((psa_algorithm_t)(alg)) & 0xffffff00))
285#define PSA_ALG_IS_RSA_PSS_ANY_SALT(alg) \
286 (0x06001300 == (((psa_algorithm_t)(alg)) & 0xffffff00))
287#define PSA_ALG_IS_RSA_PSS(alg) \
288 (PSA_ALG_IS_RSA_PSS_STANDARD_SALT(alg) || PSA_ALG_IS_RSA_PSS_ANY_SALT(alg))
289#define SHARKSSL_PSA_RSA_PSS_SUPPORTED(alg) \
290 (((PSA_ALG_RSA_PSS(PSA_ALG_GET_HASH(alg)) == (alg)) || \
291 (PSA_ALG_RSA_PSS_ANY_SALT(PSA_ALG_GET_HASH(alg)) == (alg))) && \
292 SHARKSSL_PSA_HASH_SUPPORTED(PSA_ALG_GET_HASH(alg)))
293#define PSA_ALG_RSA_PKCS1V15_CRYPT ((psa_algorithm_t)0x07000200)
294#define PSA_ALG_RSA_OAEP(hash_alg) \
295 ((psa_algorithm_t)(0x07000300 | ((hash_alg) & 0xff)))
296#define PSA_ALG_IS_RSA_OAEP(alg) \
297 (0x07000300 == (((psa_algorithm_t)(alg)) & 0xffffff00))
298#define PSA_ALG_IS_ASYMMETRIC_ENCRYPTION(alg) \
299 (0x07000000 == (((psa_algorithm_t)(alg)) & 0x7f000000))
300#define SHARKSSL_PSA_RSA_OAEP_SUPPORTED(alg) \
301 (PSA_ALG_IS_RSA_OAEP(alg) && SHARKSSL_PSA_HASH_SUPPORTED(PSA_ALG_GET_HASH(alg)))
305#define SHARKSSL_PSA_RSA_ASYMMETRIC_SUPPORTED(alg) \
306 ((PSA_ALG_RSA_PKCS1V15_CRYPT == (psa_algorithm_t)(alg)) || SHARKSSL_PSA_RSA_OAEP_SUPPORTED(alg))
307#define PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE(key_type, key_bits, alg) \
308 ((SHARKSSL_PSA_HAS_RSA_ASYMMETRIC_ENCRYPT && PSA_KEY_TYPE_IS_RSA(key_type) && \
309 (((key_bits) == 2048) || ((key_bits) == 3072)) && \
310 SHARKSSL_PSA_RSA_ASYMMETRIC_SUPPORTED(alg)) ? ((size_t)(key_bits) / 8) : 0)
311#define PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE(key_type, key_bits, alg) \
312 ((SHARKSSL_PSA_HAS_RSA_ASYMMETRIC_DECRYPT && (PSA_KEY_TYPE_RSA_KEY_PAIR == (key_type)) && \
313 PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE(key_type, key_bits, alg)) ? \
314 ((PSA_ALG_RSA_PKCS1V15_CRYPT == (alg)) ? ((size_t)(key_bits) / 8 - 11) : \
315 ((size_t)(key_bits) / 8 - 2 * PSA_HASH_LENGTH(PSA_ALG_GET_HASH(alg)) - 2)) : 0)
316#define PSA_ASYMMETRIC_ENCRYPT_OUTPUT_MAX_SIZE (SHARKSSL_PSA_HAS_RSA_ASYMMETRIC_ENCRYPT ? 384 : 0)
317#define PSA_ASYMMETRIC_DECRYPT_OUTPUT_MAX_SIZE (SHARKSSL_PSA_HAS_RSA_ASYMMETRIC_DECRYPT ? 373 : 0)
318#define PSA_ALG_IS_HASH_AND_SIGN(alg) \
319 ((PSA_ALG_IS_ECDSA(alg) || PSA_ALG_IS_RSA_PSS(alg) || PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg)) && ((alg) & 0xff))
320#define PSA_ALG_IS_SIGN_MESSAGE(alg) \
321 (PSA_ALG_IS_HASH_AND_SIGN(alg) && ((alg) & 0xff))
325#define PSA_ALG_SIGN_SUPPORTS_CONTEXT(alg) 0
326#define PSA_ALG_IS_SIGN_HASH(alg) \
327 (PSA_ALG_IS_ECDSA(alg) || PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg) || PSA_ALG_IS_RSA_PSS(alg))
328#define PSA_ALG_IS_KEY_AGREEMENT(alg) \
329 (0x09000000 == (((psa_algorithm_t)(alg)) & 0x7f000000))
330#define PSA_ALG_IS_ECDH(alg) \
331 (0x09020000 == (((psa_algorithm_t)(alg)) & 0x7fff0000))
332#define PSA_ALG_IS_STANDALONE_KEY_AGREEMENT(alg) \
333 (0x09000000 == (((psa_algorithm_t)(alg)) & 0x7f00ffff))
334#define PSA_ALG_IS_RAW_KEY_AGREEMENT(alg) PSA_ALG_IS_STANDALONE_KEY_AGREEMENT(alg)
335#define PSA_ALG_AEAD_WITH_SHORTENED_TAG(aead_alg, tag_length) \
336 (((psa_algorithm_t)(aead_alg) & ~((psa_algorithm_t)0x003f8000)) | \
337 (((psa_algorithm_t)(tag_length) & 0x3f) << 16))
338#define PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG(aead_alg, min_tag_length) \
339 (PSA_ALG_AEAD_WITH_SHORTENED_TAG((aead_alg), (min_tag_length)) | ((psa_algorithm_t)0x00008000))
340#define PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(aead_alg) \
341 ((((psa_algorithm_t)(aead_alg) & ~((psa_algorithm_t)0x003f8000)) == \
342 ((psa_algorithm_t)PSA_ALG_GCM & ~((psa_algorithm_t)0x003f8000))) ? \
343 PSA_ALG_GCM : \
344 ((((psa_algorithm_t)(aead_alg) & ~((psa_algorithm_t)0x003f8000)) == \
345 ((psa_algorithm_t)PSA_ALG_CCM & ~((psa_algorithm_t)0x003f8000))) ? \
346 PSA_ALG_CCM : \
347 ((((psa_algorithm_t)(aead_alg) & ~((psa_algorithm_t)0x003f8000)) == \
348 ((psa_algorithm_t)PSA_ALG_CHACHA20_POLY1305 & ~((psa_algorithm_t)0x003f8000))) ? \
349 PSA_ALG_CHACHA20_POLY1305 : PSA_ALG_NONE)))
350#define PSA_ALG_TRUNCATED_MAC(mac_alg, mac_length) \
351 (((psa_algorithm_t)(mac_alg) & ~((psa_algorithm_t)0x003f8000)) | \
352 (((psa_algorithm_t)(mac_length) & 0x3f) << 16))
353#define PSA_ALG_AT_LEAST_THIS_LENGTH_MAC(mac_alg, min_mac_length) \
354 (PSA_ALG_TRUNCATED_MAC((mac_alg), (min_mac_length)) | ((psa_algorithm_t)0x00008000))
355#define PSA_ALG_FULL_LENGTH_MAC(mac_alg) \
356 ((psa_algorithm_t)(mac_alg) & ~((psa_algorithm_t)0x003f8000))
357#define PSA_ALG_IS_HMAC(alg) \
358 (0x03800000 == (((psa_algorithm_t)(alg)) & 0x7fc07f00))
359#define PSA_ALG_IS_MAC(alg) \
360 (0x03000000 == (((psa_algorithm_t)(alg)) & 0x7f000000))
361#define PSA_ALG_IS_AEAD(alg) \
362 (0x05000000 == (((psa_algorithm_t)(alg)) & 0x7f000000))
363#define PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER(alg) \
364 (0x05400000 == (((psa_algorithm_t)(alg)) & 0x7f400000))
365#define PSA_ALG_IS_WILDCARD(alg) \
366 ((0x03008000 == (((psa_algorithm_t)(alg)) & 0x7f008000)) || \
367 (0x05008000 == (((psa_algorithm_t)(alg)) & 0x7f008000)) || \
368 (SHARKSSL_PSA_ALG_PBKDF2_HMAC_ANY_HASH == (psa_algorithm_t)(alg)) || \
369 (PSA_ALG_IS_HASH_AND_SIGN(alg) && (0xff == ((psa_algorithm_t)(alg) & 0xff))))
374#define PSA_ALG_GET_HASH(alg) \
375 (((PSA_ALG_IS_HMAC(alg) || PSA_ALG_IS_RSA_OAEP(alg) || PSA_ALG_IS_ANY_HKDF(alg) || \
376 PSA_ALG_IS_TLS12_PRF(alg) || \
377 PSA_ALG_IS_TLS12_PSK_TO_MS(alg) || \
378 PSA_ALG_IS_PBKDF2_HMAC(alg) || PSA_ALG_IS_SP800_108_COUNTER_HMAC(alg) || \
379 (PSA_ALG_IS_KEY_AGREEMENT(alg) && \
380 (!PSA_ALG_IS_STANDALONE_KEY_AGREEMENT(alg))) || \
381 PSA_ALG_IS_SIGN_HASH(alg)) && \
382 ((((psa_algorithm_t)(alg)) & 0xff) != 0)) ? \
383 ((psa_algorithm_t)(0x02000000 | (((psa_algorithm_t)(alg)) & 0xff))) : \
384 PSA_ALG_NONE)
385#define PSA_MAC_LENGTH(key_type, key_bits, alg) \
386 (((key_type) == PSA_KEY_TYPE_HMAC) && ((key_bits) >= 8) && \
387 ((key_bits) <= 512) && (((key_bits) & 7) == 0) && \
388 ((PSA_ALG_FULL_LENGTH_MAC(alg) == PSA_ALG_HMAC(PSA_ALG_SHA_256)) || \
389 (SHARKSSL_PSA_HAS_HMAC_SHA_384 && \
390 (PSA_ALG_FULL_LENGTH_MAC(alg) == PSA_ALG_HMAC(PSA_ALG_SHA_384))) || \
391 (SHARKSSL_PSA_HAS_HMAC_SHA_512 && \
392 (PSA_ALG_FULL_LENGTH_MAC(alg) == PSA_ALG_HMAC(PSA_ALG_SHA_512)))) && \
393 (((psa_algorithm_t)(alg) & 0x00008000) == 0) && \
394 ((((psa_algorithm_t)(alg) >> 16) & 0x3f) <= \
395 PSA_HASH_LENGTH(PSA_ALG_GET_HASH(alg))) && \
396 (((((psa_algorithm_t)(alg) >> 16) & 0x3f) == 0) || \
397 ((((psa_algorithm_t)(alg) >> 16) & 0x3f) >= 4)) ? \
398 ((((psa_algorithm_t)(alg) >> 16) & 0x3f) ? \
399 (size_t)(((psa_algorithm_t)(alg) >> 16) & 0x3f) : \
400 PSA_HASH_LENGTH(PSA_ALG_GET_HASH(alg))) : (size_t)0)
401#define PSA_MAC_MAX_SIZE ((size_t)(SHARKSSL_PSA_HAS_HMAC_SHA_512 ? 64 : (SHARKSSL_PSA_HAS_HMAC_SHA_384 ? 48 : 32)))
402#define PSA_ALG_IS_HASH(alg) (0x02000000 == (((psa_algorithm_t)(alg)) & 0x7f000000))
403#define PSA_HASH_LENGTH(alg) \
404 (((PSA_ALG_SHA_256 == (alg)) || \
405 (PSA_ALG_HMAC(PSA_ALG_SHA_256) == PSA_ALG_FULL_LENGTH_MAC(alg))) ? \
406 ((size_t)32) : \
407 (((PSA_ALG_SHA_384 == (alg)) || \
408 (PSA_ALG_HMAC(PSA_ALG_SHA_384) == PSA_ALG_FULL_LENGTH_MAC(alg))) ? \
409 ((size_t)48) : \
410 (((PSA_ALG_SHA_512 == (alg)) || \
411 (PSA_ALG_HMAC(PSA_ALG_SHA_512) == PSA_ALG_FULL_LENGTH_MAC(alg))) ? \
412 ((size_t)64) : ((size_t)0))))
413#define PSA_HASH_BLOCK_LENGTH(alg) \
414 ((PSA_ALG_SHA_256 == (alg)) ? ((size_t)64) : \
415 (((PSA_ALG_SHA_384 == (alg)) || (PSA_ALG_SHA_512 == (alg))) ? ((size_t)128) : ((size_t)0)))
416#define PSA_HASH_MAX_SIZE ((size_t)(SHARKSSL_PSA_HAS_SHA_512 ? 64 : (SHARKSSL_PSA_HAS_SHA_384 ? 48 : 32)))
417#define PSA_HASH_SUSPEND_ALGORITHM_FIELD_LENGTH ((size_t)sizeof(psa_algorithm_t))
418#define PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH(alg) \
419 ((PSA_ALG_SHA_256 == (alg)) ? ((size_t)sizeof(uint64_t)) : \
420 (((PSA_ALG_SHA_384 == (alg)) || (PSA_ALG_SHA_512 == (alg))) ? \
421 ((size_t)(2 * sizeof(uint64_t))) : ((size_t)0)))
422#define PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH(alg) \
423 ((PSA_ALG_SHA_256 == (alg)) ? PSA_HASH_LENGTH(PSA_ALG_SHA_256) : \
424 (((PSA_ALG_SHA_384 == (alg)) || (PSA_ALG_SHA_512 == (alg))) ? \
425 PSA_HASH_LENGTH(PSA_ALG_SHA_512) : ((size_t)0)))
426#define PSA_HASH_SUSPEND_OUTPUT_SIZE(alg) \
427 (SHARKSSL_PSA_HASH_SUPPORTED(alg) ? \
428 (PSA_HASH_SUSPEND_ALGORITHM_FIELD_LENGTH + \
429 PSA_HASH_SUSPEND_INPUT_LENGTH_FIELD_LENGTH(alg) + \
430 PSA_HASH_SUSPEND_HASH_STATE_FIELD_LENGTH(alg) + \
431 PSA_HASH_BLOCK_LENGTH(alg) - 1) : ((size_t)0))
432#define PSA_HASH_SUSPEND_OUTPUT_MAX_SIZE \
433 (SHARKSSL_PSA_HAS_SHA_512 ? PSA_HASH_SUSPEND_OUTPUT_SIZE(PSA_ALG_SHA_512) : \
434 (SHARKSSL_PSA_HAS_SHA_384 ? PSA_HASH_SUSPEND_OUTPUT_SIZE(PSA_ALG_SHA_384) : \
435 PSA_HASH_SUSPEND_OUTPUT_SIZE(PSA_ALG_SHA_256)))
436
437#define PSA_KEY_TYPE_NONE ((psa_key_type_t)0x0000)
438#define PSA_KEY_TYPE_RAW_DATA ((psa_key_type_t)0x1001)
439#define PSA_KEY_TYPE_HMAC ((psa_key_type_t)0x1100)
440#define PSA_KEY_TYPE_DERIVE ((psa_key_type_t)0x1200)
441#define PSA_KEY_TYPE_PASSWORD ((psa_key_type_t)0x1203)
442#define PSA_KEY_TYPE_PASSWORD_HASH ((psa_key_type_t)0x1205)
443#define PSA_KEY_TYPE_PEPPER ((psa_key_type_t)0x1206)
444#define PSA_KEY_TYPE_RSA_PUBLIC_KEY ((psa_key_type_t)0x4001)
445#define PSA_KEY_TYPE_RSA_KEY_PAIR ((psa_key_type_t)0x7001)
446#define PSA_KEY_TYPE_IS_RSA(type) \
447 (((type) == PSA_KEY_TYPE_RSA_PUBLIC_KEY) || ((type) == PSA_KEY_TYPE_RSA_KEY_PAIR))
448#define PSA_KEY_TYPE_CHACHA20 ((psa_key_type_t)0x2004)
449#define PSA_KEY_TYPE_AES ((psa_key_type_t)0x2400)
450typedef uint8_t psa_ecc_family_t;
451#define PSA_ECC_FAMILY_SECP_R1 ((psa_ecc_family_t)0x12)
452#define PSA_ECC_FAMILY_SECP_K1 ((psa_ecc_family_t)0x17)
453#define PSA_ECC_FAMILY_BRAINPOOL_P_R1 ((psa_ecc_family_t)0x30)
454#define PSA_ECC_FAMILY_MONTGOMERY ((psa_ecc_family_t)0x41)
455#define PSA_ECC_FAMILY_TWISTED_EDWARDS ((psa_ecc_family_t)0x42)
456#define PSA_KEY_TYPE_ECC_KEY_PAIR(family) ((psa_key_type_t)(0x7100 | ((psa_key_type_t)(family) & 0x007f)))
457#define PSA_KEY_TYPE_ECC_PUBLIC_KEY(family) ((psa_key_type_t)(0x4100 | ((psa_key_type_t)(family) & 0x007f)))
458#define PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(type) \
459 ((psa_key_type_t)((psa_key_type_t)(type) & (psa_key_type_t)0xcfff))
460#define PSA_KEY_TYPE_KEY_PAIR_OF_PUBLIC_KEY(type) \
461 ((psa_key_type_t)((psa_key_type_t)(type) | (psa_key_type_t)0x3000))
462#define PSA_KEY_TYPE_IS_ECC_KEY_PAIR(type) \
463 (0x7100 == (((psa_key_type_t)(type)) & 0xff80))
464#define PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY(type) \
465 (0x4100 == (((psa_key_type_t)(type)) & 0xff80))
466#define PSA_KEY_TYPE_IS_ECC(type) \
467 (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(type) || PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY(type))
468#define PSA_KEY_TYPE_ECC_GET_FAMILY(type) \
469 ((psa_ecc_family_t)((psa_key_type_t)(type) & 0x007f))
470
471#define PSA_KEY_ID_NULL ((psa_key_id_t)0x00000000)
472#define PSA_KEY_ID_USER_MIN ((psa_key_id_t)0x00000001)
473#define PSA_KEY_ID_USER_MAX ((psa_key_id_t)0x3fffffff)
474#define PSA_KEY_ID_VENDOR_MIN ((psa_key_id_t)0x40000000)
475#define PSA_KEY_ID_VENDOR_MAX ((psa_key_id_t)0x7fffffff)
476#define PSA_KEY_LIFETIME_VOLATILE ((psa_key_lifetime_t)0x00000000)
477#define PSA_KEY_LIFETIME_PERSISTENT ((psa_key_lifetime_t)0x00000001)
478#define PSA_KEY_PERSISTENCE_VOLATILE ((psa_key_persistence_t)0x00)
479#define PSA_KEY_PERSISTENCE_DEFAULT ((psa_key_persistence_t)0x01)
480#define PSA_KEY_PERSISTENCE_READ_ONLY ((psa_key_persistence_t)0xff)
481#define PSA_KEY_LOCATION_LOCAL_STORAGE ((psa_key_location_t)0x000000)
482#define PSA_KEY_LOCATION_PRIMARY_SECURE_ELEMENT ((psa_key_location_t)0x000001)
483#define PSA_KEY_USAGE_EXPORT ((psa_key_usage_t)0x00000001)
484#define PSA_KEY_USAGE_COPY ((psa_key_usage_t)0x00000002)
485#define PSA_KEY_USAGE_CACHE ((psa_key_usage_t)0x00000004)
486#define PSA_KEY_USAGE_DERIVE_PUBLIC ((psa_key_usage_t)0x00000080)
487#define PSA_KEY_USAGE_ENCRYPT ((psa_key_usage_t)0x00000100)
488#define PSA_KEY_USAGE_DECRYPT ((psa_key_usage_t)0x00000200)
489#define PSA_KEY_USAGE_SIGN_MESSAGE ((psa_key_usage_t)0x00000400)
490#define PSA_KEY_USAGE_VERIFY_MESSAGE ((psa_key_usage_t)0x00000800)
491#define PSA_KEY_USAGE_SIGN_HASH ((psa_key_usage_t)0x00001000)
492#define PSA_KEY_USAGE_VERIFY_HASH ((psa_key_usage_t)0x00002000)
493#define PSA_KEY_USAGE_DERIVE ((psa_key_usage_t)0x00004000)
494#define PSA_KEY_USAGE_VERIFY_DERIVATION ((psa_key_usage_t)0x00008000)
495#define PSA_KEY_USAGE_WRAP ((psa_key_usage_t)0x00010000)
496#define PSA_KEY_USAGE_UNWRAP ((psa_key_usage_t)0x00020000)
497#define PSA_KEY_LIFETIME_GET_PERSISTENCE(lifetime) ((psa_key_persistence_t)((psa_key_lifetime_t)(lifetime) & 0xff))
498#define PSA_KEY_LIFETIME_GET_LOCATION(lifetime) ((psa_key_location_t)((psa_key_lifetime_t)(lifetime) >> 8))
499#define PSA_KEY_LIFETIME_IS_VOLATILE(lifetime) (PSA_KEY_LIFETIME_GET_PERSISTENCE(lifetime) == PSA_KEY_PERSISTENCE_VOLATILE)
500#define PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(persistence, location) \
501 ((psa_key_lifetime_t)(((psa_key_location_t)(location) << 8) | (psa_key_persistence_t)(persistence)))
502
503
509{
513 size_t bits;
517
518#ifdef __cplusplus
519#define PSA_KEY_ATTRIBUTES_INIT psa_key_attributes_t()
520#else
521#define PSA_KEY_ATTRIBUTES_INIT {0}
522#endif
523
525{
526 uint32_t flags;
528
529#define PSA_CUSTOM_KEY_PARAMETERS_INIT {0}
530
531/* AES-KW and AES-KWP wrap exportable keys with AES-128 or AES-256 KEKs. */
532#define SHARKSSL_PSA_KW_SEMIBLOCK_LENGTH 8
533#define SHARKSSL_PSA_KW_SEMIBLOCK_BITS (SHARKSSL_PSA_KW_SEMIBLOCK_LENGTH * CHAR_BIT)
534#define SHARKSSL_PSA_KW_MIN_KEY_LENGTH (2 * SHARKSSL_PSA_KW_SEMIBLOCK_LENGTH)
535#define SHARKSSL_PSA_KWP_MAX_KEY_LENGTH 64
536#define SHARKSSL_PSA_WRAP_ECC_MAX_PRIVATE_LENGTH 48
537#define SHARKSSL_PSA_WRAP_ECC_MAX_PUBLIC_LENGTH 97
538#define SHARKSSL_PSA_WRAP_RSA_KEY_LENGTH(type, bits) \
539 ((SHARKSSL_PSA_HAS_RSA_KEY_PAIR && SHARKSSL_PSA_RSA_EXPORT_SIZE(type, bits)) ? \
540 PSA_EXPORT_KEY_OUTPUT_SIZE(type, bits) : (size_t)0)
541#define SHARKSSL_PSA_AES_WRAP_KEY_SUPPORTED(type, bits) \
542 (((type) == PSA_KEY_TYPE_AES) && \
543 (((((bits) == 128) && SHARKSSL_USE_AES_128) || \
544 (((bits) == 256) && SHARKSSL_USE_AES_256))))
545#define SHARKSSL_PSA_WRAP_KEY_MATERIAL_SUPPORTED(type, bits) \
546 (SHARKSSL_PSA_AES_WRAP_KEY_SUPPORTED(type, bits) || \
547 (((((type) == PSA_KEY_TYPE_RAW_DATA) || ((type) == PSA_KEY_TYPE_HMAC) || \
548 ((type) == PSA_KEY_TYPE_DERIVE) || ((type) == PSA_KEY_TYPE_PASSWORD) || \
549 ((type) == PSA_KEY_TYPE_PASSWORD_HASH) || ((type) == PSA_KEY_TYPE_PEPPER)) && \
550 ((bits) >= CHAR_BIT) && ((bits) <= (SHARKSSL_PSA_KWP_MAX_KEY_LENGTH * CHAR_BIT)) && \
551 (((bits) % CHAR_BIT) == 0))) || \
552 (((type) == PSA_KEY_TYPE_CHACHA20) && SHARKSSL_PSA_HAS_CHACHA20_POLY1305 && \
553 ((bits) == 256)))
554/* SEC1 public points have one prefix byte and two coordinate values. */
555#define SHARKSSL_PSA_WRAP_ECC_KEY_LENGTH(type, bits) \
556 (((((type) == PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_MONTGOMERY)) || \
557 ((type) == PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_MONTGOMERY))) && \
558 ((bits) == 255) && SHARKSSL_PSA_HAS_X25519) ? \
559 (size_t)(((bits) + CHAR_BIT - 1) / CHAR_BIT) : \
560 ((((type) == PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1)) && \
561 SHARKSSL_PSA_HAS_SECP_R1_PRIVATE && SHARKSSL_PSA_SECP_R1_KEY_SUPPORTED(bits)) ? \
562 (size_t)((bits) / CHAR_BIT) : \
563 ((((type) == PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1)) && \
564 SHARKSSL_PSA_SECP_R1_KEY_SUPPORTED(bits)) ? \
565 (size_t)(1 + 2 * ((bits) / CHAR_BIT)) : (size_t)0)))
566#define SHARKSSL_PSA_WRAP_KEY_MATERIAL_LENGTH(type, bits) \
567 (SHARKSSL_PSA_WRAP_KEY_MATERIAL_SUPPORTED(type, bits) ? \
568 (size_t)((bits) / CHAR_BIT) : \
569 (SHARKSSL_PSA_WRAP_ECC_KEY_LENGTH(type, bits) ? \
570 SHARKSSL_PSA_WRAP_ECC_KEY_LENGTH(type, bits) : \
571 SHARKSSL_PSA_WRAP_RSA_KEY_LENGTH(type, bits)))
572#define SHARKSSL_PSA_KW_KEY_SUPPORTED(type, bits) \
573 ((!PSA_KEY_TYPE_IS_RSA(type)) && \
574 (SHARKSSL_PSA_WRAP_KEY_MATERIAL_LENGTH(type, bits) >= SHARKSSL_PSA_KW_MIN_KEY_LENGTH) && \
575 ((SHARKSSL_PSA_WRAP_KEY_MATERIAL_LENGTH(type, bits) % SHARKSSL_PSA_KW_SEMIBLOCK_LENGTH) == 0))
576#define SHARKSSL_PSA_KWP_KEY_SUPPORTED(type, bits) \
577 (SHARKSSL_PSA_WRAP_KEY_MATERIAL_LENGTH(type, bits) != 0)
578#define PSA_WRAP_KEY_OUTPUT_SIZE(wrap_key_type, alg, key_type, key_bits) \
579 ((SHARKSSL_PSA_HAS_AES_KW && ((wrap_key_type) == PSA_KEY_TYPE_AES) && \
580 (((((alg) == PSA_ALG_KW) && SHARKSSL_PSA_KW_KEY_SUPPORTED(key_type, key_bits)) || \
581 (((alg) == PSA_ALG_KWP) && SHARKSSL_PSA_KWP_KEY_SUPPORTED(key_type, key_bits))))) ? \
582 ((alg) == PSA_ALG_KW ? \
583 (SHARKSSL_PSA_WRAP_KEY_MATERIAL_LENGTH(key_type, key_bits) + SHARKSSL_PSA_KW_SEMIBLOCK_LENGTH) : \
584 ((SHARKSSL_PSA_WRAP_KEY_MATERIAL_LENGTH(key_type, key_bits) + SHARKSSL_PSA_KW_SEMIBLOCK_LENGTH - 1) / \
585 SHARKSSL_PSA_KW_SEMIBLOCK_LENGTH + 1) * SHARKSSL_PSA_KW_SEMIBLOCK_LENGTH) : (size_t)0)
586#define PSA_WRAP_KEY_PAIR_MAX_SIZE \
587 ((SHARKSSL_PSA_HAS_AES_KW && SHARKSSL_PSA_HAS_RSA_KEY_PAIR) ? \
588 (size_t)(SHARKSSL_PSA_RSA_PRIVATE_MAX_SIZE + SHARKSSL_PSA_KW_SEMIBLOCK_LENGTH) : \
589 ((SHARKSSL_PSA_HAS_AES_KW && (SHARKSSL_PSA_HAS_X25519 || SHARKSSL_PSA_HAS_SECP_R1_PRIVATE)) ? \
590 (size_t)(SHARKSSL_PSA_WRAP_ECC_MAX_PRIVATE_LENGTH + SHARKSSL_PSA_KW_SEMIBLOCK_LENGTH) : (size_t)0))
591
602#define SHARKSSL_PSA_RSA_EXPORT_SIZE(type, bits) \
603 (PSA_KEY_TYPE_IS_RSA(type) && (((bits) == 2048) || ((bits) == 3072) || \
604 (((type) == PSA_KEY_TYPE_RSA_PUBLIC_KEY) && ((bits) == SHARKSSL_PSA_RSA_PUBLIC_MAX_BITS))) ? \
605 ((size_t)(bits) / 8 + 16) : (size_t)0)
606#define PSA_EXPORT_KEY_OUTPUT_SIZE(type, bits) \
607 ((((type) == PSA_KEY_TYPE_RSA_KEY_PAIR) && SHARKSSL_PSA_RSA_EXPORT_SIZE(type, bits)) ? \
608 ((size_t)(bits) / 16 * 9 + 64) : \
609 (SHARKSSL_PSA_RSA_EXPORT_SIZE(type, bits) ? SHARKSSL_PSA_RSA_EXPORT_SIZE(type, bits) : \
610 ((((type) == PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1)) && \
611 (((bits) == 256) || ((bits) == 384))) ? ((size_t)(1 + (bits) / 4)) : \
612 ((((type) == PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1)) && \
613 (((bits) == 256) || ((bits) == 384))) ? ((size_t)(1 + (bits) / 4)) : \
614 ((((((type) == PSA_KEY_TYPE_RAW_DATA) || ((type) == PSA_KEY_TYPE_HMAC) || \
615 ((type) == PSA_KEY_TYPE_DERIVE) || \
616 ((type) == PSA_KEY_TYPE_PASSWORD) || \
617 ((type) == PSA_KEY_TYPE_PASSWORD_HASH) || \
618 ((type) == PSA_KEY_TYPE_PEPPER)) && \
619 ((bits) >= 8) && ((bits) <= 512) && (((bits) & 7) == 0)) || \
620 (((type) == PSA_KEY_TYPE_AES) && (((bits) == 128) || ((bits) == 256))) || \
621 (((type) == PSA_KEY_TYPE_CHACHA20) && ((bits) == 256)) || \
622 ((((type) == PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_MONTGOMERY)) || \
623 ((type) == PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_MONTGOMERY))) && \
624 ((bits) == 255))) ? \
625 (((size_t)(bits) + 7) / 8) : ((size_t)0))))))
626
627#define PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(type, bits) \
628 (SHARKSSL_PSA_RSA_EXPORT_SIZE(type, bits) ? SHARKSSL_PSA_RSA_EXPORT_SIZE(type, bits) : \
629 (((((type) == PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1)) || \
630 ((type) == PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1))) && \
631 (((bits) == 256) || ((bits) == 384))) ? ((size_t)(1 + (bits) / 4)) : \
632 (((((type) == PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_MONTGOMERY)) || \
633 ((type) == PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_MONTGOMERY))) && \
634 ((bits) == 255)) ? ((size_t)32) : ((size_t)0))))
635#define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE SHARKSSL_PSA_RSA_PUBLIC_MAX_SIZE
636#define PSA_EXPORT_KEY_PAIR_MAX_SIZE SHARKSSL_PSA_RSA_PRIVATE_MAX_SIZE
637#define PSA_EXPORT_ASYMMETRIC_KEY_MAX_SIZE SHARKSSL_PSA_RSA_PRIVATE_MAX_SIZE
638
644#define PSA_ECDSA_SIGNATURE_SIZE(curve_bits) \
645 ((((curve_bits) == 256) || ((curve_bits) == 384)) ? ((size_t)(curve_bits) / 4) : ((size_t)0))
646#define PSA_SIGN_OUTPUT_SIZE(key_type, key_bits, alg) \
647 ((((key_type) == PSA_KEY_TYPE_RSA_KEY_PAIR) && \
648 (((key_bits) == 2048) || ((key_bits) == 3072)) && \
649 (SHARKSSL_PSA_RSA_PKCS1V15_SUPPORTED(alg) || \
650 SHARKSSL_PSA_RSA_PSS_SUPPORTED(alg))) ? ((size_t)(key_bits) / 8) : \
651 ((((key_type) == PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1)) && \
652 SHARKSSL_PSA_ECDSA_CURVE_SUPPORTED(key_bits) && (SHARKSSL_PSA_ECDSA_SUPPORTED(alg))) ? \
653 PSA_ECDSA_SIGNATURE_SIZE(key_bits) : ((size_t)0)))
654#define PSA_SIGNATURE_MAX_SIZE ((size_t)(SHARKSSL_PSA_RSA_PUBLIC_MAX_BITS / 8))
655#define PSA_RAW_KEY_AGREEMENT_OUTPUT_SIZE(key_type, key_bits) \
656 ((((key_type) == PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_MONTGOMERY)) && \
657 ((key_bits) == 255)) ? ((size_t)32) : \
658 ((((key_type) == PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1)) && \
659 (((key_bits) == 256) || ((key_bits) == 384))) ? \
660 ((size_t)(key_bits) / 8) : ((size_t)0)))
661#define PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE ((size_t)48)
662#define SHARKSSL_PSA_ECIES_P256_BITS 256
663#define PSA_ENCAPSULATE_CIPHERTEXT_SIZE(key_type, key_bits, alg) \
664 ((SHARKSSL_PSA_HAS_ECIES_P256 && ((alg) == PSA_ALG_ECIES_SEC1) && \
665 (((key_type) == PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1)) || \
666 ((key_type) == PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1))) && \
667 ((key_bits) == SHARKSSL_PSA_ECIES_P256_BITS)) ? \
668 PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1), \
669 SHARKSSL_PSA_ECIES_P256_BITS) : (size_t)0)
670#define PSA_ENCAPSULATE_CIPHERTEXT_MAX_SIZE \
671 (SHARKSSL_PSA_HAS_ECIES_P256 ? \
672 PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1), \
673 SHARKSSL_PSA_ECIES_P256_BITS) : (size_t)0)
674
675#define SHARKSSL_PSA_CCM_TAG_FIELD(alg) ((((psa_algorithm_t)(alg)) >> 16) & 0x3f)
676#define SHARKSSL_PSA_AEAD_CCM_TAG_LENGTH(alg) \
677 (((SHARKSSL_PSA_HAS_AES_CCM) && \
678 (PSA_ALG_CCM == PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(alg)) && \
679 ((((psa_algorithm_t)(alg)) & 0x00008000) == 0) && \
680 ((SHARKSSL_PSA_CCM_TAG_FIELD(alg) == 0) || \
681 ((SHARKSSL_PSA_CCM_TAG_FIELD(alg) >= 4) && \
682 (SHARKSSL_PSA_CCM_TAG_FIELD(alg) <= 16) && \
683 ((SHARKSSL_PSA_CCM_TAG_FIELD(alg) & 1) == 0)))) ? \
684 ((SHARKSSL_PSA_CCM_TAG_FIELD(alg) == 0) ? (size_t)16 : \
685 (size_t)SHARKSSL_PSA_CCM_TAG_FIELD(alg)) : (size_t)0)
686#define SHARKSSL_PSA_AEAD_TAG_LENGTH(alg) \
687 ((((alg) == PSA_ALG_GCM) || \
688 (SHARKSSL_PSA_HAS_CHACHA20_POLY1305 && ((alg) == PSA_ALG_CHACHA20_POLY1305))) ? \
689 (size_t)16 : SHARKSSL_PSA_AEAD_CCM_TAG_LENGTH(alg))
693#define SHARKSSL_PSA_AEAD_KEY_SUPPORTED(key_type, alg) \
694 (((PSA_KEY_TYPE_CHACHA20 == (key_type)) && SHARKSSL_PSA_HAS_CHACHA20_POLY1305 && \
695 (PSA_ALG_CHACHA20_POLY1305 == (alg))) || \
696 ((PSA_KEY_TYPE_AES == (key_type)) && (PSA_ALG_CHACHA20_POLY1305 != (alg)) && \
697 (SHARKSSL_PSA_AEAD_TAG_LENGTH(alg) != 0)))
698#define PSA_AEAD_TAG_LENGTH(key_type, key_bits, alg) \
699 ((SHARKSSL_PSA_AEAD_KEY_SUPPORTED(key_type, alg) && \
700 (((key_bits) == 256) || (((key_type) == PSA_KEY_TYPE_AES) && ((key_bits) == 128)))) ? \
701 SHARKSSL_PSA_AEAD_TAG_LENGTH(alg) : ((size_t)0))
702#define PSA_AEAD_ENCRYPT_OUTPUT_SIZE(key_type, alg, plaintext_length) \
703 ((SHARKSSL_PSA_AEAD_KEY_SUPPORTED(key_type, alg) && \
704 ((size_t)(plaintext_length) <= SIZE_MAX - SHARKSSL_PSA_AEAD_TAG_LENGTH(alg))) ? \
705 ((size_t)(plaintext_length) + SHARKSSL_PSA_AEAD_TAG_LENGTH(alg)) : ((size_t)0))
706#define PSA_AEAD_ENCRYPT_OUTPUT_MAX_SIZE(plaintext_length) \
707 (((size_t)(plaintext_length) <= SIZE_MAX - 16) ? \
708 ((size_t)(plaintext_length) + (size_t)16) : ((size_t)0))
709#define PSA_AEAD_NONCE_LENGTH(key_type, alg) \
710 ((((key_type) == PSA_KEY_TYPE_CHACHA20) && SHARKSSL_PSA_HAS_CHACHA20_POLY1305 && \
711 ((alg) == PSA_ALG_CHACHA20_POLY1305)) ? ((size_t)12) : \
712 (((key_type) == PSA_KEY_TYPE_AES) && ((alg) == PSA_ALG_GCM)) ? ((size_t)12) : \
713 (((SHARKSSL_PSA_HAS_AES_CCM) && ((key_type) == PSA_KEY_TYPE_AES) && \
714 (PSA_ALG_CCM == PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(alg))) ? ((size_t)13) : ((size_t)0)))
715#define PSA_AEAD_NONCE_MAX_SIZE ((size_t)13)
716#define PSA_AEAD_DECRYPT_OUTPUT_SIZE(key_type, alg, ciphertext_length) \
717 ((SHARKSSL_PSA_AEAD_KEY_SUPPORTED(key_type, alg) && \
718 ((ciphertext_length) >= SHARKSSL_PSA_AEAD_TAG_LENGTH(alg))) ? \
719 ((size_t)(ciphertext_length) - SHARKSSL_PSA_AEAD_TAG_LENGTH(alg)) : ((size_t)0))
720#define PSA_AEAD_DECRYPT_OUTPUT_MAX_SIZE(ciphertext_length) ((size_t)(ciphertext_length))
721#define PSA_AEAD_TAG_MAX_SIZE ((size_t)16)
722
723#define PSA_AEAD_UPDATE_OUTPUT_SIZE(key_type, alg, input_length) \
724 ((SHARKSSL_PSA_AEAD_KEY_SUPPORTED(key_type, alg)) ? \
725 ((size_t)(input_length)) : ((size_t)0))
726#define PSA_AEAD_UPDATE_OUTPUT_MAX_SIZE(input_length) ((size_t)(input_length))
727#define PSA_AEAD_FINISH_OUTPUT_SIZE(key_type, alg) \
728 ((SHARKSSL_PSA_AEAD_KEY_SUPPORTED(key_type, alg)) ? ((size_t)16) : ((size_t)0))
729#define PSA_AEAD_FINISH_OUTPUT_MAX_SIZE ((size_t)16)
730#define PSA_AEAD_VERIFY_OUTPUT_SIZE(key_type, alg) \
731 ((SHARKSSL_PSA_AEAD_KEY_SUPPORTED(key_type, alg)) ? ((size_t)16) : ((size_t)0))
732#define PSA_AEAD_VERIFY_OUTPUT_MAX_SIZE ((size_t)16)
733
734
735#define PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) \
736 (((key_type) == PSA_KEY_TYPE_AES) ? ((size_t)16) : ((size_t)0))
737#define PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE ((size_t)16)
738#define PSA_CIPHER_IV_LENGTH(key_type, alg) \
739 ((((key_type) == PSA_KEY_TYPE_AES) && \
740 (((alg) == PSA_ALG_CTR) || ((alg) == PSA_ALG_CBC_NO_PADDING))) ? \
741 ((size_t)16) : ((size_t)0))
742#define PSA_CIPHER_IV_MAX_SIZE ((size_t)16)
743#define PSA_CIPHER_ENCRYPT_OUTPUT_SIZE(key_type, alg, input_length) \
744 ((((key_type) == PSA_KEY_TYPE_AES) && \
745 (((alg) == PSA_ALG_CTR) || ((alg) == PSA_ALG_ECB_NO_PADDING) || \
746 ((alg) == PSA_ALG_CBC_NO_PADDING)) && \
747 ((size_t)(input_length) <= SIZE_MAX - PSA_CIPHER_IV_LENGTH(key_type, alg))) ? \
748 ((size_t)(input_length) + PSA_CIPHER_IV_LENGTH(key_type, alg)) : ((size_t)0))
749#define PSA_CIPHER_ENCRYPT_OUTPUT_MAX_SIZE(input_length) \
750 (((size_t)(input_length) <= SIZE_MAX - 16) ? \
751 ((size_t)(input_length) + 16) : ((size_t)0))
752#define PSA_CIPHER_DECRYPT_OUTPUT_SIZE(key_type, alg, input_length) \
753 ((((key_type) == PSA_KEY_TYPE_AES) && \
754 (((alg) == PSA_ALG_CTR) || ((alg) == PSA_ALG_ECB_NO_PADDING) || \
755 ((alg) == PSA_ALG_CBC_NO_PADDING))) ? \
756 ((size_t)(input_length)) : ((size_t)0))
757#define PSA_CIPHER_DECRYPT_OUTPUT_MAX_SIZE(input_length) ((size_t)(input_length))
758#define PSA_CIPHER_UPDATE_OUTPUT_SIZE(key_type, alg, input_length) \
759 ((((key_type) == PSA_KEY_TYPE_AES) && ((alg) == PSA_ALG_CTR)) ? \
760 ((size_t)(input_length)) : \
761 (((key_type) == PSA_KEY_TYPE_AES) && \
762 (((alg) == PSA_ALG_ECB_NO_PADDING) || ((alg) == PSA_ALG_CBC_NO_PADDING)) && \
763 ((size_t)(input_length) <= SIZE_MAX - 15)) ? \
764 (((size_t)(input_length) + 15) & ~(size_t)15) : ((size_t)0))
765#define PSA_CIPHER_UPDATE_OUTPUT_MAX_SIZE(input_length) \
766 (((size_t)(input_length) <= SIZE_MAX - 15) ? \
767 (((size_t)(input_length) + 15) & ~(size_t)15) : ((size_t)0))
768#define PSA_CIPHER_FINISH_OUTPUT_SIZE(key_type, alg) ((size_t)0)
769#define PSA_CIPHER_FINISH_OUTPUT_MAX_SIZE ((size_t)16)
770
777{
778 uint32_t state;
779 uint32_t context[52];
781
782#ifdef __cplusplus
783#define PSA_HASH_OPERATION_INIT psa_hash_operation_t()
784#else
785#define PSA_HASH_OPERATION_INIT {0, {0}}
786#endif
787
788#if (PSA_CRYPTO_API_VERSION_MINOR >= 5)
795{
800 uint32_t state;
801 uint8_t flags;
803
805{
811 uint32_t state;
812 uint8_t flags;
815
816#ifdef __cplusplus
817#define PSA_SIGN_OPERATION_INIT psa_sign_operation_t()
818#define PSA_VERIFY_OPERATION_INIT psa_verify_operation_t()
819#else
820#define PSA_SIGN_OPERATION_INIT {0}
821#define PSA_VERIFY_OPERATION_INIT {0}
822#endif
823#endif
824
831{
832 uint32_t state;
834 uint32_t context[96];
837
838#ifdef __cplusplus
839#define PSA_MAC_OPERATION_INIT psa_mac_operation_t()
840#else
841#define PSA_MAC_OPERATION_INIT {0}
842#endif
843
846{
847 uint32_t state;
849 uint32_t aes_context[64];
850 uint8_t chain[16];
851 uint8_t pending[16];
852 uint8_t stream[16];
855 uint8_t direction;
856 uint8_t iv_set;
859
860#ifdef __cplusplus
861#define PSA_CIPHER_OPERATION_INIT psa_cipher_operation_t()
862#else
863#define PSA_CIPHER_OPERATION_INIT {0}
864#endif
865
871{
872 uint32_t state;
873 uint32_t gcm_context[128];
874 uint32_t ad_length;
875 uint32_t body_length;
876 uint32_t ad_remaining;
878 uint8_t counter[16];
879 uint8_t hash[16];
880 uint8_t pending[16];
881 uint8_t stream[16];
885 uint8_t tag_length;
888
889#ifdef __cplusplus
890#define PSA_AEAD_OPERATION_INIT psa_aead_operation_t()
891#else
892#define PSA_AEAD_OPERATION_INIT {0}
893#endif
894
895
908{
909 uint32_t state;
912 uint32_t cost;
915 size_t capacity;
917 uint8_t salt[128];
918 uint8_t prk[128];
919 uint8_t block[64];
920 uint8_t prf_a[64];
921 uint8_t other_secret[64];
922 uint8_t info[256];
923 uint16_t salt_length;
926 uint8_t prk_length;
928 uint8_t flags;
934
935#ifdef __cplusplus
936#define PSA_KEY_DERIVATION_OPERATION_INIT psa_key_derivation_operation_t()
937#else
938#define PSA_KEY_DERIVATION_OPERATION_INIT {0}
939#endif
940
941#define PSA_KEY_DERIVATION_INPUT_SECRET ((psa_key_derivation_step_t)1)
942#define PSA_KEY_DERIVATION_INPUT_SALT ((psa_key_derivation_step_t)2)
943#define PSA_KEY_DERIVATION_INPUT_INFO ((psa_key_derivation_step_t)3)
944#define PSA_KEY_DERIVATION_INPUT_PASSWORD ((psa_key_derivation_step_t)4)
945#define PSA_KEY_DERIVATION_INPUT_COST ((psa_key_derivation_step_t)5)
946#define PSA_KEY_DERIVATION_INPUT_SEED ((psa_key_derivation_step_t)6)
947#define PSA_KEY_DERIVATION_INPUT_LABEL ((psa_key_derivation_step_t)7)
948#define PSA_KEY_DERIVATION_INPUT_OTHER_SECRET ((psa_key_derivation_step_t)8)
949#define PSA_KEY_DERIVATION_INPUT_CONTEXT ((psa_key_derivation_step_t)9)
950#define PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE ((size_t)64)
951
953psa_status_t psa_generate_random(uint8_t *output, size_t output_size);
955 size_t input_length, uint8_t *hash,
956 size_t hash_size, size_t *hash_length);
958 size_t input_length, const uint8_t *hash,
959 size_t hash_length);
962psa_status_t psa_hash_update(psa_hash_operation_t *operation, const uint8_t *input,
963 size_t input_length);
965 size_t hash_size, size_t *hash_length);
966psa_status_t psa_hash_verify(psa_hash_operation_t *operation, const uint8_t *hash,
967 size_t hash_length);
969psa_status_t psa_hash_suspend(psa_hash_operation_t *operation, uint8_t *hash_state,
970 size_t hash_state_size, size_t *hash_state_length);
971psa_status_t psa_hash_resume(psa_hash_operation_t *operation, const uint8_t *hash_state,
972 size_t hash_state_length);
974 psa_hash_operation_t *target_operation);
975
978 const uint8_t *input, size_t input_length,
979 uint8_t *mac, size_t mac_size, size_t *mac_length);
981 const uint8_t *input, size_t input_length,
982 const uint8_t *mac, size_t mac_length);
988 const uint8_t *input, size_t input_length);
990 uint8_t *mac, size_t mac_size, size_t *mac_length);
992 const uint8_t *mac, size_t mac_length);
994
996 const uint8_t *nonce, size_t nonce_length,
997 const uint8_t *additional_data, size_t additional_data_length,
998 const uint8_t *plaintext, size_t plaintext_length,
999 uint8_t *ciphertext, size_t ciphertext_size,
1000 size_t *ciphertext_length);
1002 const uint8_t *nonce, size_t nonce_length,
1003 const uint8_t *additional_data, size_t additional_data_length,
1004 const uint8_t *ciphertext, size_t ciphertext_length,
1005 uint8_t *plaintext, size_t plaintext_size,
1006 size_t *plaintext_length);
1007
1011psa_status_t psa_aead_set_lengths(psa_aead_operation_t *operation, size_t ad_length, size_t plaintext_length);
1012psa_status_t psa_aead_generate_nonce(psa_aead_operation_t *operation, uint8_t *nonce, size_t nonce_size, size_t *nonce_length);
1013psa_status_t psa_aead_set_nonce(psa_aead_operation_t *operation, const uint8_t *nonce, size_t nonce_length);
1014psa_status_t psa_aead_update_ad(psa_aead_operation_t *operation, const uint8_t *input, size_t input_length);
1015psa_status_t psa_aead_update(psa_aead_operation_t *operation, const uint8_t *input, size_t input_length,
1016 uint8_t *output, size_t output_size, size_t *output_length);
1017psa_status_t psa_aead_finish(psa_aead_operation_t *operation, uint8_t *ciphertext, size_t ciphertext_size,
1018 size_t *ciphertext_length, uint8_t *tag, size_t tag_size, size_t *tag_length);
1019psa_status_t psa_aead_verify(psa_aead_operation_t *operation, uint8_t *plaintext, size_t plaintext_size,
1020 size_t *plaintext_length, const uint8_t *tag, size_t tag_length);
1022
1023
1026 psa_key_id_t key, psa_algorithm_t alg);
1028 psa_key_id_t key, psa_algorithm_t alg);
1030 uint8_t *iv, size_t iv_size,
1031 size_t *iv_length);
1033 const uint8_t *iv, size_t iv_length);
1035 const uint8_t *input, size_t input_length,
1036 uint8_t *output, size_t output_size,
1037 size_t *output_length);
1039 uint8_t *output, size_t output_size,
1040 size_t *output_length);
1043 const uint8_t *input, size_t input_length,
1044 uint8_t *output, size_t output_size,
1045 size_t *output_length);
1047 const uint8_t *input, size_t input_length,
1048 uint8_t *output, size_t output_size,
1049 size_t *output_length);
1050
1055void psa_set_key_bits(psa_key_attributes_t *attributes, size_t bits);
1056size_t psa_get_key_bits(const psa_key_attributes_t *attributes);
1067 psa_key_usage_t usage);
1068psa_status_t psa_import_key(const psa_key_attributes_t *attributes, const uint8_t *data,
1069 size_t data_length, psa_key_id_t *key);
1071 const uint8_t *label, size_t label_length,
1072 psa_key_id_t *key);
1075 const psa_custom_key_parameters_t *custom,
1076 const uint8_t *custom_data,
1077 size_t custom_data_length, psa_key_id_t *key);
1079 const psa_key_attributes_t *attributes,
1080 psa_key_id_t *target_key);
1081psa_status_t psa_export_key(psa_key_id_t key, uint8_t *data, size_t data_size,
1082 size_t *data_length);
1084 psa_key_id_t key, uint8_t *data, size_t data_size,
1085 size_t *data_length);
1087 psa_key_id_t wrapping_key, psa_algorithm_t alg,
1088 const uint8_t *data, size_t data_length,
1089 psa_key_id_t *key);
1090psa_status_t psa_export_public_key(psa_key_id_t key, uint8_t *data, size_t data_size,
1091 size_t *data_length);
1093 const uint8_t *peer_key, size_t peer_key_length,
1094 uint8_t *output, size_t output_size,
1095 size_t *output_length);
1097 const uint8_t *peer_key, size_t peer_key_length,
1098 psa_algorithm_t alg,
1099 const psa_key_attributes_t *attributes,
1100 psa_key_id_t *key);
1102 const psa_key_attributes_t *attributes,
1103 psa_key_id_t *output_key, uint8_t *ciphertext,
1104 size_t ciphertext_size, size_t *ciphertext_length);
1106 const uint8_t *ciphertext, size_t ciphertext_length,
1107 const psa_key_attributes_t *attributes,
1108 psa_key_id_t *output_key);
1110 const uint8_t *input, size_t input_length,
1111 uint8_t *signature, size_t signature_size,
1112 size_t *signature_length);
1114 const uint8_t *hash, size_t hash_length,
1115 uint8_t *signature, size_t signature_size,
1116 size_t *signature_length);
1118 const uint8_t *input, size_t input_length,
1119 const uint8_t *signature, size_t signature_length);
1121 const uint8_t *hash, size_t hash_length,
1122 const uint8_t *signature, size_t signature_length);
1124 const uint8_t *input, size_t input_length,
1125 const uint8_t *context, size_t context_length,
1126 uint8_t *signature, size_t signature_size,
1127 size_t *signature_length);
1128
1130 const uint8_t *input, size_t input_length,
1131 const uint8_t *context, size_t context_length,
1132 const uint8_t *signature, size_t signature_length);
1133
1135 const uint8_t *hash, size_t hash_length,
1136 const uint8_t *context, size_t context_length,
1137 uint8_t *signature, size_t signature_size,
1138 size_t *signature_length);
1139
1141 const uint8_t *hash, size_t hash_length,
1142 const uint8_t *context, size_t context_length,
1143 const uint8_t *signature, size_t signature_length);
1144
1145#if (PSA_CRYPTO_API_VERSION_MINOR >= 5)
1148psa_status_t psa_sign_set_context(psa_sign_operation_t *operation, const uint8_t *context, size_t context_length);
1149psa_status_t psa_sign_update(psa_sign_operation_t *operation, const uint8_t *input, size_t input_length);
1150psa_status_t psa_sign_finish(psa_sign_operation_t *operation, uint8_t *signature, size_t signature_size,
1151 size_t *signature_length);
1153
1156 const uint8_t *signature, size_t signature_length);
1157psa_status_t psa_verify_set_context(psa_verify_operation_t *operation, const uint8_t *context, size_t context_length);
1158psa_status_t psa_verify_update(psa_verify_operation_t *operation, const uint8_t *input, size_t input_length);
1161#endif
1162
1164 const uint8_t *input, size_t input_length,
1165 const uint8_t *salt, size_t salt_length,
1166 uint8_t *output, size_t output_size,
1167 size_t *output_length);
1169 const uint8_t *input, size_t input_length,
1170 const uint8_t *salt, size_t salt_length,
1171 uint8_t *output, size_t output_size,
1172 size_t *output_length);
1175
1178 psa_algorithm_t alg);
1180 size_t *capacity);
1182 size_t capacity);
1185 const uint8_t *data, size_t data_length);
1188 psa_key_id_t key);
1191 psa_key_id_t private_key,
1192 const uint8_t *peer_key,
1193 size_t peer_key_length);
1196 uint64_t value);
1198 uint8_t *output, size_t output_length);
1201 psa_key_id_t *key);
1204 const psa_custom_key_parameters_t *custom,
1205 const uint8_t *custom_data,
1206 size_t custom_data_length,
1207 psa_key_id_t *key);
1209 const uint8_t *expected_output,
1210 size_t output_length);
1212 psa_key_id_t expected);
1214
1215#ifdef __cplusplus
1216}
1217#endif
1218
1219#endif
SharkSSL feature defaults and dependency checks.
void psa_set_key_usage_flags(psa_key_attributes_t *attributes, psa_key_usage_t usage_flags)
psa_status_t psa_verify_hash(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, const uint8_t *signature, size_t signature_length)
int32_t psa_status_t
SharkSSL PSA Crypto API 1.4.1/1.5.0 configurable subset.
Definition: crypto.h:57
psa_status_t psa_key_derivation_output_bytes(psa_key_derivation_operation_t *operation, uint8_t *output, size_t output_length)
psa_verify_operation_t psa_verify_operation_init(void)
psa_status_t psa_purge_key(psa_key_id_t key)
psa_status_t psa_verify_message_with_context(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *context, size_t context_length, const uint8_t *signature, size_t signature_length)
psa_status_t psa_cipher_encrypt(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, uint8_t *output, size_t output_size, size_t *output_length)
psa_status_t psa_hash_compare(psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *hash, size_t hash_length)
psa_status_t psa_raw_key_agreement(psa_algorithm_t alg, psa_key_id_t private_key, const uint8_t *peer_key, size_t peer_key_length, uint8_t *output, size_t output_size, size_t *output_length)
struct psa_key_attributes_s psa_key_attributes_t
Attributes are value objects; setters do not allocate resources.
psa_status_t psa_sign_set_context(psa_sign_operation_t *operation, const uint8_t *context, size_t context_length)
uint32_t psa_key_id_t
Definition: crypto.h:60
struct psa_custom_key_parameters_t psa_custom_key_parameters_t
psa_key_type_t psa_get_key_type(const psa_key_attributes_t *attributes)
struct psa_cipher_operation_s psa_cipher_operation_t
AES cipher state; applications must treat all members as opaque.
struct psa_aead_operation_s psa_aead_operation_t
AEAD storage is implementation-defined; all members are opaque.
psa_status_t psa_aead_encrypt(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *nonce, size_t nonce_length, const uint8_t *additional_data, size_t additional_data_length, const uint8_t *plaintext, size_t plaintext_length, uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length)
uint8_t psa_key_persistence_t
Definition: crypto.h:62
psa_status_t psa_verify_update(psa_verify_operation_t *operation, const uint8_t *input, size_t input_length)
psa_status_t psa_generate_random(uint8_t *output, size_t output_size)
psa_status_t psa_asymmetric_decrypt(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *salt, size_t salt_length, uint8_t *output, size_t output_size, size_t *output_length)
struct psa_key_derivation_operation_s psa_key_derivation_operation_t
Key-derivation state.
psa_status_t psa_verify_abort(psa_verify_operation_t *operation)
psa_status_t psa_cipher_finish(psa_cipher_operation_t *operation, uint8_t *output, size_t output_size, size_t *output_length)
psa_status_t psa_key_derivation_output_key_custom(const psa_key_attributes_t *attributes, psa_key_derivation_operation_t *operation, const psa_custom_key_parameters_t *custom, const uint8_t *custom_data, size_t custom_data_length, psa_key_id_t *key)
psa_status_t psa_verify_hash_with_context(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, const uint8_t *context, size_t context_length, const uint8_t *signature, size_t signature_length)
psa_status_t psa_sign_message(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, uint8_t *signature, size_t signature_size, size_t *signature_length)
psa_status_t psa_asymmetric_encrypt(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *salt, size_t salt_length, uint8_t *output, size_t output_size, size_t *output_length)
psa_status_t psa_cipher_generate_iv(psa_cipher_operation_t *operation, uint8_t *iv, size_t iv_size, size_t *iv_length)
psa_algorithm_t psa_get_key_algorithm(const psa_key_attributes_t *attributes)
psa_status_t psa_crypto_init(void)
psa_status_t psa_aead_decrypt_setup(psa_aead_operation_t *operation, psa_key_id_t key, psa_algorithm_t alg)
psa_status_t psa_cipher_decrypt(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, uint8_t *output, size_t output_size, size_t *output_length)
psa_status_t psa_hash_suspend(psa_hash_operation_t *operation, uint8_t *hash_state, size_t hash_state_size, size_t *hash_state_length)
void psa_set_key_id(psa_key_attributes_t *attributes, psa_key_id_t id)
psa_key_id_t psa_get_key_id(const psa_key_attributes_t *attributes)
void psa_reset_key_attributes(psa_key_attributes_t *attributes)
psa_status_t psa_hash_clone(const psa_hash_operation_t *source_operation, psa_hash_operation_t *target_operation)
struct psa_hash_operation_s psa_hash_operation_t
Hash operation storage is implementation-defined.
psa_status_t psa_sign_message_with_context(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *context, size_t context_length, uint8_t *signature, size_t signature_size, size_t *signature_length)
psa_status_t psa_sign_hash(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, uint8_t *signature, size_t signature_size, size_t *signature_length)
psa_aead_operation_t psa_aead_operation_init(void)
psa_status_t psa_hash_finish(psa_hash_operation_t *operation, uint8_t *hash, size_t hash_size, size_t *hash_length)
psa_status_t psa_decapsulate(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *ciphertext, size_t ciphertext_length, const psa_key_attributes_t *attributes, psa_key_id_t *output_key)
psa_status_t psa_verify_finish(psa_verify_operation_t *operation)
psa_status_t psa_sign_setup(psa_sign_operation_t *operation, psa_key_id_t key, psa_algorithm_t alg)
psa_status_t psa_key_derivation_key_agreement(psa_key_derivation_operation_t *operation, psa_key_derivation_step_t step, psa_key_id_t private_key, const uint8_t *peer_key, size_t peer_key_length)
psa_sign_operation_t psa_sign_operation_init(void)
psa_cipher_operation_t psa_cipher_operation_init(void)
psa_status_t psa_aead_encrypt_setup(psa_aead_operation_t *operation, psa_key_id_t key, psa_algorithm_t alg)
psa_status_t psa_mac_update(psa_mac_operation_t *operation, const uint8_t *input, size_t input_length)
psa_status_t psa_aead_generate_nonce(psa_aead_operation_t *operation, uint8_t *nonce, size_t nonce_size, size_t *nonce_length)
psa_status_t psa_check_key_usage(psa_key_id_t key, psa_algorithm_t alg, psa_key_usage_t usage)
psa_status_t psa_aead_set_nonce(psa_aead_operation_t *operation, const uint8_t *nonce, size_t nonce_length)
psa_key_attributes_t psa_key_attributes_init(void)
struct psa_verify_operation_s psa_verify_operation_t
uint32_t psa_key_location_t
Definition: crypto.h:63
psa_status_t psa_export_key(psa_key_id_t key, uint8_t *data, size_t data_size, size_t *data_length)
size_t psa_get_key_bits(const psa_key_attributes_t *attributes)
uint16_t psa_key_type_t
Definition: crypto.h:59
psa_status_t psa_mac_sign_setup(psa_mac_operation_t *operation, psa_key_id_t key, psa_algorithm_t alg)
psa_status_t psa_hash_update(psa_hash_operation_t *operation, const uint8_t *input, size_t input_length)
uint32_t psa_key_lifetime_t
Definition: crypto.h:61
psa_status_t psa_sign_hash_with_context(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, const uint8_t *context, size_t context_length, uint8_t *signature, size_t signature_size, size_t *signature_length)
#define PSA_SIGNATURE_MAX_SIZE
Definition: crypto.h:654
psa_status_t psa_aead_update_ad(psa_aead_operation_t *operation, const uint8_t *input, size_t input_length)
psa_status_t psa_hash_resume(psa_hash_operation_t *operation, const uint8_t *hash_state, size_t hash_state_length)
psa_status_t psa_mac_verify_setup(psa_mac_operation_t *operation, psa_key_id_t key, psa_algorithm_t alg)
psa_status_t psa_sign_update(psa_sign_operation_t *operation, const uint8_t *input, size_t input_length)
psa_status_t psa_aead_finish(psa_aead_operation_t *operation, uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length, uint8_t *tag, size_t tag_size, size_t *tag_length)
psa_status_t psa_export_public_key(psa_key_id_t key, uint8_t *data, size_t data_size, size_t *data_length)
psa_status_t psa_copy_key(psa_key_id_t source_key, const psa_key_attributes_t *attributes, psa_key_id_t *target_key)
struct psa_mac_operation_s psa_mac_operation_t
MAC operation storage is implementation-defined.
uint32_t psa_key_usage_t
Definition: crypto.h:64
psa_status_t psa_hash_verify(psa_hash_operation_t *operation, const uint8_t *hash, size_t hash_length)
psa_status_t psa_verify_set_context(psa_verify_operation_t *operation, const uint8_t *context, size_t context_length)
psa_status_t psa_verify_message(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *signature, size_t signature_length)
psa_hash_operation_t psa_hash_operation_init(void)
psa_status_t psa_key_derivation_set_capacity(psa_key_derivation_operation_t *operation, size_t capacity)
struct psa_sign_operation_s psa_sign_operation_t
Multi-part signature operations retain a key dependency.
psa_status_t psa_hash_setup(psa_hash_operation_t *operation, psa_algorithm_t alg)
psa_key_lifetime_t psa_get_key_lifetime(const psa_key_attributes_t *attributes)
psa_status_t psa_encapsulate(psa_key_id_t key, psa_algorithm_t alg, const psa_key_attributes_t *attributes, psa_key_id_t *output_key, uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length)
psa_status_t psa_get_key_attributes(psa_key_id_t key, psa_key_attributes_t *attributes)
void psa_set_key_bits(psa_key_attributes_t *attributes, size_t bits)
psa_status_t psa_key_derivation_input_bytes(psa_key_derivation_operation_t *operation, psa_key_derivation_step_t step, const uint8_t *data, size_t data_length)
psa_status_t psa_key_derivation_abort(psa_key_derivation_operation_t *operation)
psa_status_t psa_unwrap_key(const psa_key_attributes_t *attributes, psa_key_id_t wrapping_key, psa_algorithm_t alg, const uint8_t *data, size_t data_length, psa_key_id_t *key)
psa_status_t psa_generate_key(const psa_key_attributes_t *attributes, psa_key_id_t *key)
void psa_set_key_algorithm(psa_key_attributes_t *attributes, psa_algorithm_t alg)
psa_status_t psa_key_derivation_get_capacity(const psa_key_derivation_operation_t *operation, size_t *capacity)
psa_status_t psa_cipher_set_iv(psa_cipher_operation_t *operation, const uint8_t *iv, size_t iv_length)
psa_status_t psa_cipher_decrypt_setup(psa_cipher_operation_t *operation, psa_key_id_t key, psa_algorithm_t alg)
psa_status_t psa_mac_verify(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *mac, size_t mac_length)
psa_status_t psa_wrap_key(psa_key_id_t wrapping_key, psa_algorithm_t alg, psa_key_id_t key, uint8_t *data, size_t data_size, size_t *data_length)
psa_status_t psa_key_derivation_input_key(psa_key_derivation_operation_t *operation, psa_key_derivation_step_t step, psa_key_id_t key)
uint16_t psa_key_derivation_step_t
Definition: crypto.h:65
psa_status_t psa_cipher_abort(psa_cipher_operation_t *operation)
psa_status_t psa_hash_abort(psa_hash_operation_t *operation)
psa_status_t psa_aead_decrypt(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *nonce, size_t nonce_length, const uint8_t *additional_data, size_t additional_data_length, const uint8_t *ciphertext, size_t ciphertext_length, uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length)
psa_status_t psa_key_derivation_verify_key(psa_key_derivation_operation_t *operation, psa_key_id_t expected)
psa_status_t psa_key_derivation_setup(psa_key_derivation_operation_t *operation, psa_algorithm_t alg)
psa_status_t psa_key_derivation_input_integer(psa_key_derivation_operation_t *operation, psa_key_derivation_step_t step, uint64_t value)
psa_status_t psa_mac_sign_finish(psa_mac_operation_t *operation, uint8_t *mac, size_t mac_size, size_t *mac_length)
psa_status_t psa_generate_key_custom(const psa_key_attributes_t *attributes, const psa_custom_key_parameters_t *custom, const uint8_t *custom_data, size_t custom_data_length, psa_key_id_t *key)
uint32_t psa_algorithm_t
Definition: crypto.h:58
psa_status_t psa_cipher_update(psa_cipher_operation_t *operation, const uint8_t *input, size_t input_length, uint8_t *output, size_t output_size, size_t *output_length)
psa_status_t psa_sign_finish(psa_sign_operation_t *operation, uint8_t *signature, size_t signature_size, size_t *signature_length)
psa_status_t psa_attach_key(const psa_key_attributes_t *attributes, const uint8_t *label, size_t label_length, psa_key_id_t *key)
psa_status_t psa_cipher_encrypt_setup(psa_cipher_operation_t *operation, psa_key_id_t key, psa_algorithm_t alg)
psa_status_t psa_hash_compute(psa_algorithm_t alg, const uint8_t *input, size_t input_length, uint8_t *hash, size_t hash_size, size_t *hash_length)
psa_status_t psa_mac_verify_finish(psa_mac_operation_t *operation, const uint8_t *mac, size_t mac_length)
psa_status_t psa_mac_abort(psa_mac_operation_t *operation)
void psa_set_key_type(psa_key_attributes_t *attributes, psa_key_type_t type)
psa_key_usage_t psa_get_key_usage_flags(const psa_key_attributes_t *attributes)
psa_status_t psa_import_key(const psa_key_attributes_t *attributes, const uint8_t *data, size_t data_length, psa_key_id_t *key)
psa_status_t psa_key_derivation_output_key(const psa_key_attributes_t *attributes, psa_key_derivation_operation_t *operation, psa_key_id_t *key)
psa_status_t psa_aead_set_lengths(psa_aead_operation_t *operation, size_t ad_length, size_t plaintext_length)
void psa_set_key_lifetime(psa_key_attributes_t *attributes, psa_key_lifetime_t lifetime)
psa_status_t psa_aead_verify(psa_aead_operation_t *operation, uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length, const uint8_t *tag, size_t tag_length)
psa_key_derivation_operation_t psa_key_derivation_operation_init(void)
psa_mac_operation_t psa_mac_operation_init(void)
uint8_t psa_ecc_family_t
Definition: crypto.h:450
psa_status_t psa_aead_abort(psa_aead_operation_t *operation)
psa_status_t psa_key_agreement(psa_key_id_t private_key, const uint8_t *peer_key, size_t peer_key_length, psa_algorithm_t alg, const psa_key_attributes_t *attributes, psa_key_id_t *key)
psa_status_t psa_key_derivation_verify_bytes(psa_key_derivation_operation_t *operation, const uint8_t *expected_output, size_t output_length)
psa_status_t psa_verify_setup(psa_verify_operation_t *operation, psa_key_id_t key, psa_algorithm_t alg, const uint8_t *signature, size_t signature_length)
psa_status_t psa_destroy_key(psa_key_id_t key)
psa_status_t psa_aead_update(psa_aead_operation_t *operation, const uint8_t *input, size_t input_length, uint8_t *output, size_t output_size, size_t *output_length)
psa_status_t psa_mac_compute(psa_key_id_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, uint8_t *mac, size_t mac_size, size_t *mac_length)
psa_status_t psa_sign_abort(psa_sign_operation_t *operation)
AEAD storage is implementation-defined; all members are opaque.
Definition: crypto.h:871
uint32_t gcm_context[128]
Definition: crypto.h:873
uint8_t tag_length
Definition: crypto.h:885
uint8_t nonce_length
Definition: crypto.h:884
uint8_t counter[16]
Definition: crypto.h:878
uint32_t body_length
Definition: crypto.h:875
uint8_t pending[16]
Definition: crypto.h:880
uint8_t pending_length
Definition: crypto.h:882
uint32_t state
Definition: crypto.h:872
uint8_t stream[16]
Definition: crypto.h:881
uint32_t ad_length
Definition: crypto.h:874
uint32_t body_remaining
Definition: crypto.h:877
uint32_t ad_remaining
Definition: crypto.h:876
uint8_t hash[16]
Definition: crypto.h:879
uint8_t stream_offset
Definition: crypto.h:883
void * key_references
Definition: crypto.h:886
AES cipher state; applications must treat all members as opaque.
Definition: crypto.h:846
uint32_t state
Definition: crypto.h:847
uint8_t stream[16]
Definition: crypto.h:852
uint8_t direction
Definition: crypto.h:855
uint8_t chain[16]
Definition: crypto.h:850
void * key_references
Definition: crypto.h:857
uint8_t stream_offset
Definition: crypto.h:854
psa_algorithm_t alg
Definition: crypto.h:848
uint8_t pending_length
Definition: crypto.h:853
uint32_t aes_context[64]
Definition: crypto.h:849
uint8_t iv_set
Definition: crypto.h:856
uint8_t pending[16]
Definition: crypto.h:851
SharkSSL provider custom-generation parameters.
Definition: crypto.h:525
uint32_t flags
Definition: crypto.h:526
Hash operation storage is implementation-defined.
Definition: crypto.h:777
uint32_t context[52]
Definition: crypto.h:779
uint32_t state
Definition: crypto.h:778
Attributes are value objects; setters do not allocate resources.
Definition: crypto.h:509
psa_key_id_t id
Definition: crypto.h:511
psa_key_usage_t usage
Definition: crypto.h:514
psa_key_type_t type
Definition: crypto.h:512
psa_key_lifetime_t lifetime
Definition: crypto.h:510
psa_algorithm_t alg
Definition: crypto.h:515
size_t bits
Definition: crypto.h:513
Key-derivation state.
Definition: crypto.h:908
psa_key_id_t opaque_pbkdf2_key
Definition: crypto.h:930
psa_algorithm_t agreement_alg
Definition: crypto.h:911
uint8_t block_number
Definition: crypto.h:924
uint32_t sp800108_counter
Definition: crypto.h:913
uint32_t state
Definition: crypto.h:909
size_t opaque_salt_offset
Definition: crypto.h:932
uint32_t sp800108_bits
Definition: crypto.h:914
uint16_t salt_length
Definition: crypto.h:923
uint8_t block[64]
Definition: crypto.h:919
uint8_t other_secret[64]
Definition: crypto.h:921
uint8_t info[256]
Definition: crypto.h:922
uint8_t other_secret_length
Definition: crypto.h:927
uint32_t cost
Definition: crypto.h:912
uint8_t block_offset
Definition: crypto.h:925
uint8_t prk_length
Definition: crypto.h:926
size_t capacity
Definition: crypto.h:915
psa_key_derivation_step_t opaque_pbkdf2_step
Definition: crypto.h:931
uint8_t flags
Definition: crypto.h:928
void * key_references
Definition: crypto.h:929
uint8_t salt[128]
Definition: crypto.h:917
psa_algorithm_t alg
Definition: crypto.h:910
size_t info_length
Definition: crypto.h:916
uint8_t prk[128]
Definition: crypto.h:918
uint8_t prf_a[64]
Definition: crypto.h:920
MAC operation storage is implementation-defined.
Definition: crypto.h:831
void * key_references
Definition: crypto.h:835
psa_algorithm_t alg
Definition: crypto.h:833
uint32_t state
Definition: crypto.h:832
uint32_t context[96]
Definition: crypto.h:834
Multi-part signature operations retain a key dependency.
Definition: crypto.h:795
psa_key_id_t key
Definition: crypto.h:799
void * key_references
Definition: crypto.h:797
psa_hash_operation_t hash
Definition: crypto.h:796
uint32_t state
Definition: crypto.h:800
uint8_t flags
Definition: crypto.h:801
psa_algorithm_t alg
Definition: crypto.h:798
SharkSSL provider multipart signature-verification state, exposed as psa_verify_operation_t.
Definition: crypto.h:805
psa_algorithm_t alg
Definition: crypto.h:809
uint8_t signature[PSA_SIGNATURE_MAX_SIZE]
Definition: crypto.h:813
psa_key_id_t key
Definition: crypto.h:810
uint32_t state
Definition: crypto.h:811
psa_hash_operation_t hash
Definition: crypto.h:806
uint8_t flags
Definition: crypto.h:812
void * key_references
Definition: crypto.h:807
size_t signature_length
Definition: crypto.h:808