[PATCH RFC 1/4] lib: uuid: add UUID v5 support
Ilias Apalodimas
ilias.apalodimas at linaro.org
Fri May 24 08:01:49 CEST 2024
[...]
> #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
More information about the U-Boot
mailing list