HSMLPF3.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 HSMLPF3.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 #if (DeviceFamily_PARENT == DeviceFamily_PARENT_CC27XX)
63  #include <ti/drivers/EDDSA.h>
65 #endif /* (DeviceFamily_PARENT == DeviceFamily_PARENT_CC27XX) */
66 
67 #include <ti/drivers/AESGCM.h>
69 
70 #include <ti/drivers/AESECB.h>
72 
73 #include <ti/drivers/AESCTR.h>
75 
76 #include <ti/drivers/AESCBC.h>
78 
79 #include <ti/drivers/AESCMAC.h>
81 
82 #include <ti/drivers/AESCCM.h>
84 
85 #include <ti/drivers/ECDH.h>
87 
88 #include <ti/drivers/ECDSA.h>
90 
91 #include <ti/drivers/TRNG.h>
93 
94 #include <ti/drivers/dpl/SemaphoreP.h>
96 #include <third_party/hsmddk/include/Kit/EIP130/TokenHelper/incl/eip130_token_common.h>
97 
104 #define HSMLPF3_STATUS_SUCCESS ((int_fast16_t)0)
105 
112 #define HSMLPF3_STATUS_ERROR ((int_fast16_t)-1)
113 
121 #define HSMLPF3_STATUS_TIMEOUT ((int_fast16_t)-2)
122 
130 #define HSMLPF3_STATUS_IN_SLEEP_MODE ((int_fast16_t)-3)
131 
138 #define HSMLPF3_STATUS_RESOURCE_UNAVAILABLE ((int_fast16_t)-4)
139 
140 /* The following defines are the default RNG configuration parameters */
141 
142 /* Default TRNG parameters */
143 #define HSMLPF3_RNG_CONFG_TRNG_DEFAULT_AUTOSEED 0xFF
144 #define HSMLPF3_RNG_CONFG_TRNG_DEFAULT_SAMPLE_CYCLE 0x4BBE
145 #define HSMLPF3_RNG_CONFG_TRNG_MAX_SAMPLE_CYCLE 0x00
146 #define HSMLPF3_RNG_CONFG_DEFAULT_NOISEBLOCKS 0x01
147 #define HSMLPF3_RNG_CONFG_TRNG_DEFAULT_SCALE 0x01
148 #define HSMLPF3_RNG_CONFG_TRNG_DEFAULT_SAMPLEDIV 0x00
149 #define HSMLPF3_RNG_CONFG_TRNG_DEFAULT_REPCNTCUTOFF 0x09
150 #define HSMLPF3_RNG_CONFG_TRNG_DEFAULT_ADAPTPROP64CUTOFF 0x15
151 #define HSMLPF3_RNG_CONFG_TRNG_DEFAULT_ADAPTPROP512CUTOFF 0x47
152 
153 /* Default CRNG parameters */
154 #define HSMLPF3_RNG_CONFG_CRNG_DEFAULT_AUTOSEED 0x1
155 #define HSMLPF3_RNG_CONFG_CRNG_DEFAULT_MIXCYCLE 0x2
156 
157 #define HSMLPF3_RETVAL_MASK MASK_8_BITS
158 
159 #if (DeviceFamily_PARENT == DeviceFamily_PARENT_CC35XX)
160  /* Power state defines from LPF3 to WFF3 mapping. */
161  #define PowerLPF3_ENTERING_STANDBY PowerWFF3_ENTERING_SLEEP
162  #define PowerLPF3_AWAKE_STANDBY PowerWFF3_AWAKE_SLEEP
163  #define PowerLPF3_DISALLOW_STANDBY PowerWFF3_DISALLOW_SLEEP
164 #endif
165 
169 typedef enum
170 {
171  HSMLPF3_MODE_CRNG = 1,
172  HSMLPF3_MODE_TRNG = 2,
173 } HSMLPF3_NRBGMode;
174 
190 typedef enum
191 {
192  HSMLPF3_RETURN_BEHAVIOR_CALLBACK = 1,
199  HSMLPF3_RETURN_BEHAVIOR_BLOCKING = 2,
205  HSMLPF3_RETURN_BEHAVIOR_POLLING = 4,
211 } HSMLPF3_ReturnBehavior;
212 
220 typedef void (*HSMLPF3_CallbackFxn)(uintptr_t arg0);
221 
229 typedef struct
230 {
231  Eip130Token_Command_t commandToken;
232  Eip130Token_Result_t resultToken;
233  HSMLPF3_ReturnBehavior returnBehavior;
234  HSMLPF3_CallbackFxn callbackFxn;
235  uintptr_t driverHandle;
236 } HSMLPF3_Operation;
237 
249 void HSMLPF3_constructRTOSObjects(void);
250 
257 void HSMLPF3_disableClock(void);
258 
274 int_fast16_t HSMLPF3_sleep(void);
275 
289 int_fast16_t HSMLPF3_wakeUp(void);
290 
306 int_fast16_t HSMLPF3_init(void);
307 
318 bool HSMLPF3_isStandaloneDMASupportEnabled(void);
319 
329 int_fast16_t HSMLPF3_provisionHUK(void);
330 
348 bool HSMLPF3_acquireLock(uint32_t timeout, uintptr_t driverHandle);
349 
358 void HSMLPF3_releaseLock(void);
359 
383 int_fast16_t HSMLPF3_submitToken(HSMLPF3_ReturnBehavior retBehavior,
384  HSMLPF3_CallbackFxn callbackFxn,
385  uintptr_t driverHandle);
386 
401 int_fast16_t HSMLPF3_waitForResult(void);
402 
412 int_fast16_t HSMLPF3_cancelOperation(void);
413 
420 bool HSMLPF3_isOperationInProgress(void);
421 
427 HSMLPF3_NRBGMode HSMLPF3_getCurrentNRBGMode(void);
428 
435 void HSMLPF3_updateInternalNRBGMode();
436 
437 /*
438  * ================ APIs to handle result token data ================
439  */
440 
449 int32_t HSMLPF3_getResultCode(void);
450 
459 uint32_t HSMLPF3_getResultAssetID(void);
460 
468 void HSMLPF3_getResultDigest(uint8_t *digest, size_t digestLength);
469 
476 void HSMLPF3_getAESEncryptTag(void *mac, size_t macLength);
477 
483 void HSMLPF3_getAESIV(uint8_t *iv);
484 
491 void HSMLPF3_getAESCMACSignMac(uint8_t *mac, uint8_t macLength);
492 
500 void HSMLPF3_getPublicDataRead(uint32_t assetId, const uint8_t *data, uint8_t dataLength);
501 
502 /*
503  * ================ APIs to construct key/asset management-related command tokens ================
504  */
505 
513 void HSMLPF3_constructCreateAssetToken(uint64_t assetPolicy, uint32_t assetLength);
514 
527 void HSMLPF3_constructLoadPlaintextAssetToken(const uint8_t *input_p, const uint32_t inputLength, uint32_t assetId);
528 
536 void HSMLPF3_constructDeleteAssetToken(uint32_t assetId);
537 
538 /*
539  * ================ APIs to construct driver-specific command tokens ================
540  */
547 void HSMLPF3_constructSHA2PhysicalToken(SHA2LPF3HSM_Object *object);
548 
554 void HSMLPF3_constructECDHGenPubPhysicalToken(ECDHLPF3HSM_Object *object);
555 
561 void HSMLPF3_constructECDHGenShrdSecPhysicalToken(ECDHLPF3HSM_Object *object);
562 
568 void HSMLPF3_constructECDHVerifyKeysPhysicalToken(ECDHLPF3HSM_Object *object);
569 
575 void HSMLPF3_constructECDSAPhysicalToken(ECDSALPF3HSM_Object *object);
576 
577 #if (DeviceFamily_PARENT == DeviceFamily_PARENT_CC27XX)
578 
583 void HSMLPF3_constructEDDSAGenPubKeyPhysicalToken(EDDSALPF3HSM_Object *object);
584 
590 void HSMLPF3_constructEDDSASignInitialPhysicalToken(EDDSALPF3HSM_Object *object);
591 
599 void HSMLPF3_constructEDDSAIntermediateHashPhysicalToken(const uint8_t *input,
600  size_t inputLength,
601  uint32_t tempAssetID);
602 
608 void HSMLPF3_constructEDDSASignUpdatePhysicalToken(EDDSALPF3HSM_Object *object);
609 
615 void HSMLPF3_constructEDDSASignFinalizePhysicalToken(EDDSALPF3HSM_Object *object);
616 
622 void HSMLPF3_constructEDDSAVerifyInitialPhysicalToken(EDDSALPF3HSM_Object *object);
623 
629 void HSMLPF3_constructEDDSAVerifyFinalizePhysicalToken(EDDSALPF3HSM_Object *object);
630 #endif /* (DeviceFamily_PARENT == DeviceFamily_PARENT_CC27XX) */
631 
639 void HSMLPF3_constructGCMToken(const AESGCMLPF3HSM_Object *object, bool saveIV, bool loadIV);
640 
648 void HSMLPF3_constructCCMToken(const AESCCMLPF3_Object *object, bool saveIV, bool loadIV);
649 
656 void HSMLPF3_constructAESECBOneStepPhysicalToken(AESECBLPF3_Object *object, uint8_t *key);
657 
664 void HSMLPF3_constructAESCTROneStepPhysicalToken(AESCTRLPF3_Object *object, uint8_t *key);
665 
666 /*
667  * @brief Constructs an AES-CBC one-step command token
668  *
669  * @param [in] object The AESCBCLPF3 object that contains necessary data
670  * @param [in] key Pointer to key material if it has been retrieved in plaintext
671  */
672 void HSMLPF3_constructAESCBCOneStepPhysicalToken(AESCBCLPF3_Object *object, uint8_t *key);
673 
681 void HSMLPF3_constructCMACToken(AESCMACLPF3_Object *object, bool isFirst, bool isFinal);
682 
683 #if (DeviceFamily_PARENT == DeviceFamily_PARENT_CC27XX)
684 
689 void HSMLPF3_constructRNGSwitchNRBGWithDefaultsPhysicalToken(HSMLPF3_NRBGMode HSMLPF3_nrbgMode);
690 
695 void HSMLPF3_constructRNGReseedDRBGPhysicalToken(void);
696 #endif /* (DeviceFamily_PARENT == DeviceFamily_PARENT_CC27XX) */
697 
704 void HSMLPF3_constructRNGGetRandomNumberPhysicalToken(uintptr_t entropyBuffer, size_t entropyRequested);
705 
712 void HSMLPF3_constructRNGGetRawRandomNumberPhysicalToken(uintptr_t entropyBuffer, size_t entropyRequested);
713 
TI Driver for Elliptic Curve Digital Signature Algorithm.
AESCBC driver header.
The CryptoKey type is an opaque representation of a cryptographic key.
ECDSALPF3HSM Object.
Definition: ECDSALPF3HSM.h:115
TRNG driver implementation for CC27XX and CC35XX device families.
ECDHLPF3HSM Object.
Definition: ECDHLPF3HSM.h:125
AESCMACLPF3 Object.
Definition: AESCMACLPF3.h:128
AESGCM driver implementation for the Low Power F3 family.
AESGCM driver header.
TI Driver for Edwards Curve Digital Signature Algorithm.
AESCTRLPF3 Object.
Definition: AESCTRLPF3.h:138
AESCCMLPF3 Object.
Definition: AESCCMLPF3.h:109
TI Driver for Elliptic Curve Diffie-Hellman key agreement scheme.
AESCCM driver implementation for the Low Power F3 family.
AESECB driver header.
AESECB driver implementation for the Low Power F3 family.
TRNG driver header.
EDDSALPF3HSM Object.
Definition: EDDSALPF3HSM.h:108
AESGCMLPF3HSM Object.
Definition: AESGCMLPF3HSM.h:101
AESECBLPF3 Object.
Definition: AESECBLPF3.h:113
SHA2 driver header.
ECDSA HSM IP driver implementation for the Low Power F3 family.
AESCMAC (CMAC and CBC-MAC) driver header.
AESCBC driver implementation for the Low Power F3 devices.
AESCCM driver header.
AESCMAC (CMAC & CBC-MAC) driver implementation for the Low Power F3 family.
AESCBCLPF3 Object.
Definition: AESCBCLPF3.h:94
EdDSA driver implementation for the CC27XX family.
AESCTR driver implementation for the Low Power F3 family.
AESCTR driver header.
© Copyright 1995-2025, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale