CryptoKeyKeyStore_PSA.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2022-2023, 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 
109 #ifndef ti_drivers_CryptoKeyKeyStore_PSA__include
110 #define ti_drivers_CryptoKeyKeyStore_PSA__include
111 
112 #if (TFM_ENABLED == 0) || defined(TFM_BUILD) /* TFM_BUILD indicates this is a TF-M build */
113  #include <third_party/mbedtls/include/psa/crypto.h>
114  #include <third_party/mbedtls/include/mbedtls/build_info.h>
115  #include <third_party/mbedtls/include/mbedtls/private_access.h>
116 #else
117  #include <third_party/tfm/interface/include/psa/crypto.h>
118 #endif /* #if (TFM_ENABLED == 0) || defined(TFM_BUILD) */
119 
120 #ifdef __cplusplus
121 extern "C" {
122 #endif
123 
125 typedef psa_key_usage_t KeyStore_PSA_KeyUsage;
126 
139 typedef psa_key_lifetime_t KeyStore_PSA_KeyLifetime;
140 
144 #define KEYSTORE_PSA_STATUS_SUCCESS ((int_fast16_t)PSA_SUCCESS)
145 
151 #define KEYSTORE_PSA_STATUS_GENERIC_ERROR ((int_fast16_t)PSA_ERROR_GENERIC_ERROR)
152 
160 #define KEYSTORE_PSA_STATUS_NOT_SUPPORTED ((int_fast16_t)PSA_ERROR_NOT_SUPPORTED)
161 
173 #define KEYSTORE_PSA_STATUS_NOT_PERMITTED ((int_fast16_t)PSA_ERROR_NOT_PERMITTED)
174 
177 #define KEYSTORE_PSA_STATUS_INVALID_KEY_ID ((int_fast16_t)PSA_ERROR_INVALID_HANDLE)
178 
189 #define KEYSTORE_PSA_STATUS_BUFFER_TOO_SMALL ((int_fast16_t)PSA_ERROR_BUFFER_TOO_SMALL)
190 
195 #define KEYSTORE_PSA_STATUS_ALREADY_EXISTS ((int_fast16_t)PSA_ERROR_ALREADY_EXISTS)
196 
201 #define KEYSTORE_PSA_STATUS_DOES_NOT_EXIST ((int_fast16_t)PSA_ERROR_DOES_NOT_EXIST)
202 
217 #define KEYSTORE_PSA_STATUS_BAD_STATE ((int_fast16_t)PSA_ERROR_BAD_STATE)
218 
228 #define KEYSTORE_PSA_STATUS_INVALID_ARGUMENT ((int_fast16_t)PSA_ERROR_INVALID_ARGUMENT)
229 
234 #define KEYSTORE_PSA_STATUS_INSUFFICIENT_MEMORY ((int_fast16_t)PSA_ERROR_INSUFFICIENT_MEMORY)
235 
243 #define KEYSTORE_PSA_STATUS_INSUFFICIENT_STORAGE ((int_fast16_t)PSA_ERROR_INSUFFICIENT_STORAGE)
244 
261 #define KEYSTORE_PSA_STATUS_COMMUNICATION_FAILURE ((int_fast16_t)PSA_ERROR_COMMUNICATION_FAILURE)
262 
286 #define KEYSTORE_PSA_STATUS_STORAGE_FAILURE ((int_fast16_t)PSA_ERROR_STORAGE_FAILURE)
287 
292 #define KEYSTORE_PSA_STATUS_HARDWARE_FAILURE ((int_fast16_t)PSA_ERROR_HARDWARE_FAILURE)
293 
311 #define KEYSTORE_PSA_STATUS_INSUFFICIENT_ENTROPY ((int_fast16_t)PSA_ERROR_INSUFFICIENT_ENTROPY)
312 
341 #define KEYSTORE_PSA_STATUS_CORRUPTION_DETECTED ((int_fast16_t)PSA_ERROR_CORRUPTION_DETECTED)
342 
353 #define KEYSTORE_PSA_STATUS_RESOURCE_UNAVAILABLE ((int_fast16_t)-250)
354 
357 typedef psa_key_type_t KeyStore_PSA_KeyType;
358 
363 #define KEYSTORE_PSA_KEY_TYPE_RAW_DATA ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_RAW_DATA)
364 
371 #define KEYSTORE_PSA_KEY_TYPE_HMAC ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_HMAC)
372 
378 #define KEYSTORE_PSA_KEY_TYPE_DERIVE ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_DERIVE)
379 
385 #define KEYSTORE_PSA_KEY_TYPE_AES ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_AES)
386 
396 #define KEYSTORE_PSA_KEY_TYPE_DES ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_DES)
397 
400 #define KEYSTORE_PSA_KEY_TYPE_CAMELLIA ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_CAMELLIA)
401 
406 #define KEYSTORE_PSA_KEY_TYPE_ARC4 ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_ARC4)
407 
415 #define KEYSTORE_PSA_KEY_TYPE_CHACHA20 ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_CHACHA20)
416 
421 #define KEYSTORE_PSA_KEY_TYPE_RSA_PUBLIC_KEY ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_RSA_PUBLIC_KEY)
422 
426 #define KEYSTORE_PSA_KEY_TYPE_RSA_KEY_PAIR ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_RSA_KEY_PAIR)
427 
428 #define PSA_KEY_TYPE_IS_RSA(type) (PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(type) == PSA_KEY_TYPE_RSA_PUBLIC_KEY)
429 
430 #define KEYSTORE_PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE)
431 #define KEYSTORE_PSA_KEY_TYPE_ECC_KEY_PAIR_BASE ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_ECC_KEY_PAIR_BASE)
432 
445 #define KEYSTORE_PSA_KEY_TYPE_PASSWORD ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_PASSWORD)
446 
453 #define KEYSTORE_PSA_KEY_TYPE_PASSWORD_HASH ((KeyStore_PSA_KeyType)PSA_KEY_TYPE_PASSWORD_HASH)
454 
463 typedef psa_algorithm_t KeyStore_PSA_Algorithm;
464 
466 #define KEYSTORE_PSA_ALG_SHA_224 ((KeyStore_PSA_Algorithm)PSA_ALG_SHA_224)
467 
468 #define KEYSTORE_PSA_ALG_SHA_256 ((KeyStore_PSA_Algorithm)PSA_ALG_SHA_256)
469 
470 #define KEYSTORE_PSA_ALG_SHA_384 ((KeyStore_PSA_Algorithm)PSA_ALG_SHA_384)
471 
472 #define KEYSTORE_PSA_ALG_SHA_512 ((KeyStore_PSA_Algorithm)PSA_ALG_SHA_512)
473 
474 #define KEYSTORE_PSA_ALG_SHA_512_224 ((KeyStore_PSA_Algorithm)PSA_ALG_SHA_512_224)
475 
476 #define KEYSTORE_PSA_ALG_SHA_512_256 ((KeyStore_PSA_Algorithm)PSA_ALG_SHA_512_256)
477 
483 #define KEYSTORE_PSA_ALG_CBC_MAC ((KeyStore_PSA_Algorithm)PSA_ALG_CBC_MAC)
484 
485 #define KEYSTORE_PSA_ALG_CMAC ((KeyStore_PSA_Algorithm)PSA_ALG_CMAC)
486 
494 #define KEYSTORE_PSA_ALG_CTR ((KeyStore_PSA_Algorithm)PSA_ALG_CTR)
495 
510 #define KEYSTORE_PSA_ALG_ECB_NO_PADDING ((KeyStore_PSA_Algorithm)PSA_ALG_ECB_NO_PADDING)
511 
519 #define KEYSTORE_PSA_ALG_CBC_NO_PADDING ((KeyStore_PSA_Algorithm)PSA_ALG_CBC_NO_PADDING)
520 
525 #define KEYSTORE_PSA_ALG_CCM ((KeyStore_PSA_Algorithm)PSA_ALG_CCM)
526 
531 #define KEYSTORE_PSA_ALG_GCM ((KeyStore_PSA_Algorithm)PSA_ALG_GCM)
532 
542 #define KEYSTORE_PSA_ALG_CHACHA20_POLY1305 ((KeyStore_PSA_Algorithm)PSA_ALG_CHACHA20_POLY1305)
543 
569 #define KEYSTORE_PSA_ALG_ECDH ((KeyStore_PSA_Algorithm)PSA_ALG_ECDH)
570 
572 #define KEYSTORE_PSA_ALG_PAKE ((KeyStore_PSA_Algorithm)PSA_ALG_JPAKE)
573 
574 /* The encoding of curve identifiers is currently aligned with the
575  * TLS Supported Groups Registry (formerly known as the
576  * TLS EC Named Curve Registry)
577  * https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-8
578  * The values are defined by RFC 8422 and RFC 7027. */
579 #define KEYSTORE_PSA_ECC_CURVE_SECT163K1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_K1)
580 #define KEYSTORE_PSA_ECC_CURVE_SECT163R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R1)
581 #define KEYSTORE_PSA_ECC_CURVE_SECT163R2 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R2)
582 #define KEYSTORE_PSA_ECC_CURVE_SECT193R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R1)
583 #define KEYSTORE_PSA_ECC_CURVE_SECT193R2 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R2)
584 #define KEYSTORE_PSA_ECC_CURVE_SECT233K1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_K1)
585 #define KEYSTORE_PSA_ECC_CURVE_SECT233R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R1)
586 #define KEYSTORE_PSA_ECC_CURVE_SECT239K1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_K1)
587 #define KEYSTORE_PSA_ECC_CURVE_SECT283K1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_K1)
588 #define KEYSTORE_PSA_ECC_CURVE_SECT283R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R1)
589 #define KEYSTORE_PSA_ECC_CURVE_SECT409K1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_K1)
590 #define KEYSTORE_PSA_ECC_CURVE_SECT409R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R1)
591 #define KEYSTORE_PSA_ECC_CURVE_SECT571K1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_K1)
592 #define KEYSTORE_PSA_ECC_CURVE_SECT571R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R1)
593 #define KEYSTORE_PSA_ECC_CURVE_SECP160K1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_K1)
594 #define KEYSTORE_PSA_ECC_CURVE_SECP160R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R1)
595 #define KEYSTORE_PSA_ECC_CURVE_SECP160R2 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R2)
596 #define KEYSTORE_PSA_ECC_CURVE_SECP192K1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_K1)
597 #define KEYSTORE_PSA_ECC_CURVE_SECP192R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R1)
598 #define KEYSTORE_PSA_ECC_CURVE_SECP224K1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_K1)
599 #define KEYSTORE_PSA_ECC_CURVE_SECP224R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R1)
600 #define KEYSTORE_PSA_ECC_CURVE_SECP256K1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_K1)
601 #define KEYSTORE_PSA_ECC_CURVE_SECP256R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R1)
602 #define KEYSTORE_PSA_ECC_CURVE_SECP384R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R1)
603 #define KEYSTORE_PSA_ECC_CURVE_SECP521R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_SECP_R1)
604 #define KEYSTRORE_ECC_CURVE_BRAINPOOL_P256R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_BRAINPOOL_P_R1)
605 #define KEYSTRORE_ECC_CURVE_BRAINPOOL_P384R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_BRAINPOOL_P_R1)
606 #define KEYSTRORE_ECC_CURVE_BRAINPOOL_P512R1 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_BRAINPOOL_P_R1)
607 
613 #define KEYSTORE_PSA_ECC_CURVE_CURVE25519 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_MONTGOMERY)
614 
620 #define KEYSTORE_PSA_ECC_CURVE_CURVE448 ((KeyStore_PSA_KeyType)PSA_ECC_FAMILY_MONTGOMERY)
621 
627 #define KEYSTORE_PSA_ECC_CURVE_VENDOR_MIN ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_VENDOR_MIN)
628 
633 #define KEYSTORE_PSA_ECC_CURVE_VENDOR_MAX ((KeyStore_PSA_KeyType)PSA_ECC_CURVE_VENDOR_MAX)
634 
635 /* Volatile Key Limit [PSA_KEY_ID_VOLATILE_MIN, PSA_KEY_ID_VOLATILE_MAX]
636  * Upper limit for volatile key ID, PSA_KEY_ID_VOLATILE_MAX, is PSA_KEY_ID_VENDOR_MAX.
637  * Lower limit for volatile key ID, KEYSTORE_PSA_MIN_VOLATILE_KEY_ID, is the last
638  * #MBEDTLS_PSA_KEY_SLOT_COUNT identifiers of provided by implementation reserved for vendors.
639  */
640 
641 #if (TFM_ENABLED == 0) || defined(TFM_BUILD) /* TFM_BUILD indicates this is a TF-M build */
642  #define KEYSTORE_PSA_MIN_VOLATILE_KEY_ID PSA_KEY_ID_VOLATILE_MIN
643  #define KEYSTORE_PSA_MAX_VOLATILE_KEY_ID PSA_KEY_ID_VOLATILE_MAX
644 #else
645  /*
646  * PSA_KEY_SLOT_COUNT is not available in TF-M's crypto.h so we must
647  * hardcode it to match the value in mbedCrypto's header.
648  */
649  #define KEYSTORE_PSA_MIN_VOLATILE_KEY_ID (PSA_KEY_ID_VENDOR_MAX - MBEDTLS_PSA_KEY_SLOT_COUNT + 1)
650  #define KEYSTORE_PSA_MAX_VOLATILE_KEY_ID PSA_KEY_ID_VENDOR_MAX
651 #endif
652 
653 /* Macro to obtain size of struct member */
654 #define MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
655 
663 #define KEYSTORE_PSA_KEY_LIFETIME_VOLATILE ((KeyStore_PSA_KeyLifetime)PSA_KEY_LIFETIME_VOLATILE)
664 
677 #define KEYSTORE_PSA_KEY_LIFETIME_PERSISTENT ((KeyStore_PSA_KeyLifetime)PSA_KEY_LIFETIME_PERSISTENT)
678 
681 #define KEYSTORE_PSA_KEY_ID_NULL ((KeyStore_PSA_KeyFileId)0x0)
682 
685 #define KEYSTORE_PSA_KEY_ID_USER_MIN ((KeyStore_PSA_KeyFileId)PSA_KEY_ID_USER_MIN)
686 
689 #define KEYSTORE_PSA_KEY_ID_PERSISTENT_USER_MIN 0x41
690 
698 #define KEYSTORE_PSA_KEY_ID_WITH_CERTIFICATE_USER_MAX 0x1fffffff
699 
704 #define KEYSTORE_PSA_KEY_ID_CERTIFICATE_BIT (1 << 29)
705 
708 #define KEYSTORE_PSA_KEY_ID_VENDOR_MIN ((KeyStore_PSA_KeyFileId)PSA_KEY_ID_VENDOR_MIN)
709 
712 #define KEYSTORE_PSA_KEY_ID_VENDOR_MAX ((KeyStore_PSA_KeyFileId)PSA_KEY_ID_VENDOR_MAX)
713 
716 #define KEYSTORE_PSA_DEFAULT_OWNER MBEDTLS_PSA_CRYPTO_KEY_ID_DEFAULT_OWNER
717 
735 #define KEYSTORE_PSA_KEY_USAGE_EXPORT ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_EXPORT)
736 
751 #define KEYSTORE_PSA_KEY_USAGE_COPY ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_COPY)
752 
762 #define KEYSTORE_PSA_KEY_USAGE_ENCRYPT ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_ENCRYPT)
763 
773 #define KEYSTORE_PSA_KEY_USAGE_DECRYPT ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_DECRYPT)
774 
783 #define KEYSTORE_PSA_KEY_USAGE_SIGN_MESSAGE ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_SIGN_MESSAGE)
784 
793 #define KEYSTORE_PSA_KEY_USAGE_VERIFY_MESSAGE ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_VERIFY_MESSAGE)
794 
802 #define KEYSTORE_PSA_KEY_USAGE_SIGN_HASH ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_SIGN_HASH)
803 
811 #define KEYSTORE_PSA_KEY_USAGE_VERIFY_HASH ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_VERIFY_HASH)
812 
815 #define KEYSTORE_PSA_KEY_USAGE_DERIVE ((KeyStore_PSA_KeyUsage)PSA_KEY_USAGE_DERIVE)
816 
920 typedef psa_key_attributes_t KeyStore_PSA_KeyAttributes;
921 #if (TFM_ENABLED == 0) || defined(TFM_BUILD) /* TFM_BUILD indicates this is a TF-M build */
922 
924  #if defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER)
925 /* Building for the PSA Crypto service on a PSA platform. */
926 /* A key owner is a PSA partition identifier. */
927 typedef mbedtls_key_owner_id_t KeyStore_PSA_key_owner_id_t;
928 
929 typedef psa_key_id_t KeyStore_PSA_keyID;
930  #endif /* defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER) */
931 
932 typedef mbedtls_svc_key_id_t KeyStore_PSA_KeyFileId;
933 
934  #define KEYSTORE_PSA_KEY_ATTRIBUTES_INIT PSA_KEY_ATTRIBUTES_INIT
935 
941  #if defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER)
942  #define GET_KEY_ID(keyID, ID) \
943  keyID.MBEDTLS_PRIVATE(key_id) = ID; \
944  keyID.MBEDTLS_PRIVATE(owner) = KEYSTORE_PSA_DEFAULT_OWNER;
945 
946  #define SET_KEY_ID(ID, keyID) ID = keyID.MBEDTLS_PRIVATE(key_id)
947  #else
948  #define GET_KEY_ID(keyID, ID) keyID = ID
949 
950  #define SET_KEY_ID(ID, keyID) ID = keyID
951  #endif /* defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER) */
952 
953 #else
954 
964 typedef mbedtls_svc_key_id_t KeyStore_PSA_KeyFileId;
965 
967  #define GET_KEY_ID(keyID, ID) keyID = ID
968  #define SET_KEY_ID(ID, keyID) ID = keyID
969 
970  #define KEYSTORE_PSA_KEY_ATTRIBUTES_INIT PSA_CLIENT_KEY_ATTRIBUTES_INIT
971 #endif /* #if (TFM_ENABLED == 0) || defined(TFM_BUILD) */
972 
983 #define KEYSTORE_PSA_PREPROVISIONED_AREA_ADDR 0x0000
984 
987 #define KEYSTORE_PSA_PREPROVISIONED_AREA_SIZE (0x700) /* 1792 B */
988 
994 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_EXPORT_FLAG 0xAAAA
995 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_EXPORT_FLAG_LENGTH (sizeof(KEYSTORE_PSA_PRE_PROVISIONED_KEY_EXPORT_FLAG))
996 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_NO_EXPORT_FLAG 0xA5A5
997 
1001 #define KEYSTORE_PSA_PREPROVISIONED_KEYS_EMPTY 0xFFFF
1002 
1006 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_MAGIC_HEADER "HUK\0KEY"
1007 #define KEYSTORE_PSA_PRE_PROVISIONED_KEYS_END 0
1008 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_MAGIC_HEADER_LENGTH (sizeof(KEYSTORE_PSA_PRE_PROVISIONED_KEY_MAGIC_HEADER))
1009 #define KEYSTORE_PSA_PRE_PROVISIONED_KEYS_END_LENGTH (sizeof(KEYSTORE_PSA_PRE_PROVISIONED_KEYS_END))
1010 #define KEYSTORE_PSA_MAX_PREPROVISIONED_KEYS 0x10
1011 
1015 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_VALID_LIFETIME 0xAAAA
1016 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_INVALID_LIFETIME 0x8888
1017 
1024 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_ID_MAX 0x40
1025 #define KEYSTORE_PSA_PRE_PROVISIONED_KEY_ID_MIN 0x21
1026 #define KEYSTORE_PSA_PRE_PROVISIONED_CERTIFICATE_ID_MAX \
1027  (KEYSTORE_PSA_PRE_PROVISIONED_KEY_ID_MAX | KEYSTORE_PSA_KEY_ID_CERTIFICATE_BIT)
1028 #define KEYSTORE_PSA_PRE_PROVISIONED_CERTIFICATE_ID_MIN \
1029  (KEYSTORE_PSA_PRE_PROVISIONED_KEY_ID_MIN | KEYSTORE_PSA_KEY_ID_CERTIFICATE_BIT)
1030 
1037 #define KEYSTORE_PSA_PRE_PROVISIONED_ATTESTATION_PUB_KEY_ID 0x40
1038 #define KEYSTORE_PSA_PRE_PROVISIONED_ATTESTATION_PRI_KEY_ID 0X3F
1039 #define KEYSTORE_PSA_PRE_PROVISIONED_ATTESTATION_CERTIFICATE_ID \
1040  (KEYSTORE_PSA_PRE_PROVISIONED_ATTESTATION_PUB_KEY_ID | KEYSTORE_PSA_KEY_ID_CERTIFICATE_BIT)
1041 
1052 typedef struct
1053 {
1055  uint32_t lifetime;
1056  KeyStore_PSA_KeyFileId id;
1057  uint32_t export;
1058  KeyStore_PSA_Algorithm alg;
1059  KeyStore_PSA_KeyUsage usage;
1060  uint32_t keyLength;
1062 
1066 #define KEYSTORE_PRE_PROVISIONED_KEY_METADATA_SIZE sizeof(KeyStore_PreProvisionedKeyMetaData)
1067 
1075 typedef struct
1076 {
1078  uint8_t *keyMaterial;
1079  uint32_t fletcher;
1081 
1085 #define KEYSTORE_PSA_PREPROVISIONED_KEY_FORMAT_INIT \
1086  { \
1087  KEYSTORE_PSA_PRE_PROVISIONED_KEY_MAGIC_HEADER, 0, KEYSTORE_PSA_PRE_PROVISIONED_KEY_EXPORT_FLAG, 0, 0, 0, 0, \
1088  KEYSTORE_PSA_PRE_PROVISIONED_KEYS_END, 0 \
1089  }
1090 
1103 typedef struct
1104 {
1105  uint8_t *addr;
1106  KeyStore_PSA_KeyFileId id;
1107  KeyStore_PSA_Algorithm alg;
1108  KeyStore_PSA_KeyUsage usage;
1109  uint32_t export;
1110  uint32_t keyLength;
1112 
1134 void KeyStore_PSA_setKeyId(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_KeyFileId key);
1135 
1162 void KeyStore_PSA_setKeyLifetime(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_KeyLifetime lifetime);
1163 
1177 KeyStore_PSA_KeyFileId KeyStore_PSA_getKeyId(KeyStore_PSA_KeyAttributes *attributes);
1178 
1190 KeyStore_PSA_KeyLifetime KeyStore_PSA_getKeyLifetime(KeyStore_PSA_KeyAttributes *attributes);
1191 
1209 void KeyStore_PSA_setKeyUsageFlags(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_KeyUsage usage_flags);
1210 
1222 KeyStore_PSA_KeyUsage KeyStore_PSA_getKeyUsageFlags(KeyStore_PSA_KeyAttributes *attributes);
1223 
1245 void KeyStore_PSA_setKeyAlgorithm(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_Algorithm alg);
1246 
1258 KeyStore_PSA_Algorithm KeyStore_PSA_getKeyAlgorithm(KeyStore_PSA_KeyAttributes *attributes);
1259 
1275 void KeyStore_PSA_setKeyType(KeyStore_PSA_KeyAttributes *attributes, KeyStore_PSA_KeyType type);
1276 
1292 void KeyStore_PSA_setKeyBits(KeyStore_PSA_KeyAttributes *attributes, size_t bits);
1293 
1305 KeyStore_PSA_KeyType KeyStore_PSA_getKeyType(KeyStore_PSA_KeyAttributes *attributes);
1306 
1317 size_t KeyStore_PSA_getKeyBits(KeyStore_PSA_KeyAttributes *attributes);
1318 
1331 void KeyStore_PSA_resetKeyAttributes(KeyStore_PSA_KeyAttributes *attributes);
1332 
1360 int_fast16_t KeyStore_PSA_exportCertificate(KeyStore_PSA_KeyFileId key,
1361  uint8_t *data,
1362  size_t dataSize,
1363  size_t *dataLength);
1364 
1422 int_fast16_t KeyStore_PSA_exportPublicKey(KeyStore_PSA_KeyFileId key,
1423  uint8_t *data,
1424  size_t dataSize,
1425  size_t *dataLength);
1426 
1484 int_fast16_t KeyStore_PSA_exportKey(KeyStore_PSA_KeyFileId key, uint8_t *data, size_t dataSize, size_t *dataLength);
1485 
1536 int_fast16_t KeyStore_PSA_importCertificate(KeyStore_PSA_KeyAttributes *attributes,
1537  KeyStore_PSA_KeyFileId *key,
1538  uint8_t *data,
1539  size_t dataLength);
1540 
1607 int_fast16_t KeyStore_PSA_importKey(KeyStore_PSA_KeyAttributes *attributes,
1608  uint8_t *data,
1609  size_t dataLength,
1610  KeyStore_PSA_KeyFileId *key);
1611 
1640 int_fast16_t KeyStore_PSA_getKeyAttributes(KeyStore_PSA_KeyFileId key, KeyStore_PSA_KeyAttributes *attributes);
1641 
1684 int_fast16_t KeyStore_PSA_purgeKey(KeyStore_PSA_KeyFileId key);
1685 
1724 int_fast16_t KeyStore_PSA_destroyCertificate(KeyStore_PSA_KeyFileId key);
1725 
1781 int_fast16_t KeyStore_PSA_destroyKey(KeyStore_PSA_KeyFileId key);
1782 
1783 #ifdef __cplusplus
1784 }
1785 #endif
1786 
1787 #endif /* ti_drivers_KeyStore_PSA__include */
Structure for storing pre-provisioned key&#39;s meta data.
Definition: CryptoKeyKeyStore_PSA.h:1052
psa_key_usage_t KeyStore_PSA_KeyUsage
Encoding of permitted usage on a key.
Definition: CryptoKeyKeyStore_PSA.h:125
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:1059
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:1103
uint32_t keyLength
Definition: CryptoKeyKeyStore_PSA.h:1110
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:1075
KeyStore_PSA_KeyFileId id
Definition: CryptoKeyKeyStore_PSA.h:1106
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:1057
void KeyStore_PSA_resetKeyAttributes(KeyStore_PSA_KeyAttributes *attributes)
Reset a key attribute structure to a freshly initialized state.
mbedtls_svc_key_id_t KeyStore_PSA_KeyFileId
Definition: CryptoKeyKeyStore_PSA.h:932
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:357
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:1058
KeyStore_PSA_Algorithm alg
Definition: CryptoKeyKeyStore_PSA.h:1107
uint8_t * addr
Definition: CryptoKeyKeyStore_PSA.h:1105
uint32_t export
Definition: CryptoKeyKeyStore_PSA.h:1109
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:1108
uint32_t lifetime
Definition: CryptoKeyKeyStore_PSA.h:1055
psa_algorithm_t KeyStore_PSA_Algorithm
Encoding of a cryptographic algorithm.
Definition: CryptoKeyKeyStore_PSA.h:463
uint32_t keyLength
Definition: CryptoKeyKeyStore_PSA.h:1060
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:139
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:1077
uint8_t * keyMaterial
Definition: CryptoKeyKeyStore_PSA.h:1078
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:1056
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:1008
uint32_t fletcher
Definition: CryptoKeyKeyStore_PSA.h:1079
psa_key_attributes_t KeyStore_PSA_KeyAttributes
Definition: CryptoKeyKeyStore_PSA.h:920
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