1 /*
2  * Copyright (c) 2025, SECO Mind Srl
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include <zephyr/kernel.h>
8 #include <zephyr/sys/uuid.h>
9 
10 #include <zephyr/logging/log.h>
11 LOG_MODULE_REGISTER(uuid_sample, LOG_LEVEL_INF);
12 
main(void)13 int main(void)
14 {
15 	int result;
16 	struct uuid uuid_v4 = {0};
17 	struct uuid uuid_v5_namespace = {0};
18 	struct uuid uuid_v5 = {0};
19 	char uuid_v4_str[UUID_STR_LEN] = {0};
20 	char uuid_v5_str[UUID_STR_LEN] = {0};
21 	char uuid_v4_base64[UUID_BASE64_LEN] = {0};
22 	char uuid_v4_base64url[UUID_BASE64URL_LEN] = {0};
23 
24 	/* Generate an UUID v4 from pseudo-random data */
25 	result = uuid_generate_v4(&uuid_v4);
26 	if (result != 0) {
27 		LOG_ERR("UUID v4 generation failed, error: %s (%d)", strerror(result), result);
28 		return -1;
29 	}
30 	/* Convert the UUID to string and to its base 64 and base 64 URL safe formats */
31 	result = uuid_to_string(&uuid_v4, uuid_v4_str);
32 	if (result != 0) {
33 		LOG_ERR("UUID v4 to string failed, error: %s (%d)", strerror(result), result);
34 		return -1;
35 	}
36 	LOG_INF("UUID v4: '%s'", uuid_v4_str);
37 	result = uuid_to_base64(&uuid_v4, uuid_v4_base64);
38 	if (result != 0) {
39 		LOG_ERR("UUID v4 to base 64 failed, error: %s (%d)", strerror(result), result);
40 		return -1;
41 	}
42 	LOG_INF("UUID v4 base 64: '%s'", uuid_v4_base64);
43 	result = uuid_to_base64url(&uuid_v4, uuid_v4_base64url);
44 	if (result != 0) {
45 		LOG_ERR("UUID v4 to base 64 URL safe failed, error: %s (%d)", strerror(result),
46 			result);
47 		return -1;
48 	}
49 	LOG_INF("UUID v4 base 64 URL safe: '%s'", uuid_v4_base64url);
50 
51 	/* Generate an UUID v5 */
52 	/* This UUID is the same as in RFC 9562 Appendix A.4: "Example of a UUIDv5 Value" */
53 	result = uuid_from_string("6ba7b810-9dad-11d1-80b4-00c04fd430c8", &uuid_v5_namespace);
54 	if (result != 0) {
55 		LOG_ERR("Namespace string to UUID failed, error: %s (%d)", strerror(result),
56 			result);
57 		return -1;
58 	}
59 	result = uuid_generate_v5(&uuid_v5_namespace, "www.example.com", strlen("www.example.com"),
60 				  &uuid_v5);
61 	if (result != 0) {
62 		LOG_ERR("UUID v5 generation failed, error: %s (%d)", strerror(result), result);
63 		return -1;
64 	}
65 	result = uuid_to_string(&uuid_v5, uuid_v5_str);
66 	if (result != 0) {
67 		LOG_ERR("UUID v4 to string failed, error: %s (%d)", strerror(result), result);
68 		return -1;
69 	}
70 	LOG_INF("UUID v5: '%s'", uuid_v5_str);
71 
72 	LOG_INF("UUID sample completed successfully");
73 
74 	return 0;
75 }
76