kdf.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. /*
  2. * Copyright (C) 2019-2020 Alibaba Group Holding Limited
  3. */
  4. #ifndef __KDF_H__
  5. #define __KDF_H__
  6. #ifdef SEC_LIB_VERSION
  7. #include "drv/aes.h"
  8. #include "drv/sm4.h"
  9. #include "drv/common.h"
  10. #else
  11. #include "aes.h"
  12. #include "sm4.h"
  13. #include "common.h"
  14. #endif
  15. #include <stdint.h>
  16. typedef enum {
  17. KDF_ROOT_CV_UNIQUE_KEY,
  18. KDF_ROOT_CV_COMMON_KEY,
  19. KDF_ROOT_USER_UNIQUE_KEY,
  20. KDF_ROOT_USER_COMMON_KEY,
  21. KDF_ROOT_KEY_MAX,
  22. } csi_kdf_root_key_t;
  23. typedef enum {
  24. KDF_DERIVED_DFT_CHALLENGE_EK,
  25. KDF_DERIVED_C910TJTAG_CHALLENGE_EK,
  26. KDF_DERIVED_E902JTAG_CHALLENGE_EK,
  27. KDF_DERIVED_IMAGE_EK,
  28. KDF_DERIVED_SECURE_STORAGE_EK1,
  29. KDF_DERIVED_SECURE_STORAGE_EK2,
  30. KDF_DERIVED_SECURE_STORAGE_EK3,
  31. KDF_DERIVED_SECURE_STORAGE_EK4,
  32. KDF_DERIVED_SECURE_STORAGE_EK5,
  33. KDF_DERIVED_SECURE_STORAGE_EK6,
  34. KDF_DERIVED_SECURE_STORAGE_EK7,
  35. KDF_DERIVED_SECURE_STORAGE_EK8,
  36. KDF_DERIVED_SECURE_STORAGE_EK9,
  37. KDF_DERIVED_SECURE_STORAGE_EK10,
  38. KDF_DERIVED_SECURE_STORAGE_EK11,
  39. KDF_DERIVED_SECURE_STORAGE_EK12,
  40. KDF_DERIVED_SECURE_STORAGE_EK13,
  41. KDF_DERIVED_SECURE_STORAGE_EK14,
  42. KDF_DERIVED_SECURE_STORAGE_EK15,
  43. KDF_DERIVED_SECURE_STORAGE_EK16,
  44. KDF_DERIVED_RPMB_ACCESS_EK,
  45. KDF_DERIVED_MAX,
  46. } csi_kdf_derived_key_t;
  47. typedef enum {
  48. KDF_KEY_TYPE_AES_256,
  49. KDF_KEY_TYPE_AES_192,
  50. KDF_KEY_TYPE_AES_128,
  51. KDF_KEY_TYPE_SM4,
  52. KDF_KEY_TYPE_TDES_192,
  53. KDF_KEY_TYPE_TDES_128,
  54. KDF_KEY_TYPE_DES,
  55. /* for rpmb, str */
  56. /* KDF_KEY_TYPE_HMAC_SHA256,
  57. */
  58. KDF_KEY_TYPE_MAX,
  59. } csi_kdf_key_type_t;
  60. typedef struct key_attr_tag {
  61. uint8_t len_in_byte;
  62. uint8_t valid;
  63. uint32_t offset;
  64. } csi_kdf_key_attr_t;
  65. /**
  66. \brief KDF Ctrl Block
  67. */
  68. typedef struct {
  69. union {
  70. csi_aes_t *aes;
  71. csi_sm4_t *sm4;
  72. };
  73. csi_kdf_key_type_t type;
  74. } csi_kdf_key_handle_t;
  75. /**
  76. \brief KDF Ctrl Block
  77. */
  78. typedef struct {
  79. csi_dev_t dev;
  80. void *priv;
  81. } csi_kdf_t;
  82. /**
  83. \brief kdf initialiez.
  84. \param[in] kdf Handle to operate.
  85. \param[in] idx Device id.
  86. \return error code
  87. */
  88. csi_error_t csi_kdf_init(csi_kdf_t *kdf, uint32_t idx);
  89. /**
  90. \brief kdf uninitialiez.
  91. \param[in] kdf Handle to operate
  92. */
  93. void csi_kdf_uninit(csi_kdf_t *kdf);
  94. /**
  95. \brief Derive key function.
  96. \param[in] kdf Handle to operate.
  97. \param[in] rkey derive source root key type.
  98. \param[in] dkey derived key type from root key.
  99. \return error code
  100. */
  101. csi_error_t csi_kdf_derived_key(csi_kdf_t *kdf, csi_kdf_root_key_t rkey,
  102. csi_kdf_derived_key_t dkey);
  103. /**
  104. \brief Destroy derived key in storage.
  105. \param[in] kdf Handle to operate.
  106. \param[in] dkey derived key type.
  107. \return error code
  108. */
  109. csi_error_t csi_kdf_destory_key(csi_kdf_t *kdf, csi_kdf_derived_key_t dkey);
  110. // xiaoxia: keyram layout config macro
  111. /**
  112. \brief Set key to algorithim engine.
  113. \param[in] kdf Handle to operate.
  114. \param[in] handle Handle to cipher.
  115. \param[in] dkey derived key type.
  116. \return error code
  117. */
  118. csi_error_t csi_kdf_set_key(csi_kdf_t *kdf, csi_kdf_key_handle_t *handle,
  119. csi_kdf_derived_key_t dkey);
  120. /**
  121. \brief Clear key in algorithim engine.
  122. \param[in] kdf Handle to operate.
  123. \param[in] dkey derived key type.
  124. \return error code
  125. */
  126. csi_error_t csi_kdf_clear_key(csi_kdf_t *kdf, csi_kdf_derived_key_t dkey);
  127. /**
  128. \brief Get key attribute.
  129. \param[in] kdf Handle to operate.
  130. \param[in] dkey derived key type.
  131. \param[out] attr Buffer to get attribute.
  132. \return error code
  133. */
  134. csi_error_t csi_kdf_get_key_attr(csi_kdf_t *kdf, csi_kdf_derived_key_t dkey,
  135. csi_kdf_key_attr_t *attr);
  136. /**
  137. \brief kdf generate hmac key.
  138. \param[in] kdf Handle to operate
  139. */
  140. csi_error_t csi_kdf_gen_hmac_key(uint8_t* key,uint32_t * length);
  141. #endif