| 
									
										
										
										
											2022-10-19 15:57:24 +08:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * SPDX-License-Identifier: Apache-2.0 | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2021-06-10 10:22:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include "stdio.h"
 | 
					
						
							|  |  |  | #include "hal/hmac_hal.h"
 | 
					
						
							|  |  |  | #include "hal/hmac_ll.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void hmac_hal_start(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     hmac_ll_wait_idle(); | 
					
						
							|  |  |  |     hmac_ll_start(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uint32_t hmac_hal_configure(hmac_hal_output_t config, uint32_t key_id) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     hmac_ll_wait_idle(); | 
					
						
							|  |  |  |     hmac_ll_config_output(config); | 
					
						
							|  |  |  |     hmac_ll_config_hw_key_id(key_id); | 
					
						
							|  |  |  |     hmac_ll_config_finish(); | 
					
						
							|  |  |  |     hmac_ll_wait_idle(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     uint32_t conf_error = hmac_ll_config_error(); | 
					
						
							|  |  |  |     if (conf_error) { | 
					
						
							|  |  |  |         hmac_ll_calc_finish(); | 
					
						
							|  |  |  |         return 1; | 
					
						
							|  |  |  |     } else if (config != HMAC_OUTPUT_USER) { | 
					
						
							|  |  |  |         // In "downstream" mode, this will be the last hmac operation. Make sure HMAC is ready for
 | 
					
						
							|  |  |  |         // the other peripheral.
 | 
					
						
							|  |  |  |         hmac_ll_wait_idle(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void hmac_hal_write_one_block_512(const void *block) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     hmac_ll_wait_idle(); | 
					
						
							|  |  |  |     hmac_ll_write_block_512(block); | 
					
						
							|  |  |  |     hmac_ll_wait_idle(); | 
					
						
							|  |  |  |     hmac_ll_msg_one_block(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void hmac_hal_write_block_512(const void *block) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     hmac_ll_wait_idle(); | 
					
						
							|  |  |  |     hmac_ll_write_block_512(block); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void hmac_hal_next_block_padding(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     hmac_ll_wait_idle(); | 
					
						
							|  |  |  |     hmac_ll_msg_padding(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void hmac_hal_next_block_normal(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     hmac_ll_wait_idle(); | 
					
						
							|  |  |  |     hmac_ll_msg_continue(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void hmac_hal_read_result_256(void *result) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     hmac_ll_wait_idle(); | 
					
						
							|  |  |  |     hmac_ll_read_result_256(result); | 
					
						
							|  |  |  |     hmac_ll_calc_finish(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void hmac_hal_clean(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     hmac_ll_wait_idle(); | 
					
						
							|  |  |  |     hmac_ll_clean(); | 
					
						
							|  |  |  | } |