1
1
#include "hmac.h"
2
2
3
- // would be in a libtock-sync/support.h or internal.h or similar
4
- #define SCOPED_ALLOW (method , buffer , length ) \
5
- inline void unallow_##buffer(returncode_t* sentinel##buffer) { if (sentinel##buffer == RETURNCODE_SUCCESS) method(NULL, 0); } \
6
- returncode_t ret_##buffer __attribute__((cleanup(unallow_##buffer))) = method(buffer, length); \
3
+ #include <libtock/defer.h>
7
4
8
5
returncode_t libtocksync_hmac_simple (libtock_hmac_algorithm_t hmac_type ,
9
6
uint8_t * key_buffer , uint32_t key_length ,
@@ -14,19 +11,17 @@ returncode_t libtocksync_hmac_simple(libtock_hmac_algorithm_t hmac_type,
14
11
ret = libtock_hmac_command_set_algorithm ((uint32_t ) hmac_type );
15
12
if (ret != RETURNCODE_SUCCESS ) return ret ;
16
13
17
- // Macro expands to this:
18
- //
19
- // inline void unallow_key_buffer(returncode_t* sentinel_key_buffer) { if (sentinel_key_buffer == RETURNCODE_SUCCESS) libtock_hmac_set_readonly_allow_key_buffer(NULL, 0); }
20
- // returncode_t ret_key_buffer __attribute__((cleanup(unallow_key_buffer))) = libtock_hmac_set_readonly_allow_key_buffer(key_buffer, key_length);
21
-
22
- SCOPED_ALLOW (libtock_hmac_set_readonly_allow_key_buffer , key_buffer , key_length );
23
- if (ret_key_buffer != RETURNCODE_SUCCESS ) return ret_key_buffer ;
14
+ ret = libtock_hmac_set_readonly_allow_key_buffer (key_buffer , key_length );
15
+ if (ret != RETURNCODE_SUCCESS ) return ret ;
16
+ defer { libtock_hmac_set_readonly_allow_key_buffer (NULL , 0 ); };
24
17
25
- SCOPED_ALLOW (libtock_hmac_set_readonly_allow_data_buffer , input_buffer , input_length );
26
- if (ret_input_buffer != RETURNCODE_SUCCESS ) return ret_input_buffer ;
18
+ ret = libtock_hmac_set_readonly_allow_data_buffer (input_buffer , input_length );
19
+ if (ret != RETURNCODE_SUCCESS ) return ret ;
20
+ defer { libtock_hmac_set_readonly_allow_data_buffer (NULL , 0 ); };
27
21
28
- SCOPED_ALLOW (libtock_hmac_set_readwrite_allow_destination_buffer , hmac_buffer , hmac_length );
29
- if (ret_hmac_buffer != RETURNCODE_SUCCESS ) return ret_hmac_buffer ;
22
+ ret = libtock_hmac_set_readwrite_allow_destination_buffer (hmac_buffer , hmac_length );
23
+ if (ret != RETURNCODE_SUCCESS ) return ret ;
24
+ defer { libtock_hmac_set_readwrite_allow_destination_buffer (NULL , 0 ); };
30
25
31
26
ret = libtock_hmac_command_run ();
32
27
if (ret != RETURNCODE_SUCCESS ) return ret ;
0 commit comments