
24 May
2024
24 May
'24
8:01 a.m.
[...]
#include <dm/uclass.h> #include <rng.h> +#include <u-boot/sha1.h>
int uuid_str_valid(const char *uuid) { int i, valid; @@ -368,8 +369,40 @@ void uuid_bin_to_str(const unsigned char *uuid_bin, char *uuid_str, } } }
+#if CONFIG_IS_ENABLED(UUID_GEN_V5) +void gen_uuid_v5(struct uuid *namespace, struct uuid *uuid, ...) +{
sha1_context ctx;
va_list args;
const u8 *data;
u8 hash[SHA1_SUM_LEN];
sha1_starts(&ctx);
/* Hash the namespace UUID as salt */
sha1_update(&ctx, (char *)namespace, UUID_BIN_LEN);
va_start(args, uuid);
Should we use sha1 here? Is it described somewhere in UUIDv5 requirements? If not I'd rather have a sha256
while ((data = va_arg(args, const u8 *)))
sha1_update(&ctx, (char *)data, va_arg(args, int));
sha1_update second argument is an unsigned int
va_end(args);
sha1_finish(&ctx, hash);
/* Truncate the hash into output UUID and convert it to big endian */
cpu_to_be32_array((u32 *)uuid, (u32 *)hash, 4);
/* Configure variant/version bits */
clrsetbits_be16(&uuid->time_hi_and_version,
UUID_VERSION_MASK,
5 << UUID_VERSION_SHIFT);
clrsetbits_8(&uuid->clock_seq_hi_and_reserved,
UUID_VARIANT_MASK,
UUID_VARIANT << UUID_VARIANT_SHIFT);
+} +#endif
#if defined(CONFIG_RANDOM_UUID) || defined(CONFIG_CMD_UUID) void gen_rand_uuid(unsigned char *uuid_bin) { u32 ptr[4];
-- 2.44.0
Thanks /Ilias