LCOV - code coverage report
Current view: top level - src - uuid.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 0.0 % 24 0
Test Date: 2024-08-20 10:03:45 Functions: 0.0 % 2 0

            Line data    Source code
       1              : /* SPDX-License-Identifier: MIT OR GPL-3.0-only */
       2              : /* uuid.c
       3              :  * strophe XMPP client library -- UUID generation
       4              :  *
       5              :  * Copyright (C) 2015 Dmitry Podgorny <pasis.ua@gmail.com>
       6              :  *
       7              :  *  This software is provided AS-IS with no warranty, either express
       8              :  *  or implied.
       9              :  *
      10              :  *  This program is dual licensed under the MIT or GPLv3 licenses.
      11              :  */
      12              : 
      13              : /** @file
      14              :  *  Generation of UUID version 4 according to RFC4122.
      15              :  */
      16              : 
      17              : #include "strophe.h"
      18              : #include "common.h"
      19              : 
      20              : /** @def XMPP_UUID_LEN
      21              :  *  UUID length in string representation excluding '\0'.
      22              :  */
      23              : #define XMPP_UUID_LEN 36
      24              : 
      25              : /** Generate UUID version 4 in pre-allocated buffer.
      26              :  *
      27              :  *  @param ctx a Strophe context object
      28              :  *  @param uuid pre-allocated buffer of size (XMPP_UUID_LEN + 1)
      29              :  */
      30            0 : static void crypto_uuid_gen(xmpp_ctx_t *ctx, char *uuid)
      31              : {
      32            0 :     unsigned char buf[16];
      33            0 :     int i = 0; /* uuid iterator */
      34            0 :     int j = 0; /* buf iterator */
      35              : 
      36            0 :     static const char hex[] = {'0', '1', '2', '3', '4', '5', '6', '7',
      37              :                                '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
      38              : 
      39            0 :     xmpp_rand_bytes(ctx->rand, buf, sizeof(buf));
      40            0 :     buf[8] &= 0x3f;
      41            0 :     buf[8] |= 0x80;
      42            0 :     buf[6] &= 0x0f;
      43            0 :     buf[6] |= 0x40;
      44            0 :     while (i < XMPP_UUID_LEN) {
      45            0 :         if (i == 8 || i == 13 || i == 18 || i == 23)
      46            0 :             uuid[i++] = '-';
      47              :         else {
      48            0 :             uuid[i++] = hex[buf[j] >> 4];
      49            0 :             uuid[i++] = hex[buf[j] & 0x0f];
      50            0 :             ++j;
      51              :         }
      52              :     }
      53            0 :     uuid[XMPP_UUID_LEN] = '\0';
      54            0 : }
      55              : 
      56              : /** Generate UUID version 4.
      57              :  *  This function allocates memory for the resulting string and must be freed
      58              :  *  with xmpp_free().
      59              :  *
      60              :  *  @param ctx a Strophe context object
      61              :  *
      62              :  *  @return ASCIIZ string
      63              :  */
      64            0 : char *xmpp_uuid_gen(xmpp_ctx_t *ctx)
      65              : {
      66            0 :     char *uuid;
      67              : 
      68            0 :     uuid = strophe_alloc(ctx, XMPP_UUID_LEN + 1);
      69            0 :     if (uuid != NULL) {
      70            0 :         crypto_uuid_gen(ctx, uuid);
      71              :     }
      72            0 :     return uuid;
      73              : }
        

Generated by: LCOV version 2.0-1