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 >