Loading...
Searching...
No Matches
uuid.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2018 Freie Universität Berlin
3 * Copyright (C) 2018 Inria
4 *
5 * This file is subject to the terms and conditions of the GNU Lesser
6 * General Public License v2.1. See the file LICENSE in the top level
7 * directory for more details.
8 */
9
10#pragma once
11
27
28#include <stdbool.h>
29#include <stdint.h>
30#include <stdlib.h>
31#include <string.h>
32#include "byteorder.h"
33
34#ifdef __cplusplus
35extern "C" {
36#endif
37
38#define UUID_NODE_LEN (6U)
39
40#define UUID_STR_LEN (36U)
41
46#define UUID_V1 (0x01)
47#define UUID_V2 (0x02)
48#define UUID_V3 (0x03)
49#define UUID_V4 (0x04)
50#define UUID_V5 (0x05)
52
56#define UUID_VERSION_MASK (0xF000)
57
73
82extern const uuid_t uuid_namespace_dns;
83extern const uuid_t uuid_namespace_url;
84extern const uuid_t uuid_namespace_iso;
85extern const uuid_t uuid_namespace_x500;
87
96void uuid_v3(uuid_t *uuid, const uuid_t *ns, const uint8_t *name, size_t len);
97
103void uuid_v4(uuid_t *uuid);
104
113void uuid_v5(uuid_t *uuid, const uuid_t *ns, const uint8_t *name, size_t len);
114
122static inline unsigned uuid_version(const uuid_t *uuid)
123{
124 uint16_t time_hi_vers = byteorder_ntohs(uuid->time_hi);
125
126 return (time_hi_vers & 0xF000) >> 12;
127}
128
137static inline bool uuid_equal(const uuid_t *uuid1, const uuid_t *uuid2)
138{
139 return (memcmp(uuid1, uuid2, sizeof(uuid_t)) == 0);
140}
141
148void uuid_to_string(const uuid_t *uuid, char *str);
149
158int uuid_from_string(uuid_t *uuid, const char *str);
159
160#ifdef __cplusplus
161}
162#endif
Functions to work with different byte orders.
be_uint32_t network_uint32_t
A 32 bit integer in network byte order.
Definition byteorder.h:112
be_uint16_t network_uint16_t
A 16 bit integer in network byte order.
Definition byteorder.h:107
static uint16_t byteorder_ntohs(network_uint16_t v)
Convert from network byte order to host byte order, 16 bit.
Definition byteorder.h:505
void uuid_v3(uuid_t *uuid, const uuid_t *ns, const uint8_t *name, size_t len)
Generate a version 3(md5 based) UUID from a namespace and a byte array.
#define UUID_NODE_LEN
Size of the node identifier in bytes.
Definition uuid.h:38
const uuid_t uuid_namespace_url
URL namespace UUID.
static unsigned uuid_version(const uuid_t *uuid)
Retrieve the type number of a UUID.
Definition uuid.h:122
void uuid_to_string(const uuid_t *uuid, char *str)
Generate an UUID string from an UUID structure.
const uuid_t uuid_namespace_iso
ISO OID namespace UUID.
static bool uuid_equal(const uuid_t *uuid1, const uuid_t *uuid2)
Compare two UUID's.
Definition uuid.h:137
const uuid_t uuid_namespace_dns
DNS namespace UUID.
int uuid_from_string(uuid_t *uuid, const char *str)
Populate an UUID structure from an UUID string.
const uuid_t uuid_namespace_x500
X.500 DN namespace UUID.
void uuid_v5(uuid_t *uuid, const uuid_t *ns, const uint8_t *name, size_t len)
Generate a version 5(sha1 based) UUID from a namespace and a byte array.
void uuid_v4(uuid_t *uuid)
Generate a version 4(Full random) UUID.
UUID layout.
Definition uuid.h:63
uint8_t node[UUID_NODE_LEN]
The spatially unique node identifier.
Definition uuid.h:71
network_uint16_t time_mid
The middle field of the timestamp.
Definition uuid.h:65
network_uint16_t time_hi
The high field of the timestamp multiplexed with the version number.
Definition uuid.h:66
uint8_t clk_seq_hi_res
The high field of the clock sequence Multiplexed with the variant.
Definition uuid.h:68
network_uint32_t time_low
The low field of the timestamp.
Definition uuid.h:64
uint8_t clk_seq_low
The low field of the clock sequence.
Definition uuid.h:70