CryptoKeyKeyStore_PSA.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2022, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
110 #ifndef ti_drivers_CryptoKeyKeyStore_PSA__include
111 #define ti_drivers_CryptoKeyKeyStore_PSA__include
112 
113 #if (TFM_ENABLED == 0) || defined(TFM_PSA_API) /* TFM_PSA_API indicates this is a TF-M build */
114  #include <third_party/mbedcrypto/include/psa/crypto.h>
115 #else
116  #include <third_party/tfm/interface/include/psa/crypto.h>
117 #endif /* #if (TFM_ENABLED == 0) || defined(TFM_PSA_API) */
118 
119 #ifdef __cplusplus
120 extern "C" {
121 #endif
122 
124 typedef psa_key_usage_t KeyStore_PSA_KeyUsage;
125 
138 typedef psa_key_lifetime_t KeyStore_PSA_KeyLifetime;
139 
143 #define KEYSTORE_PSA_STATUS_SUCCESS ((int_fast16_t)PSA_SUCCESS)
144 
150 #define KEYSTORE_PSA_STATUS_GENERIC_ERROR ((int_fast16_t)PSA_ERROR_GENERIC_ERROR)
151 
159 #define KEYSTORE_PSA_STATUS_NOT_SUPPORTED ((int_fast16_t)PSA_ERROR_NOT_SUPPORTED)
160 
172 #define KEYSTORE_PSA_STATUS_NOT_PERMITTED ((int_fast16_t)PSA_ERROR_NOT_PERMITTED)
173 
176 #define KEYSTORE_PSA_STATUS_INVALID_KEY_ID ((int_fast16_t)PSA_ERROR_INVALID_HANDLE)
177 
188 #define KEYSTORE_PSA_STATUS_BUFFER_TOO_SMALL ((int_fast16_t)PSA_ERROR_BUFFER_TOO_SMALL)
189 
194 #define KEYSTORE_PSA_STATUS_ALREADY_EXISTS ((int_fast16_t)PSA_ERROR_ALREADY_EXISTS)
195 
200 #define KEYSTORE_PSA_STATUS_DOES_NOT_EXIST ((int_fast16_t)PSA_ERROR_DOES_NOT_EXIST)
201 
216 #define KEYSTORE_PSA_STATUS_BAD_STATE ((int_fast16_t)PSA_ERROR_BAD_STATE)
217 
227 #define KEYSTORE_PSA_STATUS_INVALID_ARGUMENT ((int_fast16_t)PSA_ERROR_INVALID_ARGUMENT)
228 
233 #define KEYSTORE_PSA_STATUS_INSUFFICIENT_MEMORY ((int_fast16_t)PSA_ERROR_INSUFFICIENT_MEMORY)
234 
242 #define KEYSTORE_PSA_STATUS_INSUFFICIENT_STORAGE ((int_fast16_t)PSA_ERROR_INSUFFICIENT_STORAGE)
243 
260 #define KEYSTORE_PSA_STATUS_COMMUNICATION_FAILURE ((int_fast16_t)PSA_ERROR_COMMUNICATION_FAILURE)
261 
285 #define KEYSTORE_PSA_STATUS_STORAGE_FAILURE ((int_fast16_t)PSA_ERROR_STORAGE_FAILURE)
286 
291 #define KEYSTORE_PSA_STATUS_HARDWARE_FAILURE ((int_fast16_t)PSA_ERROR_HARDWARE_FAILURE)
292 
310 #define KEYSTORE_PSA_STATUS_INSUFFICIENT_ENTROPY ((int_fast16_t)PSA_ERROR_INSUFFICIENT_ENTROPY)
311 
340 #define KEYSTORE_PSA_STATUS_CORRUPTION_DETECTED ((int_fast16_t)PSA_ERROR_CORRUPTION_DETECTED)
341 
352 #define KEYSTORE_PSA_STATUS_RESOURCE_UNAVAILABLE ((int_fast16_t)-250)
353 
356 typedef psa_key_type_t KeyStore_PSA_KeyType;
357 
362 #define KEYSTORE_PSA_KEY_TYPE_RAW_DATA ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_RAW_DATA)
363 
370 #define KEYSTORE_PSA_KEY_TYPE_HMAC ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_HMAC)
371 
377 #define KEYSTORE_PSA_KEY_TYPE_DERIVE ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_DERIVE)
378 
384 #define KEYSTORE_PSA_KEY_TYPE_AES ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_AES)
385 
395 #define KEYSTORE_PSA_KEY_TYPE_DES ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_DES)
396 
399 #define KEYSTORE_PSA_KEY_TYPE_CAMELLIA ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_CAMELLIA)
400 
405 #define KEYSTORE_PSA_KEY_TYPE_ARC4 ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_ARC4)
406 
414 #define KEYSTORE_PSA_KEY_TYPE_CHACHA20 ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_CHACHA20)
415 
420 #define KEYSTORE_PSA_KEY_TYPE_RSA_PUBLIC_KEY ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_RSA_PUBLIC_KEY)
421 
425 #define KEYSTORE_PSA_KEY_TYPE_RSA_KEY_PAIR ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_RSA_KEY_PAIR)
426 
427 #define PSA_KEY_TYPE_IS_RSA(type) (PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(type) == PSA_KEY_TYPE_RSA_PUBLIC_KEY)
428 
429 #define KEYSTORE_PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE)
430 #define KEYSTORE_PSA_KEY_TYPE_ECC_KEY_PAIR_BASE ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_ECC_KEY_PAIR_BASE)
431 
440 typedef psa_algorithm_t KeyStore_PSA_Algorithm;
441 
443 #define KEYSTORE_PSA_ALG_SHA_224 ((KeyStore_PSA_Algorithm)PSA_ALG_SHA_224)
444 
445 #define KEYSTORE_PSA_ALG_SHA_256 ((KeyStore_PSA_Algorithm)PSA_ALG_SHA_256)
446 
447 #define KEYSTORE_PSA_ALG_SHA_384 ((KeyStore_PSA_Algorithm)PSA_ALG_SHA_384)
448 
449 #define KEYSTORE_PSA_ALG_SHA_512 ((KeyStore_PSA_Algorithm)PSA_ALG_SHA_512)
450 
451 #define KEYSTORE_PSA_ALG_SHA_512_224 ((KeyStore_PSA_Algorithm)PSA_ALG_SHA_512_224)
452 
453 #define KEYSTORE_PSA_ALG_SHA_512_256 ((KeyStore_PSA_Algorithm)PSA_ALG_SHA_512_256)
454 
460 #define KEYSTORE_PSA_ALG_CBC_MAC ((KeyStore_PSA_Algorithm)PSA_ALG_CBC_MAC)
461 
462 #define KEYSTORE_PSA_ALG_CMAC ((KeyStore_PSA_Algorithm)PSA_ALG_CMAC)
463 
471 #define KEYSTORE_PSA_ALG_CTR ((KeyStore_PSA_Algorithm)PSA_ALG_CTR)
472 
480 #define KEYSTORE_PSA_ALG_CBC_NO_PADDING ((KeyStore_PSA_Algorithm)PSA_ALG_CBC_NO_PADDING)
481 
486 #define KEYSTORE_PSA_ALG_CCM ((KeyStore_PSA_Algorithm)PSA_ALG_CCM)
487 
492 #define KEYSTORE_PSA_ALG_GCM ((KeyStore_PSA_Algorithm)PSA_ALG_GCM)
493 
503 #define KEYSTORE_PSA_ALG_CHACHA20_POLY1305 ((KeyStore_PSA_Algorithm)PSA_ALG_CHACHA20_POLY1305)
504 
530 #define KEYSTORE_PSA_ALG_ECDH ((KeyStore_PSA_Algorithm)PSA_ALG_ECDH)
531 
532 /* The encoding of curve identifiers is currently aligned with the
533  * TLS Supported Groups Registry (formerly known as the
534  * TLS EC Named Curve Registry)
535  * https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-8
536  * The values are defined by RFC 8422 and RFC 7027. */
537 #define KEYSTORE_PSA_ECC_CURVE_SECT163K1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECT163K1)
538 #define KEYSTORE_PSA_ECC_CURVE_SECT163R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECT163R1)
539 #define KEYSTORE_PSA_ECC_CURVE_SECT163R2 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECT163R2)
540 #define KEYSTORE_PSA_ECC_CURVE_SECT193R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECT193R1)
541 #define KEYSTORE_PSA_ECC_CURVE_SECT193R2 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECT193R2)
542 #define KEYSTORE_PSA_ECC_CURVE_SECT233K1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECT233K1)
543 #define KEYSTORE_PSA_ECC_CURVE_SECT233R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECT233R1)
544 #define KEYSTORE_PSA_ECC_CURVE_SECT239K1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECT239K1)
545 #define KEYSTORE_PSA_ECC_CURVE_SECT283K1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECT283K1)
546 #define KEYSTORE_PSA_ECC_CURVE_SECT283R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECT283R1)
547 #define KEYSTORE_PSA_ECC_CURVE_SECT409K1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECT409K1)
548 #define KEYSTORE_PSA_ECC_CURVE_SECT409R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECT409R1)
549 #define KEYSTORE_PSA_ECC_CURVE_SECT571K1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECT571K1)
550 #define KEYSTORE_PSA_ECC_CURVE_SECT571R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECT571R1)
551 #define KEYSTORE_PSA_ECC_CURVE_SECP160K1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECP160K1)
552 #define KEYSTORE_PSA_ECC_CURVE_SECP160R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECP160R1)
553 #define KEYSTORE_PSA_ECC_CURVE_SECP160R2 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECP160R2)
554 #define KEYSTORE_PSA_ECC_CURVE_SECP192K1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECP192K1)
555 #define KEYSTORE_PSA_ECC_CURVE_SECP192R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECP192R1)
556 #define KEYSTORE_PSA_ECC_CURVE_SECP224K1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECP224K1)
557 #define KEYSTORE_PSA_ECC_CURVE_SECP224R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECP224R1)
558 #define KEYSTORE_PSA_ECC_CURVE_SECP256K1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECP256K1)
559 #define KEYSTORE_PSA_ECC_CURVE_SECP256R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECP256R1)
560 #define KEYSTORE_PSA_ECC_CURVE_SECP384R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECP384R1)
561 #define KEYSTORE_PSA_ECC_CURVE_SECP521R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_SECP521R1)
562 #define KEYSTRORE_ECC_CURVE_BRAINPOOL_P256R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_BRAINPOOL_P256R1)
563 #define KEYSTRORE_ECC_CURVE_BRAINPOOL_P384R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_BRAINPOOL_P384R1)
564 #define KEYSTRORE_ECC_CURVE_BRAINPOOL_P512R1 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_BRAINPOOL_P512R1)
565 
571 #define KEYSTORE_PSA_ECC_CURVE_CURVE25519 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_CURVE25519)
572 
578 #define KEYSTORE_PSA_ECC_CURVE_CURVE448 ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_CURVE448)
579 
585 #define KEYSTORE_PSA_ECC_CURVE_VENDOR_MIN ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_VENDOR_MIN)
586 
591 #define KEYSTORE_PSA_ECC_CURVE_VENDOR_MAX ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_VENDOR_MAX)
592 
593 /* Volatile Key Limit [1, PSA_KEY_SLOT_COUNT] for TF-Mv1.1
594  * Upper limit for volatile keys, PSA_KEY_SLOT_COUNT (32) is the size of global slot array in mbedcrypto3.1
595  */
596 #if (TFM_ENABLED == 0) || defined(TFM_PSA_API) /* TFM_PSA_API indicates this is a TF-M build */
597  #define KEYSTORE_PSA_MAX_VOLATILE_KEY_ID PSA_KEY_SLOT_COUNT
598 #else
599  /*
600  * PSA_KEY_SLOT_COUNT is not available in TF-M's crypto.h so we must
601  * hardcode it to match the value in mbedCrypto's header.
602  */
603  #define KEYSTORE_PSA_MAX_VOLATILE_KEY_ID 32
604 #endif
605 
606 /* Macro to obtain size of struct member */
607 #define MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
608 
616 #define KEYSTORE_PSA_KEY_LIFETIME_VOLATILE ((KeyStore_PSA_KeyLifetime)PSA_KEY_LIFETIME_VOLATILE)
617 
630 #define KEYSTORE_PSA_KEY_LIFETIME_PERSISTENT ((KeyStore_PSA_KeyLifetime)PSA_KEY_LIFETIME_PERSISTENT)
631 
634 #define KEYSTORE_PSA_KEY_ID_NULL ((KeyStore_PSA_KeyFileId)0x0)
635 
638 #define KEYSTORE_PSA_KEY_ID_USER_MIN ((KeyStore_PSA_KeyFileId)PSA_KEY_ID_USER_MIN)
639 
642 #define KEYSTORE_PSA_KEY_ID_PERSISTENT_USER_MIN 0x41
643 
651 #define KEYSTORE_PSA_KEY_ID_WITH_CERTIFICATE_USER_MAX 0x1fffffff
652 
657 #define KEYSTORE_PSA_KEY_ID_CERTIFICATE_BIT (1 << 29)
658 
661 #define KEYSTORE_PSA_KEY_ID_VENDOR_MIN ((KeyStore_PSA_KeyFileId)PSA_KEY_ID_VENDOR_MIN)
662 
665 #define KEYSTORE_PSA_KEY_ID_VENDOR_MAX ((KeyStore_PSA_KeyFileId)PSA_KEY_ID_VENDOR_MAX)
666 
669 #define KEYSTORE_PSA_DEFAULT_OWNER -1
670 
688 #define KEYSTORE_PSA_KEY_USAGE_EXPORT ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_EXPORT)
689 
704 #define KEYSTORE_PSA_KEY_USAGE_COPY ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_COPY)
705 
715 #define KEYSTORE_PSA_KEY_USAGE_ENCRYPT ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_ENCRYPT)
716 
726 #define KEYSTORE_PSA_KEY_USAGE_DECRYPT ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_DECRYPT)
727 
736 #define KEYSTORE_PSA_KEY_USAGE_SIGN_HASH ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_SIGN_HASH)
737 
746 #define KEYSTORE_PSA_KEY_USAGE_VERIFY_HASH ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_VERIFY_HASH)
747 
750 #define KEYSTORE_PSA_KEY_USAGE_DERIVE ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_DERIVE)
751 
753 #if (TFM_ENABLED == 0) || defined(TFM_PSA_API) /* TFM_PSA_API indicates this is a TF-M build */
754 
756  #if defined(MBEDTLS_PSA_CRYPTO_KEY_FILE_ID_ENCODES_OWNER)
757 /* Building for the PSA Crypto service on a PSA platform. */
758 /* A key owner is a PSA partition identifier. */
759 typedef psa_key_owner_id_t KeyStore_PSA_key_owner_id_t;
760  #endif /* defined(MBEDTLS_PSA_CRYPTO_KEY_FILE_ID_ENCODES_OWNER) */
761 
762 typedef psa_key_file_id_t KeyStore_PSA_KeyFileId;
763 
866 typedef psa_key_attributes_t KeyStore_PSA_KeyAttributes;
867 
868  #define KEYSTORE_PSA_KEY_ATTRIBUTES_INIT PSA_KEY_ATTRIBUTES_INIT
869 
875  #if defined(MBEDTLS_PSA_CRYPTO_KEY_FILE_ID_ENCODES_OWNER)
876  #define GET_KEY_ID(keyID, ID) \
877  keyID.key_id = ID; \
878  keyID.owner = KEYSTORE_PSA_DEFAULT_OWNER;
879 
880  #define SET_KEY_ID(ID, keyID) ID = keyID.key_id
881  #else
882  #define GET_KEY_ID(keyID, ID) keyID = ID
883 
884  #define SET_KEY_ID(ID, keyID) ID = keyID
885  #endif /* defined(MBEDTLS_PSA_CRYPTO_KEY_FILE_ID_ENCODES_OWNER) */
886 
887 #else
888 
898 typedef psa_key_id_t KeyStore_PSA_KeyFileId;
899 
901  #define GET_KEY_ID(keyID, ID) keyID = ID
902  #define SET_KEY_ID(ID, keyID) ID = keyID
903 
904 /* This is the client view of the `key_attributes` structure. Only
905  * fields which need to be set by the PSA crypto client are present.
906  * The PSA crypto service will maintain a different version of the
907  * data structure internally. */
908 typedef struct psa_client_key_attributes_s KeyStore_PSA_KeyAttributes;
909 
910  #define KEYSTORE_PSA_KEY_ATTRIBUTES_INIT PSA_CLIENT_KEY_ATTRIBUTES_INIT
911 #endif /* #if (TFM_ENABLED == 0) || defined(TFM_PSA_API) */
912 
923 #define KEYSTORE_PSA_PREPROVISIONED_AREA_ADDR 0x0000
924 
927 #define KEYSTORE_PSA_PREPROVISIONED_AREA_SIZE (0x700) /* 1792 B */
928 
934 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_EXPORT_FLAG 0xAAAA
935 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_EXPORT_FLAG_LENGTH (sizeof(KEYSTORE_PSA_PRE_PROVISIONED_KEY_EXPORT_FLAG))
936 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_NO_EXPORT_FLAG 0xA5A5
937 
941 #define KEYSTORE_PSA_PREPROVISIONED_KEYS_EMPTY 0xFFFF
942 
946 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_MAGIC_HEADER "HUK\0KEY"
947 #define KEYSTORE_PSA_PRE_PROVISIONED_KEYS_END 0
948 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_MAGIC_HEADER_LENGTH (sizeof(KEYSTORE_PSA_PRE_PROVISIONED_KEY_MAGIC_HEADER))
949 #define KEYSTORE_PSA_PRE_PROVISIONED_KEYS_END_LENGTH (sizeof(KEYSTORE_PSA_PRE_PROVISIONED_KEYS_END))
950 #define KEYSTORE_PSA_MAX_PREPROVISIONED_KEYS 0x10
951 
955 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_VALID_LIFETIME 0xAAAA
956 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_INVALID_LIFETIME 0x8888
957 
964 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_ID_MAX 0x40
965 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_ID_MIN 0x21
966 #define KEYSTORE_PSA_PRE_PROVISIONED_CERTIFICATE_ID_MAX \
967  (KEYSTORE_PSA_PRE_PROVISIONED_KEY_ID_MAX | KEYSTORE_PSA_KEY_ID_CERTIFICATE_BIT)
968 #define KEYSTORE_PSA_PRE_PROVISIONED_CERTIFICATE_ID_MIN \
969  (KEYSTORE_PSA_PRE_PROVISIONED_KEY_ID_MIN | KEYSTORE_PSA_KEY_ID_CERTIFICATE_BIT)
970 
977 #define KEYSTORE_PSA_PRE_PROVISIONED_ATTESTATION_PUB_KEY_ID 0x40
978 #define KEYSTORE_PSA_PRE_PROVISIONED_ATTESTATION_PRI_KEY_ID 0X3F
979 #define KEYSTORE_PSA_PRE_PROVISIONED_ATTESTATION_CERTIFICATE_ID \
980  (KEYSTORE_PSA_PRE_PROVISIONED_ATTESTATION_PUB_KEY_ID | KEYSTORE_PSA_KEY_ID_CERTIFICATE_BIT)
981 
992 typedef struct
993 {
995  uint32_t lifetime;
996  KeyStore_PSA_KeyFileId id;
997  uint32_t export;
998  KeyStore_PSA_Algorithm alg;
999  KeyStore_PSA_KeyUsage usage;
1000  uint32_t keyLength;
1002 
1006 #define KEYSTORE_PRE_PROVISIONED_KEY_METADATA_SIZE sizeof(KeyStore_PreProvisionedKeyMetaData)
1007 
1015 typedef struct
1016 {
1018  uint8_t *keyMaterial;
1019  uint32_t fletcher;
1021 
1025 #define KEYSTORE_PSA_PREPROVISIONED_KEY_FORMAT_INIT \
1026  { \
1027  KEYSTORE_PSA_PRE_PROVISIONED_KEY_MAGIC_HEADER, 0, KEYSTORE_PSA_PRE_PROVISIONED_KEY_EXPORT_FLAG, 0, 0, 0, 0, \
1028  KEYSTORE_PSA_PRE_PROVISIONED_KEYS_END, 0 \
1029  }
1030 
1043 typedef struct
1044 {
1045  uint8_t *addr;
1046  KeyStore_PSA_KeyFileId id;
1047  KeyStore_PSA_Algorithm alg;
1048  KeyStore_PSA_KeyUsage usage;
1049  uint32_t export;
1050  uint32_t keyLength;
1052 
1074 void KeyStore_PSA_setKeyId(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_KeyFileId key);
1075 
1102 void KeyStore_PSA_setKeyLifetime(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_KeyLifetime lifetime);
1103 
1117 KeyStore_PSA_KeyFileId KeyStore_PSA_getKeyId(KeyStore_PSA_KeyAttributes *attributes);
1118 
1130 KeyStore_PSA_KeyLifetime KeyStore_PSA_getKeyLifetime(KeyStore_PSA_KeyAttributes *attributes);
1131 
1149 void KeyStore_PSA_setKeyUsageFlags(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_KeyUsage usage_flags);
1150 
1162 KeyStore_PSA_KeyUsage KeyStore_PSA_getKeyUsageFlags(KeyStore_PSA_KeyAttributes *attributes);
1163 
1185 void KeyStore_PSA_setKeyAlgorithm(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_Algorithm alg);
1186 
1198 KeyStore_PSA_Algorithm KeyStore_PSA_getKeyAlgorithm(KeyStore_PSA_KeyAttributes *attributes);
1199 
1215 void KeyStore_PSA_setKeyType(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_KeyType type);
1216 
1232 void KeyStore_PSA_setKeyBits(KeyStore_PSA_KeyAttributes *attributes, size_t bits);
1233 
1245 KeyStore_PSA_KeyType KeyStore_PSA_getKeyType(KeyStore_PSA_KeyAttributes *attributes);
1246 
1257 size_t KeyStore_PSA_getKeyBits(KeyStore_PSA_KeyAttributes *attributes);
1258 
1271 void KeyStore_PSA_resetKeyAttributes(KeyStore_PSA_KeyAttributes *attributes);
1272 
1300 int_fast16_t KeyStore_PSA_exportCertificate(KeyStore_PSA_KeyFileId key,
1301  uint8_t *data,
1302  size_t dataSize,
1303  size_t *dataLength);
1304 
1362 int_fast16_t KeyStore_PSA_exportPublicKey(KeyStore_PSA_KeyFileId key,
1363  uint8_t *data,
1364  size_t dataSize,
1365  size_t *dataLength);
1366 
1424 int_fast16_t KeyStore_PSA_exportKey(KeyStore_PSA_KeyFileId key, uint8_t *data, size_t dataSize, size_t *dataLength);
1425 
1476 int_fast16_t KeyStore_PSA_importCertificate(KeyStore_PSA_KeyAttributes *attributes,
1477  KeyStore_PSA_KeyFileId *key,
1478  uint8_t *data,
1479  size_t dataLength);
1480 
1547 int_fast16_t KeyStore_PSA_importKey(KeyStore_PSA_KeyAttributes *attributes,
1548  uint8_t *data,
1549  size_t dataLength,
1550  KeyStore_PSA_KeyFileId *key);
1551 
1580 int_fast16_t KeyStore_PSA_getKeyAttributes(KeyStore_PSA_KeyFileId key, KeyStore_PSA_KeyAttributes *attributes);
1581 
1624 int_fast16_t KeyStore_PSA_purgeKey(KeyStore_PSA_KeyFileId key);
1625 
1664 int_fast16_t KeyStore_PSA_destroyCertificate(KeyStore_PSA_KeyFileId key);
1665 
1721 int_fast16_t KeyStore_PSA_destroyKey(KeyStore_PSA_KeyFileId key);
1722 
1723 #ifdef __cplusplus
1724 }
1725 #endif
1726 
1727 #endif /* ti_drivers_KeyStore_PSA__include */
Structure for storing pre-provisioned key&#39;s meta data.
Definition: CryptoKeyKeyStore_PSA.h:992
psa_key_usage_t KeyStore_PSA_KeyUsage
Encoding of permitted usage on a key.
Definition: CryptoKeyKeyStore_PSA.h:124
KeyStore_PSA_KeyUsage KeyStore_PSA_getKeyUsageFlags(KeyStore_PSA_KeyAttributes *attributes)
Retrieve the usage flags from key attributes.
int_fast16_t KeyStore_PSA_destroyKey(KeyStore_PSA_KeyFileId key)
Destroy a key.
KeyStore_PSA_KeyUsage usage
Definition: CryptoKeyKeyStore_PSA.h:999
size_t KeyStore_PSA_getKeyBits(KeyStore_PSA_KeyAttributes *attributes)
Retrieve the key size from key attributes.
int_fast16_t KeyStore_PSA_importCertificate(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_KeyFileId *key, uint8_t *data, size_t dataLength)
Import a certificate in binary format.
int_fast16_t KeyStore_PSA_destroyCertificate(KeyStore_PSA_KeyFileId key)
Destroy a certificate associated with a key.
Structure for storing IDs of pre-provisioned keys.
Definition: CryptoKeyKeyStore_PSA.h:1043
uint32_t keyLength
Definition: CryptoKeyKeyStore_PSA.h:1050
void KeyStore_PSA_setKeyId(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_KeyFileId key)
Declare a key as persistent and set its key identifier.
Structure for storing pre-provisioned keys and its meta data.
Definition: CryptoKeyKeyStore_PSA.h:1015
KeyStore_PSA_KeyFileId id
Definition: CryptoKeyKeyStore_PSA.h:1046
void KeyStore_PSA_setKeyType(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_KeyType type)
Declare the type of a key.
uint32_t export
Definition: CryptoKeyKeyStore_PSA.h:997
psa_key_file_id_t KeyStore_PSA_KeyFileId
Definition: CryptoKeyKeyStore_PSA.h:762
void KeyStore_PSA_resetKeyAttributes(KeyStore_PSA_KeyAttributes *attributes)
Reset a key attribute structure to a freshly initialized state.
void KeyStore_PSA_setKeyAlgorithm(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_Algorithm alg)
Declare the permitted algorithm policy for a key.
KeyStore_PSA_KeyFileId KeyStore_PSA_getKeyId(KeyStore_PSA_KeyAttributes *attributes)
Retrieve the key identifier from key attributes.
psa_key_type_t KeyStore_PSA_KeyType
Encoding of a key type.
Definition: CryptoKeyKeyStore_PSA.h:356
void KeyStore_PSA_setKeyLifetime(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_KeyLifetime lifetime)
Set the location of a persistent key.
int_fast16_t KeyStore_PSA_purgeKey(KeyStore_PSA_KeyFileId key)
Remove non-essential copies of key material from memory.
KeyStore_PSA_KeyLifetime KeyStore_PSA_getKeyLifetime(KeyStore_PSA_KeyAttributes *attributes)
Retrieve the lifetime from key attributes.
KeyStore_PSA_Algorithm alg
Definition: CryptoKeyKeyStore_PSA.h:998
KeyStore_PSA_Algorithm alg
Definition: CryptoKeyKeyStore_PSA.h:1047
uint8_t * addr
Definition: CryptoKeyKeyStore_PSA.h:1045
uint32_t export
Definition: CryptoKeyKeyStore_PSA.h:1049
int_fast16_t KeyStore_PSA_exportCertificate(KeyStore_PSA_KeyFileId key, uint8_t *data, size_t dataSize, size_t *dataLength)
Export a certificate in binary format.
KeyStore_PSA_KeyUsage usage
Definition: CryptoKeyKeyStore_PSA.h:1048
uint32_t lifetime
Definition: CryptoKeyKeyStore_PSA.h:995
psa_algorithm_t KeyStore_PSA_Algorithm
Encoding of a cryptographic algorithm.
Definition: CryptoKeyKeyStore_PSA.h:440
uint32_t keyLength
Definition: CryptoKeyKeyStore_PSA.h:1000
int_fast16_t KeyStore_PSA_exportPublicKey(KeyStore_PSA_KeyFileId key, uint8_t *data, size_t dataSize, size_t *dataLength)
Export a public key or the public part of a key pair in binary format.
psa_key_lifetime_t KeyStore_PSA_KeyLifetime
Definition: CryptoKeyKeyStore_PSA.h:138
int_fast16_t KeyStore_PSA_exportKey(KeyStore_PSA_KeyFileId key, uint8_t *data, size_t dataSize, size_t *dataLength)
Export a key in binary format.
KeyStore_PSA_Algorithm KeyStore_PSA_getKeyAlgorithm(KeyStore_PSA_KeyAttributes *attributes)
Retrieve the algorithm policy from key attributes.
KeyStore_PreProvisionedKeyMetaData meta
Definition: CryptoKeyKeyStore_PSA.h:1017
uint8_t * keyMaterial
Definition: CryptoKeyKeyStore_PSA.h:1018
int_fast16_t KeyStore_PSA_getKeyAttributes(KeyStore_PSA_KeyFileId key, KeyStore_PSA_KeyAttributes *attributes)
Retrieve the attributes of a key.
KeyStore_PSA_KeyFileId id
Definition: CryptoKeyKeyStore_PSA.h:996
int_fast16_t KeyStore_PSA_importKey(KeyStore_PSA_KeyAttributes *attributes, uint8_t *data, size_t dataLength, KeyStore_PSA_KeyFileId *key)
Import a key in binary format.
KeyStore_PSA_KeyType KeyStore_PSA_getKeyType(KeyStore_PSA_KeyAttributes *attributes)
Retrieve the key type from key attributes.
void KeyStore_PSA_setKeyUsageFlags(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_KeyUsage usage_flags)
Declare usage flags for a key.
#define KEYSTORE_PSA_PRE_PROVISIONED_KEY_MAGIC_HEADER_LENGTH
Definition: CryptoKeyKeyStore_PSA.h:948
uint32_t fletcher
Definition: CryptoKeyKeyStore_PSA.h:1019
psa_key_attributes_t KeyStore_PSA_KeyAttributes
Definition: CryptoKeyKeyStore_PSA.h:866
void KeyStore_PSA_setKeyBits(KeyStore_PSA_KeyAttributes *attributes, size_t bits)
Declare the size of a key.
© Copyright 1995-2023, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale