LCOV - code coverage report
Current view: top level - zephyr/sys - uuid.h Coverage Total Hit
Test: new.info Lines: 100.0 % 15 15
Test Date: 2025-09-05 20:47:19

            Line data    Source code
       1            1 : /*
       2              :  * Copyright (c) 2025, SECO Mind Srl
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : #ifndef ZEPHYR_INCLUDE_SYS_UUID_H_
       8              : #define ZEPHYR_INCLUDE_SYS_UUID_H_
       9              : 
      10              : /**
      11              :  * @file
      12              :  *
      13              :  * @brief Utility functions for the generation and parsing of Universal Unique Identifier.
      14              :  * @details This driver is compliant with RFC9562: https://datatracker.ietf.org/doc/rfc9562/
      15              :  */
      16              : 
      17              : #include <zephyr/kernel.h>
      18              : #include <zephyr/types.h>
      19              : 
      20              : #ifdef __cplusplus
      21              : extern "C" {
      22              : #endif
      23              : 
      24              : /**
      25              :  * @defgroup uuid UUID
      26              :  * @since 4.0
      27              :  * @version 0.1.0
      28              :  * @ingroup utilities
      29              :  * @{
      30              :  */
      31              : 
      32              : /** @brief Number of bytes in the binary representation of a UUID. */
      33            1 : #define UUID_SIZE 16U
      34              : 
      35              : /** @brief Length of the UUID canonical string representation, including the NULL terminator. */
      36            1 : #define UUID_STR_LEN 37U
      37              : 
      38              : /** @brief Length of the UUID base64 string representation, including the NULL terminator. */
      39            1 : #define UUID_BASE64_LEN 25U
      40              : 
      41              : /**
      42              :  * @brief Length of the UUID base64 URL and filename safe string representation, including the
      43              :  * NULL terminator.
      44              :  */
      45            1 : #define UUID_BASE64URL_LEN 23U
      46              : 
      47              : /** @brief Binary representation of a UUID. */
      48            1 : struct uuid {
      49              :         /** @cond INTERNAL_HIDDEN */
      50              :         uint8_t val[UUID_SIZE];
      51              :         /** @endcond */
      52              : };
      53              : 
      54              : /**
      55              :  * @brief Generate a UUIDv4.
      56              :  *
      57              :  * @param out The UUID where the result will be written.
      58              :  *
      59              :  * @retval 0 The UUID has been correctly generated and stored in @p out
      60              :  * @retval -EINVAL @p out is not acceptable
      61              :  */
      62            1 : int uuid_generate_v4(struct uuid *out);
      63              : 
      64              : /**
      65              :  * @brief Generate a UUIDv5.
      66              :  *
      67              :  * @details This function computes a deterministic UUID starting from a namespace UUID and binary
      68              :  * data.
      69              :  *
      70              :  * @param ns A pointer to an UUID to be used as namespace.
      71              :  * @param data A pointer to the data that will be hashed to produce the UUID.
      72              :  * @param data_size The size of the data buffer.
      73              :  * @param out The UUID where the result will be written.
      74              :  *
      75              :  * @retval 0 The UUID has been correctly generated and stored in @p out
      76              :  * @retval -EINVAL @p out is not acceptable
      77              :  * @retval -ENOMEM Memory allocation failed
      78              :  * @retval -ENOTSUP mbedTLS returned an unrecognized error
      79              :  */
      80            1 : int uuid_generate_v5(const struct uuid *ns, const void *data, size_t data_size,
      81              :                      struct uuid *out);
      82              : 
      83              : /**
      84              :  * @brief Copy an UUID into another UUID.
      85              :  *
      86              :  * @param data Input data to copy.
      87              :  * @param out Destination for the copy.
      88              :  *
      89              :  * @retval 0 The UUID has been correctly copied in @p dst
      90              :  * @retval -EINVAL @p dst is not acceptable
      91              :  */
      92            1 : int uuid_copy(const struct uuid *data, struct uuid *out);
      93              : 
      94              : /**
      95              :  * @brief Create a uuid_t from a binary (big-endian) formatted UUID.
      96              :  *
      97              :  * @param data The buffer where the binary UUID is stored in a big-endian order.
      98              :  * @param out The UUID where the result will be written.
      99              :  *
     100              :  * @retval 0 The UUID has been correctly parsed and stored in @p out
     101              :  * @retval -EINVAL @p data or @p out are not acceptable
     102              :  */
     103            1 : int uuid_from_buffer(const uint8_t data[UUID_SIZE], struct uuid *out);
     104              : 
     105              : /**
     106              :  * @brief Parse a UUID from its canonical (RFC9562) string representation.
     107              :  *
     108              :  * @param data A pointer to the string to be parsed.
     109              :  * @param out The UUID where the result will be written.
     110              :  *
     111              :  * @retval 0 The UUID has been correctly parsed and stored in @p out
     112              :  * @retval -EINVAL @p input or @p out are not acceptable
     113              :  */
     114            1 : int uuid_from_string(const char data[UUID_STR_LEN], struct uuid *out);
     115              : 
     116              : /**
     117              :  * @brief Create a uuid_t from a binary (big-endian) formatted UUID.
     118              :  *
     119              :  * @param data The input UUID to store in the buffer.
     120              :  * @param out The buffer where the binary UUID is stored in a big-endian order.
     121              :  *
     122              :  * @retval 0 The UUID has been correctly parsed and stored in @p buff
     123              :  * @retval -EINVAL @p buff is not acceptable
     124              :  */
     125            1 : int uuid_to_buffer(const struct uuid *data, uint8_t out[UUID_SIZE]);
     126              : 
     127              : /**
     128              :  * @brief Convert a UUID to its canonical (RFC9562) string representation.
     129              :  *
     130              :  * @param data The UUID to convert to string.
     131              :  * @param out A pointer to a previously allocated buffer where the result will be written.
     132              :  *
     133              :  * @retval 0 The UUID has been converted and written in @p out
     134              :  * @retval -EINVAL @p out is not acceptable
     135              :  */
     136            1 : int uuid_to_string(const struct uuid *data, char out[UUID_STR_LEN]);
     137              : 
     138              : /**
     139              :  * @brief Convert a UUID to its base 64 (RFC 3548, RFC 4648) string representation.
     140              :  *
     141              :  * @param data The UUID to convert to string.
     142              :  * @param out A pointer to a previously allocated buffer where the result will be written.
     143              :  *
     144              :  * @retval 0 The UUID has been converted and written in @p out
     145              :  * @retval -EINVAL @p out is not acceptable
     146              :  */
     147            1 : int uuid_to_base64(const struct uuid *data, char out[UUID_BASE64_LEN]);
     148              : 
     149              : /**
     150              :  * @brief Convert a UUID to its base 64 (RFC 4648 sec. 5) URL and filename safe string
     151              :  * representation.
     152              :  *
     153              :  * @param data The UUID to convert to string.
     154              :  * @param out A pointer to a previously allocated buffer where the result will be written.
     155              :  *
     156              :  * @retval 0 The UUID has been converted and written in @p out
     157              :  * @retval -EINVAL @p out is not acceptable
     158              :  */
     159            1 : int uuid_to_base64url(const struct uuid *data, char out[UUID_BASE64URL_LEN]);
     160              : 
     161              : /**
     162              :  * @}
     163              :  */
     164              : 
     165              : #ifdef __cplusplus
     166              : }
     167              : #endif
     168              : 
     169              : #endif /* ZEPHYR_INCLUDE_SYS_UUID_H_ */
        

Generated by: LCOV version 2.0-1