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 
317 int_fast16_t HSMLPF3_provisionHUK(void);
318 
336 bool HSMLPF3_acquireLock(uint32_t timeout, uintptr_t driverHandle);
337 
346 void HSMLPF3_releaseLock(void);
347 
371 int_fast16_t HSMLPF3_submitToken(HSMLPF3_ReturnBehavior retBehavior,
372  HSMLPF3_CallbackFxn callbackFxn,
373  uintptr_t driverHandle);
374 
389 int_fast16_t HSMLPF3_waitForResult(void);
390 
400 int_fast16_t HSMLPF3_cancelOperation(void);
401 
408 bool HSMLPF3_isOperationInProgress(void);
409 
415 HSMLPF3_NRBGMode HSMLPF3_getCurrentNRBGMode(void);
416 
423 void HSMLPF3_updateInternalNRBGMode();
424 
425 /*
426  * ================ APIs to handle result token data ================
427  */
428 
437 int32_t HSMLPF3_getResultCode(void);
438 
447 uint32_t HSMLPF3_getResultAssetID(void);
448 
456 void HSMLPF3_getResultDigest(uint8_t *digest, size_t digestLength);
457 
464 void HSMLPF3_getAESEncryptTag(void *mac, size_t macLength);
465 
471 void HSMLPF3_getAESIV(uint8_t *iv);
472 
479 void HSMLPF3_getAESCMACSignMac(uint8_t *mac, uint8_t macLength);
480 
488 void HSMLPF3_getPublicDataRead(uint32_t assetId, const uint8_t *data, uint8_t dataLength);
489 
490 /*
491  * ================ APIs to construct key/asset management-related command tokens ================
492  */
493 
501 void HSMLPF3_constructCreateAssetToken(uint64_t assetPolicy, uint32_t assetLength);
502 
515 void HSMLPF3_constructLoadPlaintextAssetToken(const uint8_t *input_p, const uint32_t inputLength, uint32_t assetId);
516 
524 void HSMLPF3_constructDeleteAssetToken(uint32_t assetId);
525 
526 /*
527  * ================ APIs to construct driver-specific command tokens ================
528  */
535 void HSMLPF3_constructSHA2PhysicalToken(SHA2LPF3HSM_Object *object);
536 
542 void HSMLPF3_constructECDHGenPubPhysicalToken(ECDHLPF3HSM_Object *object);
543 
549 void HSMLPF3_constructECDHGenShrdSecPhysicalToken(ECDHLPF3HSM_Object *object);
550 
556 void HSMLPF3_constructECDHVerifyKeysPhysicalToken(ECDHLPF3HSM_Object *object);
557 
563 void HSMLPF3_constructECDSASignPhysicalToken(ECDSALPF3HSM_Object *object);
564 
565 #if (DeviceFamily_PARENT == DeviceFamily_PARENT_CC27XX)
566 
571 void HSMLPF3_constructEDDSAGenPubKeyPhysicalToken(EDDSALPF3HSM_Object *object);
572 
578 void HSMLPF3_constructEDDSASignInitialPhysicalToken(EDDSALPF3HSM_Object *object);
579 
587 void HSMLPF3_constructEDDSAIntermediateHashPhysicalToken(const uint8_t *input,
588  size_t inputLength,
589  uint32_t tempAssetID);
590 
596 void HSMLPF3_constructEDDSASignUpdatePhysicalToken(EDDSALPF3HSM_Object *object);
597 
603 void HSMLPF3_constructEDDSASignFinalizePhysicalToken(EDDSALPF3HSM_Object *object);
604 
610 void HSMLPF3_constructEDDSAVerifyInitialPhysicalToken(EDDSALPF3HSM_Object *object);
611 
617 void HSMLPF3_constructEDDSAVerifyFinalizePhysicalToken(EDDSALPF3HSM_Object *object);
618 #endif /* (DeviceFamily_PARENT == DeviceFamily_PARENT_CC27XX) */
619 
627 void HSMLPF3_constructGCMToken(const AESGCMLPF3HSM_Object *object, bool saveIV, bool loadIV);
628 
636 void HSMLPF3_constructCCMToken(const AESCCMLPF3_Object *object, bool saveIV, bool loadIV);
637 
644 void HSMLPF3_constructAESECBOneStepPhysicalToken(AESECBLPF3_Object *object, uint8_t *key);
645 
652 void HSMLPF3_constructAESCTROneStepPhysicalToken(AESCTRLPF3_Object *object, uint8_t *key);
653 
654 /*
655  * @brief Constructs an AES-CBC one-step command token
656  *
657  * @param [in] object The AESCBCLPF3 object that contains necessary data
658  * @param [in] key Pointer to key material if it has been retrieved in plaintext
659  */
660 void HSMLPF3_constructAESCBCOneStepPhysicalToken(AESCBCLPF3_Object *object, uint8_t *key);
661 
669 void HSMLPF3_constructCMACToken(AESCMACLPF3_Object *object, bool isFirst, bool isFinal);
670 
671 #if (DeviceFamily_PARENT == DeviceFamily_PARENT_CC27XX)
672 
677 void HSMLPF3_constructRNGSwitchNRBGWithDefaultsPhysicalToken(HSMLPF3_NRBGMode HSMLPF3_nrbgMode);
678 
683 void HSMLPF3_constructRNGReseedDRBGPhysicalToken(void);
684 #endif /* (DeviceFamily_PARENT == DeviceFamily_PARENT_CC27XX) */
685 
692 void HSMLPF3_constructRNGGetRandomNumberPhysicalToken(uintptr_t entropyBuffer, size_t entropyRequested);
693 
700 void HSMLPF3_constructRNGGetRawRandomNumberPhysicalToken(uintptr_t entropyBuffer, size_t entropyRequested);
701 
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