hmac_hal.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include "hal/hmac_hal.h"
  7. #include "hal/hmac_ll.h"
  8. void hmac_hal_start(void)
  9. {
  10. hmac_ll_wait_idle();
  11. hmac_ll_start();
  12. }
  13. uint32_t hmac_hal_configure(hmac_hal_output_t config, uint32_t key_id)
  14. {
  15. hmac_ll_wait_idle();
  16. hmac_ll_config_output(config);
  17. hmac_ll_config_hw_key_id(key_id);
  18. hmac_ll_config_finish();
  19. hmac_ll_wait_idle();
  20. uint32_t conf_error = hmac_ll_query_config_error();
  21. if (conf_error) {
  22. hmac_ll_calc_finish();
  23. return 1;
  24. } else if (config != HMAC_OUTPUT_USER) {
  25. // In "downstream" mode, this will be the last hmac operation. Make sure HMAC is ready for
  26. // the other peripheral.
  27. hmac_ll_wait_idle();
  28. }
  29. return 0;
  30. }
  31. void hmac_hal_write_one_block_512(const void *block)
  32. {
  33. hmac_ll_wait_idle();
  34. hmac_ll_write_block_512(block);
  35. hmac_ll_wait_idle();
  36. hmac_ll_msg_one_block();
  37. }
  38. void hmac_hal_write_block_512(const void *block)
  39. {
  40. hmac_ll_wait_idle();
  41. hmac_ll_write_block_512(block);
  42. }
  43. void hmac_hal_next_block_padding(void)
  44. {
  45. hmac_ll_wait_idle();
  46. hmac_ll_msg_padding();
  47. }
  48. void hmac_hal_next_block_normal(void)
  49. {
  50. hmac_ll_wait_idle();
  51. hmac_ll_msg_continue();
  52. }
  53. void hmac_hal_read_result_256(void *result)
  54. {
  55. hmac_ll_wait_idle();
  56. hmac_ll_read_result_256(result);
  57. hmac_ll_calc_finish();
  58. }
  59. void hmac_hal_clean(void)
  60. {
  61. hmac_ll_wait_idle();
  62. hmac_ll_clean();
  63. }