|
1 | 1 | #include "hmac.h"
|
2 | 2 |
|
3 |
| -struct hmac_data { |
4 |
| - bool fired; |
5 |
| - returncode_t ret; |
6 |
| -}; |
7 |
| - |
8 |
| -static struct hmac_data result = {.fired = false}; |
9 |
| - |
10 |
| -static void hmac_cb_hmac(returncode_t ret) { |
11 |
| - result.fired = true; |
12 |
| - result.ret = ret; |
13 |
| -} |
14 |
| - |
15 | 3 | returncode_t libtocksync_hmac_simple(libtock_hmac_algorithm_t hmac_type,
|
16 | 4 | uint8_t* key_buffer, uint32_t key_length,
|
17 | 5 | uint8_t* input_buffer, uint32_t input_length,
|
18 | 6 | uint8_t* hmac_buffer, uint32_t hmac_length) {
|
19 | 7 | returncode_t ret;
|
20 | 8 |
|
21 |
| - result.fired = false; |
| 9 | + ret = libtock_hmac_command_set_algorithm((uint32_t) hmac_type); |
| 10 | + if (ret != RETURNCODE_SUCCESS) return ret; |
22 | 11 |
|
23 |
| - ret = libtock_hmac_simple(hmac_type, key_buffer, key_length, input_buffer, input_length, hmac_buffer, hmac_length, |
24 |
| - hmac_cb_hmac); |
| 12 | + ret = libtock_hmac_set_readonly_allow_key_buffer(key_buffer, key_length); |
25 | 13 | if (ret != RETURNCODE_SUCCESS) return ret;
|
26 | 14 |
|
27 |
| - // Wait for the callback. |
28 |
| - yield_for(&result.fired); |
29 |
| - if (result.ret != RETURNCODE_SUCCESS) return result.ret; |
| 15 | + ret = libtock_hmac_set_readonly_allow_data_buffer(input_buffer, input_length); |
| 16 | + if (ret != RETURNCODE_SUCCESS) goto exit1; |
30 | 17 |
|
31 |
| - ret = libtock_hmac_set_readonly_allow_key_buffer(NULL, 0); |
32 |
| - if (ret != RETURNCODE_SUCCESS) return ret; |
| 18 | + ret = libtock_hmac_set_readwrite_allow_destination_buffer(hmac_buffer, hmac_length); |
| 19 | + if (ret != RETURNCODE_SUCCESS) goto exit2; |
33 | 20 |
|
34 |
| - ret = libtock_hmac_set_readonly_allow_data_buffer(NULL, 0); |
35 |
| - if (ret != RETURNCODE_SUCCESS) return ret; |
| 21 | + ret = libtock_hmac_command_run(); |
| 22 | + if (ret != RETURNCODE_SUCCESS) goto exit3; |
36 | 23 |
|
37 |
| - ret = libtock_hmac_set_readwrite_allow_destination_buffer(NULL, 0); |
38 |
| - if (ret != RETURNCODE_SUCCESS) return ret; |
| 24 | + // Wait for the operation. |
| 25 | + ret = libtocksync_hmac_yield_wait_for(); |
| 26 | + |
| 27 | +exit3: |
| 28 | + libtock_hmac_set_readwrite_allow_destination_buffer(NULL, 0); |
| 29 | + |
| 30 | +exit2: |
| 31 | + libtock_hmac_set_readonly_allow_data_buffer(NULL, 0); |
| 32 | + |
| 33 | +exit1: |
| 34 | + libtock_hmac_set_readonly_allow_key_buffer(NULL, 0); |
39 | 35 |
|
40 |
| - return RETURNCODE_SUCCESS; |
| 36 | + return ret; |
41 | 37 | }
|
0 commit comments