LCOV - code coverage report
Current view: top level - aws-c-common/include/aws/common - zero.h (source / functions) Hit Total Coverage
Test: all_fuzz.info Lines: 4 4 100.0 %
Date: 2021-04-23 16:28:21 Functions: 0 0 -

          Line data    Source code
       1             : #ifndef AWS_COMMON_ZERO_H
       2             : #define AWS_COMMON_ZERO_H
       3             : 
       4             : /**
       5             :  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
       6             :  * SPDX-License-Identifier: Apache-2.0.
       7             :  */
       8             : 
       9             : #include <aws/common/stdbool.h>
      10             : #include <aws/common/stdint.h>
      11             : 
      12             : #include <string.h>
      13             : 
      14             : AWS_EXTERN_C_BEGIN
      15             : 
      16             : /**
      17             :  * Set each byte in the struct to zero.
      18             :  */
      19             : #define AWS_ZERO_STRUCT(object)                                                                                        \
      20      512468 :     do {                                                                                                               \
      21      512468 :         memset(&(object), 0, sizeof(object));                                                                          \
      22      512468 :     } while (0)
      23             : 
      24             : /**
      25             :  * Set each byte in the array to zero.
      26             :  * Does not work with arrays of unknown bound.
      27             :  */
      28             : #define AWS_ZERO_ARRAY(array) memset((void *)(array), 0, sizeof(array))
      29             : 
      30             : /**
      31             :  * Returns whether each byte in the object is zero.
      32             :  */
      33             : #ifdef CBMC
      34             : /* clang-format off */
      35             : #    define AWS_IS_ZEROED(object)                                                                                      \
      36             :         __CPROVER_forall {                                                                                             \
      37             :             int i;                                                                                                     \
      38             :             (i >= 0 && i < sizeof(object)) ==> ((const uint8_t *)&object)[i] == 0                                      \
      39             :         }
      40             : /* clang-format on */
      41             : #else
      42      257392 : #    define AWS_IS_ZEROED(object) aws_is_mem_zeroed(&(object), sizeof(object))
      43             : #endif
      44             : 
      45             : /**
      46             :  * Returns whether each byte is zero.
      47             :  */
      48             : AWS_STATIC_IMPL
      49             : bool aws_is_mem_zeroed(const void *buf, size_t bufsize);
      50             : 
      51             : /**
      52             :  * Securely zeroes a memory buffer. This function will attempt to ensure that
      53             :  * the compiler will not optimize away this zeroing operation.
      54             :  */
      55             : AWS_COMMON_API
      56             : void aws_secure_zero(void *pBuf, size_t bufsize);
      57             : 
      58             : #ifndef AWS_NO_STATIC_IMPL
      59             : #    include <aws/common/zero.inl>
      60             : #endif /* AWS_NO_STATIC_IMPL */
      61             : 
      62             : AWS_EXTERN_C_END
      63             : 
      64             : #endif /* AWS_COMMON_ZERO_H */

Generated by: LCOV version 1.13