[PATCH v3 1/7] lib: uuid: add UUID v5 support
Ilias Apalodimas
ilias.apalodimas at linaro.org
Fri May 31 18:11:52 CEST 2024
Hi Caleb,
[...]
> +#if IS_ENABLED(CONFIG_UUID_GEN_V5)
> +void gen_uuid_v5(const struct uuid *namespace, struct uuid *uuid, ...)
> +{
> + sha1_context ctx;
> + va_list args;
> + const uint8_t *data;
> + uint8_t hash[SHA1_SUM_LEN];
> + uint32_t tmp;
> +
> + sha1_starts(&ctx);
> + /* Hash the namespace UUID as salt */
> + sha1_update(&ctx, (unsigned char *)namespace, UUID_BIN_LEN);
> + va_start(args, uuid);
> +
> + while ((data = va_arg(args, const uint8_t *))) {
> + unsigned int len = va_arg(args, size_t);
> +
> + sha1_update(&ctx, data, len);
> + }
> +
> + va_end(args);
> + sha1_finish(&ctx, hash);
> +
> + /* Truncate the hash into output UUID, it is already big endian */
> + memcpy(uuid, hash, sizeof(*uuid));
> +
> + /* Configure variant/version bits */
> + tmp = be32_to_cpu(uuid->time_hi_and_version);
uuid->time_hi_and_version is a u16 so this should be better off with a
be16_to_cpu?
OTOH your initial implementation was using clrsetbits_be16 and clrsetbits_8.
Looking at what we have the same calls are done in gen_rand_uuid().
I think it's better if you make a function call for this and replace
both your code and the gen_rand_uuid() instead of open coding that
Thanks
/Ilias
> + tmp = (tmp & ~UUID_VERSION_MASK) | (5 << UUID_VERSION_SHIFT);
> + uuid->time_hi_and_version = cpu_to_be32(tmp);
> +
> + uuid->clock_seq_hi_and_reserved &= UUID_VARIANT_MASK;
> + uuid->clock_seq_hi_and_reserved |= 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.45.0
>
More information about the U-Boot
mailing list