File indexing completed on 2025-05-11 08:23:35
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #ifndef STM32H7xx_HAL_HASH_H
0021 #define STM32H7xx_HAL_HASH_H
0022
0023 #ifdef __cplusplus
0024 extern "C" {
0025 #endif
0026
0027
0028 #include "stm32h7xx_hal_def.h"
0029
0030
0031
0032
0033 #if defined (HASH)
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047 typedef struct
0048 {
0049 uint32_t DataType;
0050
0051
0052 uint32_t KeySize;
0053
0054 uint8_t *pKey;
0055
0056 } HASH_InitTypeDef;
0057
0058
0059
0060
0061 typedef enum
0062 {
0063 HAL_HASH_STATE_RESET = 0x00U,
0064 HAL_HASH_STATE_READY = 0x01U,
0065 HAL_HASH_STATE_BUSY = 0x02U,
0066 HAL_HASH_STATE_TIMEOUT = 0x06U,
0067 HAL_HASH_STATE_ERROR = 0x07U,
0068 HAL_HASH_STATE_SUSPENDED = 0x08U
0069 } HAL_HASH_StateTypeDef;
0070
0071
0072
0073
0074 typedef enum
0075 {
0076 HAL_HASH_PHASE_READY = 0x01U,
0077 HAL_HASH_PHASE_PROCESS = 0x02U,
0078 HAL_HASH_PHASE_HMAC_STEP_1 = 0x03U,
0079
0080 HAL_HASH_PHASE_HMAC_STEP_2 = 0x04U,
0081
0082 HAL_HASH_PHASE_HMAC_STEP_3 = 0x05U
0083
0084 } HAL_HASH_PhaseTypeDef;
0085
0086
0087
0088
0089 typedef enum
0090 {
0091 HAL_HASH_SUSPEND_NONE = 0x00U,
0092 HAL_HASH_SUSPEND = 0x01U
0093 } HAL_HASH_SuspendTypeDef;
0094
0095 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1U)
0096
0097
0098
0099 typedef enum
0100 {
0101 HAL_HASH_MSPINIT_CB_ID = 0x00U,
0102 HAL_HASH_MSPDEINIT_CB_ID = 0x01U,
0103 HAL_HASH_INPUTCPLT_CB_ID = 0x02U,
0104 HAL_HASH_DGSTCPLT_CB_ID = 0x03U,
0105 HAL_HASH_ERROR_CB_ID = 0x04U,
0106 } HAL_HASH_CallbackIDTypeDef;
0107 #endif
0108
0109
0110
0111
0112
0113 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
0114 typedef struct __HASH_HandleTypeDef
0115 #else
0116 typedef struct
0117 #endif
0118 {
0119 HASH_InitTypeDef Init;
0120
0121 uint8_t *pHashInBuffPtr;
0122
0123 uint8_t *pHashOutBuffPtr;
0124
0125 uint8_t *pHashKeyBuffPtr;
0126
0127 uint8_t *pHashMsgBuffPtr;
0128
0129 uint32_t HashBuffSize;
0130
0131 __IO uint32_t HashInCount;
0132
0133 __IO uint32_t HashITCounter;
0134
0135 __IO uint32_t HashKeyCount;
0136
0137 HAL_StatusTypeDef Status;
0138
0139 HAL_HASH_PhaseTypeDef Phase;
0140
0141 DMA_HandleTypeDef *hdmain;
0142
0143 HAL_LockTypeDef Lock;
0144
0145 __IO HAL_HASH_StateTypeDef State;
0146
0147 HAL_HASH_SuspendTypeDef SuspendRequest;
0148
0149 FlagStatus DigestCalculationDisable;
0150
0151 __IO uint32_t NbWordsAlreadyPushed;
0152
0153 __IO uint32_t ErrorCode;
0154
0155 __IO uint32_t Accumulation;
0156
0157 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
0158 void (* InCpltCallback)(struct __HASH_HandleTypeDef *hhash);
0159
0160 void (* DgstCpltCallback)(struct __HASH_HandleTypeDef *hhash);
0161
0162 void (* ErrorCallback)(struct __HASH_HandleTypeDef *hhash);
0163
0164 void (* MspInitCallback)(struct __HASH_HandleTypeDef *hhash);
0165
0166 void (* MspDeInitCallback)(struct __HASH_HandleTypeDef *hhash);
0167
0168 #endif
0169 } HASH_HandleTypeDef;
0170
0171 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1U)
0172
0173
0174
0175 typedef void (*pHASH_CallbackTypeDef)(HASH_HandleTypeDef *hhash);
0176 #endif
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193 #define HASH_ALGOSELECTION_SHA1 0x00000000U
0194 #define HASH_ALGOSELECTION_MD5 HASH_CR_ALGO_0
0195 #define HASH_ALGOSELECTION_SHA224 HASH_CR_ALGO_1
0196 #define HASH_ALGOSELECTION_SHA256 HASH_CR_ALGO
0197
0198
0199
0200
0201
0202
0203
0204
0205 #define HASH_ALGOMODE_HASH 0x00000000U
0206 #define HASH_ALGOMODE_HMAC HASH_CR_MODE
0207
0208
0209
0210
0211
0212
0213
0214
0215 #define HASH_DATATYPE_32B 0x00000000U
0216 #define HASH_DATATYPE_16B HASH_CR_DATATYPE_0
0217 #define HASH_DATATYPE_8B HASH_CR_DATATYPE_1
0218 #define HASH_DATATYPE_1B HASH_CR_DATATYPE
0219
0220
0221
0222
0223
0224
0225
0226
0227 #define HASH_HMAC_KEYTYPE_SHORTKEY 0x00000000U
0228 #define HASH_HMAC_KEYTYPE_LONGKEY HASH_CR_LKEY
0229
0230
0231
0232
0233
0234
0235
0236
0237 #define HASH_FLAG_DINIS HASH_SR_DINIS
0238 #define HASH_FLAG_DCIS HASH_SR_DCIS
0239 #define HASH_FLAG_DMAS HASH_SR_DMAS
0240 #define HASH_FLAG_BUSY HASH_SR_BUSY
0241 #define HASH_FLAG_DINNE HASH_CR_DINNE
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251 #define HASH_IT_DINI HASH_IMR_DINIE
0252 #define HASH_IT_DCI HASH_IMR_DCIE
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262 #define HAL_HASH_ERROR_NONE 0x00000000U
0263 #define HAL_HASH_ERROR_IT 0x00000001U
0264 #define HAL_HASH_ERROR_DMA 0x00000002U
0265 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1U)
0266 #define HAL_HASH_ERROR_INVALID_CALLBACK 0x00000004U
0267 #endif
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292 #define __HAL_HASH_GET_FLAG(__FLAG__) (((__FLAG__) > 8U) ? \
0293 ((HASH->CR & (__FLAG__)) == (__FLAG__)) :\
0294 ((HASH->SR & (__FLAG__)) == (__FLAG__)) )
0295
0296
0297
0298
0299
0300
0301
0302
0303
0304 #define __HAL_HASH_CLEAR_FLAG(__FLAG__) CLEAR_BIT(HASH->SR, (__FLAG__))
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314 #define __HAL_HASH_ENABLE_IT(__INTERRUPT__) SET_BIT(HASH->IMR, (__INTERRUPT__))
0315
0316
0317
0318
0319
0320
0321
0322
0323 #define __HAL_HASH_DISABLE_IT(__INTERRUPT__) CLEAR_BIT(HASH->IMR, (__INTERRUPT__))
0324
0325
0326
0327
0328
0329
0330 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
0331 #define __HAL_HASH_RESET_HANDLE_STATE(__HANDLE__) do{\
0332 (__HANDLE__)->State = HAL_HASH_STATE_RESET;\
0333 (__HANDLE__)->MspInitCallback = NULL; \
0334 (__HANDLE__)->MspDeInitCallback = NULL; \
0335 }while(0)
0336 #else
0337 #define __HAL_HASH_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_HASH_STATE_RESET)
0338 #endif
0339
0340
0341
0342
0343
0344
0345 #define __HAL_HASH_RESET_HANDLE_STATUS(__HANDLE__) ((__HANDLE__)->Status = HAL_OK)
0346
0347
0348
0349
0350
0351
0352 #define __HAL_HASH_SET_MDMAT() SET_BIT(HASH->CR, HASH_CR_MDMAT)
0353
0354
0355
0356
0357
0358 #define __HAL_HASH_RESET_MDMAT() CLEAR_BIT(HASH->CR, HASH_CR_MDMAT)
0359
0360
0361
0362
0363
0364
0365 #define __HAL_HASH_START_DIGEST() SET_BIT(HASH->STR, HASH_STR_DCAL)
0366
0367
0368
0369
0370
0371
0372 #define __HAL_HASH_SET_NBVALIDBITS(__SIZE__) MODIFY_REG(HASH->STR, HASH_STR_NBLW, 8U * ((__SIZE__) % 4U))
0373
0374
0375
0376
0377
0378 #define __HAL_HASH_INIT() SET_BIT(HASH->CR, HASH_CR_INIT)
0379
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394 #define HASH_DIGEST_LENGTH() ((READ_BIT(HASH->CR, HASH_CR_ALGO) == HASH_ALGOSELECTION_SHA1) ? 20U : \
0395 ((READ_BIT(HASH->CR, HASH_CR_ALGO) == HASH_ALGOSELECTION_SHA224) ? 28U : \
0396 ((READ_BIT(HASH->CR, HASH_CR_ALGO) == HASH_ALGOSELECTION_SHA256) ? 32U : 16U ) ) )
0397
0398
0399
0400
0401 #define HASH_NBW_PUSHED() ((READ_BIT(HASH->CR, HASH_CR_NBW)) >> 8U)
0402
0403
0404
0405
0406
0407
0408 #define IS_HASH_DATATYPE(__DATATYPE__) (((__DATATYPE__) == HASH_DATATYPE_32B)|| \
0409 ((__DATATYPE__) == HASH_DATATYPE_16B)|| \
0410 ((__DATATYPE__) == HASH_DATATYPE_8B) || \
0411 ((__DATATYPE__) == HASH_DATATYPE_1B))
0412
0413
0414
0415
0416
0417
0418
0419
0420 #define IS_HASH_DMA_MULTIBUFFER_SIZE(__SIZE__) ((READ_BIT(HASH->CR, HASH_CR_MDMAT) == 0U) || (((__SIZE__) % 4U) == 0U))
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430 #define IS_HMAC_DMA_MULTIBUFFER_SIZE(__HANDLE__,__SIZE__) ((((__HANDLE__)->DigestCalculationDisable) == RESET)\
0431 || (((__SIZE__) % 4U) == 0U))
0432
0433
0434
0435
0436
0437 #define IS_HASH_PROCESSING(__HANDLE__) ((__HANDLE__)->Phase == HAL_HASH_PHASE_PROCESS)
0438
0439
0440
0441
0442
0443
0444 #define IS_HMAC_PROCESSING(__HANDLE__) (((__HANDLE__)->Phase == HAL_HASH_PHASE_HMAC_STEP_1) || \
0445 ((__HANDLE__)->Phase == HAL_HASH_PHASE_HMAC_STEP_2) || \
0446 ((__HANDLE__)->Phase == HAL_HASH_PHASE_HMAC_STEP_3))
0447
0448
0449
0450
0451
0452
0453 #include "stm32h7xx_hal_hash_ex.h"
0454
0455
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465 HAL_StatusTypeDef HAL_HASH_Init(HASH_HandleTypeDef *hhash);
0466 HAL_StatusTypeDef HAL_HASH_DeInit(HASH_HandleTypeDef *hhash);
0467 void HAL_HASH_MspInit(HASH_HandleTypeDef *hhash);
0468 void HAL_HASH_MspDeInit(HASH_HandleTypeDef *hhash);
0469 void HAL_HASH_InCpltCallback(HASH_HandleTypeDef *hhash);
0470 void HAL_HASH_DgstCpltCallback(HASH_HandleTypeDef *hhash);
0471 void HAL_HASH_ErrorCallback(HASH_HandleTypeDef *hhash);
0472
0473 #if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
0474 HAL_StatusTypeDef HAL_HASH_RegisterCallback(HASH_HandleTypeDef *hhash, HAL_HASH_CallbackIDTypeDef CallbackID,
0475 pHASH_CallbackTypeDef pCallback);
0476 HAL_StatusTypeDef HAL_HASH_UnRegisterCallback(HASH_HandleTypeDef *hhash, HAL_HASH_CallbackIDTypeDef CallbackID);
0477 #endif
0478
0479
0480
0481
0482
0483
0484
0485
0486
0487
0488
0489
0490 HAL_StatusTypeDef HAL_HASH_SHA1_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer,
0491 uint32_t Timeout);
0492 HAL_StatusTypeDef HAL_HASH_MD5_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer,
0493 uint32_t Timeout);
0494 HAL_StatusTypeDef HAL_HASH_MD5_Accmlt(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
0495 HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
0496 HAL_StatusTypeDef HAL_HASH_MD5_Accmlt_End(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size,
0497 uint8_t *pOutBuffer, uint32_t Timeout);
0498 HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt_End(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size,
0499 uint8_t *pOutBuffer, uint32_t Timeout);
0500
0501
0502
0503
0504
0505
0506
0507
0508
0509
0510
0511 HAL_StatusTypeDef HAL_HASH_SHA1_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size,
0512 uint8_t *pOutBuffer);
0513 HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
0514 HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt_End_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size,
0515 uint8_t *pOutBuffer);
0516 HAL_StatusTypeDef HAL_HASH_MD5_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size,
0517 uint8_t *pOutBuffer);
0518 HAL_StatusTypeDef HAL_HASH_MD5_Accmlt_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
0519 HAL_StatusTypeDef HAL_HASH_MD5_Accmlt_End_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size,
0520 uint8_t *pOutBuffer);
0521 void HAL_HASH_IRQHandler(HASH_HandleTypeDef *hhash);
0522
0523
0524
0525
0526
0527
0528
0529
0530
0531 HAL_StatusTypeDef HAL_HASH_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
0532 HAL_StatusTypeDef HAL_HASH_SHA1_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout);
0533 HAL_StatusTypeDef HAL_HASH_MD5_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
0534 HAL_StatusTypeDef HAL_HASH_MD5_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout);
0535
0536
0537
0538
0539
0540
0541
0542
0543
0544
0545 HAL_StatusTypeDef HAL_HMAC_SHA1_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer,
0546 uint32_t Timeout);
0547 HAL_StatusTypeDef HAL_HMAC_MD5_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer,
0548 uint32_t Timeout);
0549
0550
0551
0552
0553
0554
0555
0556
0557
0558 HAL_StatusTypeDef HAL_HMAC_MD5_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size,
0559 uint8_t *pOutBuffer);
0560 HAL_StatusTypeDef HAL_HMAC_SHA1_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size,
0561 uint8_t *pOutBuffer);
0562
0563
0564
0565
0566
0567
0568
0569
0570
0571
0572 HAL_StatusTypeDef HAL_HMAC_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
0573 HAL_StatusTypeDef HAL_HMAC_MD5_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
0574
0575
0576
0577
0578
0579
0580
0581
0582
0583
0584
0585 HAL_HASH_StateTypeDef HAL_HASH_GetState(HASH_HandleTypeDef *hhash);
0586 HAL_StatusTypeDef HAL_HASH_GetStatus(HASH_HandleTypeDef *hhash);
0587 void HAL_HASH_ContextSaving(HASH_HandleTypeDef *hhash, uint8_t *pMemBuffer);
0588 void HAL_HASH_ContextRestoring(HASH_HandleTypeDef *hhash, uint8_t *pMemBuffer);
0589 void HAL_HASH_SwFeed_ProcessSuspend(HASH_HandleTypeDef *hhash);
0590 HAL_StatusTypeDef HAL_HASH_DMAFeed_ProcessSuspend(HASH_HandleTypeDef *hhash);
0591 uint32_t HAL_HASH_GetError(HASH_HandleTypeDef *hhash);
0592
0593
0594
0595
0596
0597
0598
0599
0600
0601
0602
0603
0604
0605
0606
0607
0608 HAL_StatusTypeDef HASH_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer,
0609 uint32_t Timeout, uint32_t Algorithm);
0610 HAL_StatusTypeDef HASH_Accumulate(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint32_t Algorithm);
0611 HAL_StatusTypeDef HASH_Accumulate_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint32_t Algorithm);
0612 HAL_StatusTypeDef HASH_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer,
0613 uint32_t Algorithm);
0614 HAL_StatusTypeDef HASH_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint32_t Algorithm);
0615 HAL_StatusTypeDef HASH_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout);
0616 HAL_StatusTypeDef HMAC_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer,
0617 uint32_t Timeout, uint32_t Algorithm);
0618 HAL_StatusTypeDef HMAC_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t *pOutBuffer,
0619 uint32_t Algorithm);
0620 HAL_StatusTypeDef HMAC_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint32_t Algorithm);
0621
0622
0623
0624
0625
0626
0627
0628
0629 #endif
0630
0631
0632
0633
0634
0635 #ifdef __cplusplus
0636 }
0637 #endif
0638
0639
0640 #endif
0641