STM32L4xx_HAL_Driver  1.14.0
CRYP Private Functions

Functions

static HAL_StatusTypeDef CRYP_SetInitVector (CRYP_HandleTypeDef *hcryp)
 Write the InitVector/InitCounter in IVRx registers. More...
 
static HAL_StatusTypeDef CRYP_SetKey (CRYP_HandleTypeDef *hcryp)
 Write the Key in KeyRx registers. More...
 
static HAL_StatusTypeDef CRYP_AES_IT (CRYP_HandleTypeDef *hcryp)
 Handle CRYP block input/output data handling under interruption. More...
 

Detailed Description

Function Documentation

◆ CRYP_AES_IT()

static HAL_StatusTypeDef CRYP_AES_IT ( CRYP_HandleTypeDef hcryp)
static

Handle CRYP block input/output data handling under interruption.

Note
The function is called under interruption only, once interruptions have been enabled by HAL_CRYPEx_AES_IT().
Parameters
hcryppointer to a CRYP_HandleTypeDef structure that contains the configuration information for CRYP module.
Return values
HALstatus

Definition at line 1605 of file stm32l4xx_hal_cryp.c.

1606 {
1607  uint32_t inputaddr;
1608  uint32_t outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr;
1609 
1610  if(hcryp->State == HAL_CRYP_STATE_BUSY)
1611  {
1612  if (hcryp->Init.OperatingMode != CRYP_ALGOMODE_KEYDERIVATION)
1613  {
1614  /* Read the last available output block from the Data Output Register */
1615  *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
1616  outputaddr+=4U;
1617  *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
1618  outputaddr+=4U;
1619  *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
1620  outputaddr+=4U;
1621  *(uint32_t*)(outputaddr) = hcryp->Instance->DOUTR;
1622  hcryp->pCrypOutBuffPtr += 16;
1623  hcryp->CrypOutCount -= 16U;
1624 
1625  }
1626  else
1627  {
1628  /* Read the derived key from the Key registers */
1629  if (hcryp->Init.KeySize == CRYP_KEYSIZE_256B)
1630  {
1631  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR7);
1632  outputaddr+=4U;
1633  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR6);
1634  outputaddr+=4U;
1635  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR5);
1636  outputaddr+=4U;
1637  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR4);
1638  outputaddr+=4U;
1639  }
1640 
1641  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR3);
1642  outputaddr+=4U;
1643  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR2);
1644  outputaddr+=4U;
1645  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR1);
1646  outputaddr+=4U;
1647  *(uint32_t*)(outputaddr) = __REV(hcryp->Instance->KEYR0);
1648  }
1649 
1650  /* In case of ciphering or deciphering, check if all output text has been retrieved;
1651  In case of key derivation, stop right there */
1652  if ((hcryp->CrypOutCount == 0U) || (hcryp->Init.OperatingMode == CRYP_ALGOMODE_KEYDERIVATION))
1653  {
1654  /* Disable Computation Complete Flag and Errors Interrupts */
1655  __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE|CRYP_IT_ERRIE);
1656  /* Change the CRYP state */
1657  hcryp->State = HAL_CRYP_STATE_READY;
1658 
1659  /* Process Unlocked */
1660  __HAL_UNLOCK(hcryp);
1661 
1662  /* Call computation complete callback */
1663 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
1664  hcryp->CompCpltCallback(hcryp);
1665 #else
1667 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
1668 
1669  return HAL_OK;
1670  }
1671  /* If suspension flag has been raised, suspend processing */
1672  else if (hcryp->SuspendRequest == HAL_CRYP_SUSPEND)
1673  {
1674  /* reset ModeSuspend */
1676 
1677  /* Disable Computation Complete Flag and Errors Interrupts */
1678  __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE|CRYP_IT_ERRIE);
1679  /* Change the CRYP state */
1681 
1682  /* Process Unlocked */
1683  __HAL_UNLOCK(hcryp);
1684 
1685  return HAL_OK;
1686  }
1687  else /* Process the rest of input data */
1688  {
1689  /* Get the Intput data address */
1690  inputaddr = (uint32_t)hcryp->pCrypInBuffPtr;
1691 
1692  /* Increment/decrement instance pointer/counter */
1693  hcryp->pCrypInBuffPtr += 16;
1694  hcryp->CrypInCount -= 16U;
1695 
1696  /* Write the next input block in the Data Input register */
1697  hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
1698  inputaddr+=4U;
1699  hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
1700  inputaddr+=4U;
1701  hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
1702  inputaddr+=4U;
1703  hcryp->Instance->DINR = *(uint32_t*)(inputaddr);
1704 
1705  return HAL_OK;
1706  }
1707  }
1708  else
1709  {
1710  return HAL_BUSY;
1711  }
1712 }
__IO HAL_CRYP_STATETypeDef State
__HAL_UNLOCK(hrtc)
HAL_SuspendTypeDef SuspendRequest
return HAL_OK
void(* CompCpltCallback)(struct __CRYP_HandleTypeDef *hcryp)
__weak void HAL_CRYPEx_ComputationCpltCallback(CRYP_HandleTypeDef *hcryp)
Computation completed callbacks.

◆ CRYP_SetInitVector()

static HAL_StatusTypeDef CRYP_SetInitVector ( CRYP_HandleTypeDef hcryp)
static

Write the InitVector/InitCounter in IVRx registers.

Parameters
hcryppointer to a CRYP_HandleTypeDef structure that contains the configuration information for CRYP module
Return values
None

Definition at line 1562 of file stm32l4xx_hal_cryp.c.

1563 {
1564  uint32_t ivaddr;
1565 
1566 #if !defined(AES_CR_NPBLB)
1567  if (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC)
1568  {
1569  hcryp->Instance->IVR3 = 0;
1570  hcryp->Instance->IVR2 = 0;
1571  hcryp->Instance->IVR1 = 0;
1572  hcryp->Instance->IVR0 = 0;
1573  }
1574  else
1575 #endif
1576  {
1577  if (hcryp->Init.pInitVect == NULL)
1578  {
1579  return HAL_ERROR;
1580  }
1581 
1582  ivaddr = (uint32_t)(hcryp->Init.pInitVect);
1583 
1584  hcryp->Instance->IVR3 = __REV(*(uint32_t*)(ivaddr));
1585  ivaddr+=4U;
1586  hcryp->Instance->IVR2 = __REV(*(uint32_t*)(ivaddr));
1587  ivaddr+=4U;
1588  hcryp->Instance->IVR1 = __REV(*(uint32_t*)(ivaddr));
1589  ivaddr+=4U;
1590  hcryp->Instance->IVR0 = __REV(*(uint32_t*)(ivaddr));
1591  }
1592  return HAL_OK;
1593 }
return HAL_OK

◆ CRYP_SetKey()

static HAL_StatusTypeDef CRYP_SetKey ( CRYP_HandleTypeDef hcryp)
static

Write the Key in KeyRx registers.

Parameters
hcryppointer to a CRYP_HandleTypeDef structure that contains the configuration information for CRYP module
Return values
None

Definition at line 1521 of file stm32l4xx_hal_cryp.c.

1522 {
1523  uint32_t keyaddr;
1524 
1525  if (hcryp->Init.pKey == NULL)
1526  {
1527  return HAL_ERROR;
1528  }
1529 
1530 
1531  keyaddr = (uint32_t)(hcryp->Init.pKey);
1532 
1533  if (hcryp->Init.KeySize == CRYP_KEYSIZE_256B)
1534  {
1535  hcryp->Instance->KEYR7 = __REV(*(uint32_t*)(keyaddr));
1536  keyaddr+=4U;
1537  hcryp->Instance->KEYR6 = __REV(*(uint32_t*)(keyaddr));
1538  keyaddr+=4U;
1539  hcryp->Instance->KEYR5 = __REV(*(uint32_t*)(keyaddr));
1540  keyaddr+=4U;
1541  hcryp->Instance->KEYR4 = __REV(*(uint32_t*)(keyaddr));
1542  keyaddr+=4U;
1543  }
1544 
1545  hcryp->Instance->KEYR3 = __REV(*(uint32_t*)(keyaddr));
1546  keyaddr+=4U;
1547  hcryp->Instance->KEYR2 = __REV(*(uint32_t*)(keyaddr));
1548  keyaddr+=4U;
1549  hcryp->Instance->KEYR1 = __REV(*(uint32_t*)(keyaddr));
1550  keyaddr+=4U;
1551  hcryp->Instance->KEYR0 = __REV(*(uint32_t*)(keyaddr));
1552 
1553  return HAL_OK;
1554 }
return HAL_OK