HSMXXF3.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023-2025, 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 
33 /*!****************************************************************************
34  * @file HSMXXF3.h
35  *
36  * @brief Interface to for all HSM-related operations
37  *
38  * This module provides functions for use of the Hardware Security Module.
39  *
40  * The HSM initialization procedure must first enable the clock, then initialize the
41  * mailbox, and finally boot the device.
42  *
43  * APIs are provided to synchronize access to the HSM and submit command tokens,
44  * constructed by TI crypto drivers.
45  *
46  * Additional APIs to construct command tokens, interpret result token data as well as additional key/asset management
47  * operations.
48  *
49  *
50  *
51  */
52 
55 #include <stdint.h>
56 #include <stdbool.h>
57 
58 #include <ti/devices/DeviceFamily.h>
59 #include <ti/drivers/SHA2.h>
61 
62 #include <ti/drivers/AESGCM.h>
64 
65 #include <ti/drivers/AESECB.h>
67 
68 #include <ti/drivers/AESCTR.h>
70 
71 #include <ti/drivers/AESCBC.h>
73 
74 #include <ti/drivers/AESCMAC.h>
76 
77 #include <ti/drivers/AESCCM.h>
79 
80 #include <ti/drivers/ECDH.h>
82 
83 #include <ti/drivers/ECDSA.h>
85 
86 #include <ti/drivers/EDDSA.h>
88 
89 #include <ti/drivers/TRNG.h>
91 
92 #include <ti/drivers/dpl/SemaphoreP.h>
94 #include <third_party/hsmddk/include/Kit/EIP130/TokenHelper/incl/eip130_token_common.h>
95 
102 #define HSMXXF3_STATUS_SUCCESS ((int_fast16_t)0)
103 
110 #define HSMXXF3_STATUS_ERROR ((int_fast16_t)-1)
111 
119 #define HSMXXF3_STATUS_TIMEOUT ((int_fast16_t)-2)
120 
128 #define HSMXXF3_STATUS_IN_SLEEP_MODE ((int_fast16_t)-3)
129 
136 #define HSMXXF3_STATUS_RESOURCE_UNAVAILABLE ((int_fast16_t)-4)
137 
138 /* Co-processor ID for LAES */
139 #define HSMXXF3_LAES_COPROCESSOR_ID 0x1
140 
141 /* The following defines are the default RNG configuration parameters */
142 
143 /* Default TRNG parameters */
144 #define HSMXXF3_RNG_CONFG_TRNG_DEFAULT_AUTOSEED 0xFF
145 #define HSMXXF3_RNG_CONFG_TRNG_DEFAULT_SAMPLE_CYCLE 0x4BBE
146 #define HSMXXF3_RNG_CONFG_TRNG_MAX_SAMPLE_CYCLE 0x00
147 #define HSMXXF3_RNG_CONFG_DEFAULT_NOISEBLOCKS 0x01
148 #define HSMXXF3_RNG_CONFG_TRNG_DEFAULT_SCALE 0x01
149 #define HSMXXF3_RNG_CONFG_TRNG_DEFAULT_SAMPLEDIV 0x00
150 #define HSMXXF3_RNG_CONFG_TRNG_DEFAULT_REPCNTCUTOFF 0x09
151 #define HSMXXF3_RNG_CONFG_TRNG_DEFAULT_ADAPTPROP64CUTOFF 0x15
152 #define HSMXXF3_RNG_CONFG_TRNG_DEFAULT_ADAPTPROP512CUTOFF 0x47
153 
154 /* Default CRNG parameters */
155 #define HSMXXF3_RNG_CONFG_CRNG_DEFAULT_AUTOSEED 0x1
156 #define HSMXXF3_RNG_CONFG_CRNG_DEFAULT_MIXCYCLE 0x2
157 
158 #define HSMXXF3_RETVAL_MASK MASK_8_BITS
159 
160 #if (DeviceFamily_PARENT == DeviceFamily_PARENT_CC35XX)
161  /* Power state defines from LPF3 to WFF3 mapping. */
162  #define PowerLPF3_ENTERING_STANDBY PowerWFF3_ENTERING_SLEEP
163  #define PowerLPF3_AWAKE_STANDBY PowerWFF3_AWAKE_SLEEP
164  #define PowerLPF3_DISALLOW_STANDBY PowerWFF3_DISALLOW_SLEEP
165 #endif
166 
170 typedef enum
171 {
172  HSMXXF3_MODE_CRNG = 1,
173  HSMXXF3_MODE_TRNG = 2,
174 } HSMXXF3_NRBGMode;
175 
191 typedef enum
192 {
193  HSMXXF3_RETURN_BEHAVIOR_CALLBACK = 1,
200  HSMXXF3_RETURN_BEHAVIOR_BLOCKING = 2,
206  HSMXXF3_RETURN_BEHAVIOR_POLLING = 4,
212 } HSMXXF3_ReturnBehavior;
213 
221 typedef void (*HSMXXF3_CallbackFxn)(uintptr_t arg0);
222 
230 typedef struct
231 {
232  Eip130Token_Command_t commandToken;
233  Eip130Token_Result_t resultToken;
234  HSMXXF3_ReturnBehavior returnBehavior;
235  HSMXXF3_CallbackFxn callbackFxn;
236  uintptr_t driverHandle;
237 } HSMXXF3_Operation;
238 
250 void HSMXXF3_constructRTOSObjects(void);
251 
258 void HSMXXF3_disableClock(void);
259 
275 int_fast16_t HSMXXF3_sleep(void);
276 
290 int_fast16_t HSMXXF3_wakeUp(void);
291 
307 int_fast16_t HSMXXF3_init(void);
308 
319 bool HSMXXF3_isStandaloneDMASupportEnabled(void);
320 
330 int_fast16_t HSMXXF3_provisionHUK(void);
331 
349 bool HSMXXF3_acquireLock(uint32_t timeout, uintptr_t driverHandle);
350 
359 void HSMXXF3_releaseLock(void);
360 
384 int_fast16_t HSMXXF3_submitToken(HSMXXF3_ReturnBehavior retBehavior,
385  HSMXXF3_CallbackFxn callbackFxn,
386  uintptr_t driverHandle);
387 
402 int_fast16_t HSMXXF3_waitForResult(void);
403 
413 int_fast16_t HSMXXF3_cancelOperation(void);
414 
421 bool HSMXXF3_isOperationInProgress(void);
422 
428 HSMXXF3_NRBGMode HSMXXF3_getCurrentNRBGMode(void);
429 
436 void HSMXXF3_updateInternalNRBGMode();
437 
438 /*
439  * ================ APIs to handle result token data ================
440  */
441 
450 int32_t HSMXXF3_getResultCode(void);
451 
460 uint32_t HSMXXF3_getResultAssetID(void);
461 
469 void HSMXXF3_getResultDigest(uint8_t *digest, size_t digestLength);
470 
477 void HSMXXF3_getAESEncryptTag(void *mac, size_t macLength);
478 
484 void HSMXXF3_getAESIV(uint8_t *iv);
485 
492 void HSMXXF3_getAESCMACSignMac(uint8_t *mac, uint8_t macLength);
493 
501 void HSMXXF3_getPublicDataRead(uint32_t assetId, const uint8_t *data, uint8_t dataLength);
502 
503 /*
504  * ================ APIs to construct key/asset management-related command tokens ================
505  */
506 
514 void HSMXXF3_constructCreateAssetToken(uint64_t assetPolicy, uint32_t assetLength);
515 
528 void HSMXXF3_constructLoadPlaintextAssetToken(const uint8_t *input_p, const uint32_t inputLength, uint32_t assetId);
529 
537 void HSMXXF3_constructDeleteAssetToken(uint32_t assetId);
538 
555 int_fast16_t HSMXXF3_constructExportAssetCopToken(uint32_t assetId, uint16_t copID, uint16_t copOffset);
556 
557 /*
558  * ================ APIs to construct driver-specific command tokens ================
559  */
566 void HSMXXF3_constructSHA2PhysicalToken(SHA2XXF3HSM_Object *object);
567 
573 void HSMXXF3_constructECDHGenPubPhysicalToken(ECDHXXF3HSM_Object *object);
574 
580 void HSMXXF3_constructECDHGenShrdSecPhysicalToken(ECDHXXF3HSM_Object *object);
581 
587 void HSMXXF3_constructECDHVerifyKeysPhysicalToken(ECDHXXF3HSM_Object *object);
588 
594 void HSMXXF3_constructECDSAPhysicalToken(ECDSAXXF3HSM_Object *object);
595 
601 void HSMXXF3_constructEDDSAGenPubKeyPhysicalToken(EDDSAXXF3HSM_Object *object);
602 
608 void HSMXXF3_constructEDDSASignInitialPhysicalToken(EDDSAXXF3HSM_Object *object);
609 
617 void HSMXXF3_constructEDDSAIntermediateHashPhysicalToken(const uint8_t *input,
618  size_t inputLength,
619  uint32_t tempAssetID);
620 
626 void HSMXXF3_constructEDDSASignUpdatePhysicalToken(EDDSAXXF3HSM_Object *object);
627 
633 void HSMXXF3_constructEDDSASignFinalizePhysicalToken(EDDSAXXF3HSM_Object *object);
634 
640 void HSMXXF3_constructEDDSAVerifyInitialPhysicalToken(EDDSAXXF3HSM_Object *object);
641 
647 void HSMXXF3_constructEDDSAVerifyFinalizePhysicalToken(EDDSAXXF3HSM_Object *object);
648 
656 void HSMXXF3_constructGCMToken(const AESGCMXXF3HSM_Object *object, bool saveIV, bool loadIV);
657 
665 void HSMXXF3_constructCCMToken(const AESCCMXXF3_Object *object, bool saveIV, bool loadIV);
666 
673 void HSMXXF3_constructAESECBOneStepPhysicalToken(AESECBXXF3_Object *object, uint8_t *key);
674 
681 void HSMXXF3_constructAESCTROneStepPhysicalToken(AESCTRXXF3_Object *object, uint8_t *key);
682 
683 /*
684  * @brief Constructs an AES-CBC one-step command token
685  *
686  * @param [in] object The AESCBCXXF3 object that contains necessary data
687  * @param [in] key Pointer to key material if it has been retrieved in plaintext
688  */
689 void HSMXXF3_constructAESCBCOneStepPhysicalToken(AESCBCXXF3_Object *object, uint8_t *key);
690 
698 void HSMXXF3_constructCMACToken(AESCMACXXF3_Object *object, bool isFirst, bool isFinal);
699 
700 #if (DeviceFamily_PARENT == DeviceFamily_PARENT_CC27XX)
701 
706 void HSMXXF3_constructRNGSwitchNRBGWithDefaultsPhysicalToken(HSMXXF3_NRBGMode HSMXXF3_nrbgMode);
707 
712 void HSMXXF3_constructRNGReseedDRBGPhysicalToken(void);
713 #endif /* (DeviceFamily_PARENT == DeviceFamily_PARENT_CC27XX) */
714 
721 void HSMXXF3_constructRNGGetRandomNumberPhysicalToken(uintptr_t entropyBuffer, size_t entropyRequested);
722 
729 void HSMXXF3_constructRNGGetRawRandomNumberPhysicalToken(uintptr_t entropyBuffer, size_t entropyRequested);
730 
TI Driver for Elliptic Curve Digital Signature Algorithm.
AESCCM driver implementation for the Low Power F3 family.
AESCBC driver header.
The CryptoKey type is an opaque representation of a cryptographic key.
AESCBCXXF3 Object.
Definition: AESCBCXXF3.h:90
AESCCMXXF3 Object.
Definition: AESCCMXXF3.h:105
TRNG driver implementation for CC27XX and CC35XX device families.
AESGCM driver header.
TI Driver for Edwards Curve Digital Signature Algorithm.
ECDSAXXF3HSM Object.
Definition: ECDSAXXF3HSM.h:115
AESCTR driver implementation for the Low Power F3 family.
TI Driver for Elliptic Curve Diffie-Hellman key agreement scheme.
AESGCMXXF3HSM Object.
Definition: AESGCMXXF3HSM.h:97
AESECB driver header.
AESCTRXXF3 Object.
Definition: AESCTRXXF3.h:134
AESECB driver implementation for the Low Power F3 family.
TRNG driver header.
SHA2 driver header.
AESCMAC (CMAC and CBC-MAC) driver header.
ECDSA HSM IP driver implementation for the Low Power F3 family.
AESCMACXXF3 Object.
Definition: AESCMACXXF3.h:128
AESCCM driver header.
EDDSAXXF3HSM Object.
Definition: EDDSAXXF3HSM.h:108
AESCBC driver implementation for the Low Power F3 devices.
AESECBXXF3 Object.
Definition: AESECBXXF3.h:109
ECDHXXF3HSM Object.
Definition: ECDHXXF3HSM.h:125
AESGCM driver implementation for the Low Power F3 family.
AESCMAC (CMAC & CBC-MAC) driver implementation for the Low Power F3 family.
EdDSA driver implementation for the CC27XX and CC35XX family.
AESCTR driver header.
© Copyright 1995-2026, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale