11#include "hmac.h"
22
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>
74
85returncode_t libtocksync_hmac_simple (libtock_hmac_algorithm_t hmac_type ,
96 uint8_t * key_buffer , uint32_t key_length ,
@@ -14,19 +11,17 @@ returncode_t libtocksync_hmac_simple(libtock_hmac_algorithm_t hmac_type,
1411 ret = libtock_hmac_command_set_algorithm ((uint32_t ) hmac_type );
1512 if (ret != RETURNCODE_SUCCESS ) return ret ;
1613
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 ); };
2417
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 ); };
2721
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 ); };
3025
3126 ret = libtock_hmac_command_run ();
3227 if (ret != RETURNCODE_SUCCESS ) return ret ;
0 commit comments