sec_crypto_kdf.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /*
  2. * Copyright (C) 2019-2020 Alibaba Group Holding Limited
  3. */
  4. #ifndef __SC_KDF_H__
  5. #define __SC_KDF_H__
  6. #include "sec_crypto_errcode.h"
  7. #include "sec_crypto_aes.h"
  8. #include "sec_crypto_sm4.h"
  9. #include "sec_crypto_mac.h"
  10. #include <stdint.h>
  11. typedef enum {
  12. SC_KDF_DERIVED_DFT_CHALLENGE_EK,
  13. SC_KDF_DERIVED_C910TJTAG_CHALLENGE_EK,
  14. SC_KDF_DERIVED_E902JTAG_CHALLENGE_EK,
  15. SC_KDF_DERIVED_IMAGE_EK,
  16. SC_KDF_DERIVED_SECURE_STORAGE_EK1,
  17. SC_KDF_DERIVED_SECURE_STORAGE_EK2,
  18. SC_KDF_DERIVED_SECURE_STORAGE_EK3,
  19. SC_KDF_DERIVED_SECURE_STORAGE_EK4,
  20. SC_KDF_DERIVED_SECURE_STORAGE_EK5,
  21. SC_KDF_DERIVED_SECURE_STORAGE_EK6,
  22. SC_KDF_DERIVED_SECURE_STORAGE_EK7,
  23. SC_KDF_DERIVED_SECURE_STORAGE_EK8,
  24. SC_KDF_DERIVED_SECURE_STORAGE_EK9,
  25. SC_KDF_DERIVED_SECURE_STORAGE_EK10,
  26. SC_KDF_DERIVED_SECURE_STORAGE_EK11,
  27. SC_KDF_DERIVED_SECURE_STORAGE_EK12,
  28. SC_KDF_DERIVED_SECURE_STORAGE_EK13,
  29. SC_KDF_DERIVED_SECURE_STORAGE_EK14,
  30. SC_KDF_DERIVED_SECURE_STORAGE_EK15,
  31. SC_KDF_DERIVED_SECURE_STORAGE_EK16,
  32. SC_KDF_DERIVED_RPMB_ACCESS_EK,
  33. SC_KDF_DERIVED_MAX,
  34. } sc_kdf_derived_key_t;
  35. typedef enum {
  36. SC_KDF_KEY_TYPE_AES_256,
  37. SC_KDF_KEY_TYPE_AES_192,
  38. SC_KDF_KEY_TYPE_AES_128,
  39. SC_KDF_KEY_TYPE_SM4,
  40. SC_KDF_KEY_TYPE_TDES_192,
  41. SC_KDF_KEY_TYPE_TDES_128,
  42. SC_KDF_KEY_TYPE_DES,
  43. /* for rpmb, str */
  44. /* SC_KDF_KEY_TYPE_HMAC_SHA256,
  45. */
  46. SC_KDF_KEY_TYPE_MAX,
  47. } sc_kdf_key_type_t;
  48. /**
  49. \brief KDF Ctrl Block
  50. */
  51. typedef struct {
  52. union {
  53. sc_aes_t *aes;
  54. sc_sm4_t *sm4;
  55. sc_mac_t *mac;
  56. };
  57. sc_kdf_key_type_t type;
  58. } sc_kdf_key_handle_t;
  59. /**
  60. \brief KDF Ctrl Block
  61. */
  62. typedef struct {
  63. void *priv;
  64. } sc_kdf_t;
  65. /**
  66. \brief kdf initialiez.
  67. \param[in] kdf Handle to operate.
  68. \param[in] idx Device id.
  69. \return error code
  70. */
  71. uint32_t sc_kdf_init(sc_kdf_t *kdf, uint32_t idx);
  72. /**
  73. \brief kdf uninitialiez.
  74. \param[in] kdf Handle to operate
  75. */
  76. void sc_kdf_uninit(sc_kdf_t *kdf);
  77. /**
  78. \brief Set key to algorithim engine.
  79. \param[in] handle Handle to cipher.
  80. \param[in] kdf Handle to operate.
  81. \param[in] dkey derived key type.
  82. \return error code
  83. */
  84. uint32_t sc_kdf_set_key(sc_kdf_t *kdf, sc_kdf_key_handle_t *handle,
  85. sc_kdf_derived_key_t dkey);
  86. #endif