[PATCH] tpm-v2: allow algo name to be conigured for pcr_read and pcr_extend

Tim Harvey tharvey at gateworks.com
Thu Mar 28 16:33:36 CET 2024


On Thu, Mar 28, 2024 at 12:37 AM Ilias Apalodimas
<ilias.apalodimas at linaro.org> wrote:
>
> Hi Tim,
>
> [...]
>
> >
> > +/**
> > + * tpm2_algo_len() - Return an algo value and length given a algorithm name
> > + *
> > + * @name: algorithm name
> > + * @rwlen: pointer to integer to populate with algorithm length if non-null
> > + * Return: algorithm value
> > + */
> > +int tpm2_algo_len(const char *name, int *rwlen);
> > +
> > +/**
> > + * tpm2_algo_len() - Return an algoithm name string
> > + *
> > + * @algo: algorithm value
> > + * Return: algorithm string
> > + */
> > +const char *tpm2_algo_name(int algo);
> > +
> >  #endif /* __TPM_V2_H */
> > diff --git a/lib/tpm-v2.c b/lib/tpm-v2.c
> > index 68eaaa639f89..6a090ce5810c 100644
> > --- a/lib/tpm-v2.c
> > +++ b/lib/tpm-v2.c
> > @@ -1555,3 +1555,49 @@ u32 tpm2_enable_nvcommits(struct udevice *dev, uint vendor_cmd,
> >
> >         return 0;
> >  }
> > +
> > +int tpm2_algo_len(const char *name, int *rwlen)
> > +{
> > +       int algo = -EINVAL;
> > +       int len = 0;
> > +
> > +       if (!strcasecmp("sha1", name)) {
> > +               algo = TPM2_ALG_SHA1;
> > +               len = TPM2_SHA1_DIGEST_SIZE;
> > +       } else if (!strcasecmp("sha256", name)) {
> > +               algo = TPM2_ALG_SHA256;
> > +               len = TPM2_SHA256_DIGEST_SIZE;
> > +       } else if (!strcasecmp("sha384", name)) {
> > +               algo = TPM2_ALG_SHA384;
> > +               len = TPM2_SHA384_DIGEST_SIZE;
> > +       } else if (!strcasecmp("sha512", name)) {
> > +               algo = TPM2_ALG_SHA512;
> > +               len = TPM2_SHA512_DIGEST_SIZE;
> > +       } else if (!strcasecmp("sm3_256", name)) {
> > +               algo = TPM2_ALG_SM3_256;
> > +               len = TPM2_SM3_256_DIGEST_SIZE;
> > +       }
> > +
> > +       if (*rwlen)
> > +               *rwlen = len;
> > +
> > +       return algo;
> > +}
> > +
>
> We already have tpm2_algorithm_to_len(). Instead of defining a new
> function, can we convert strings to 'enum tpm2_algorithms'? We can
> then reuse the existing function.
>

Hi Ilias,

Thanks - I didn't see tpm2_algorithm_to_len. Yes, I can use it but I
still need to add a new function to turn the name into an algo. I also
didn't see tpm2_supported_algorithms; should I only support
name-to-algorithm and algorithm-to-name for that subset?

Best Regards,

Tim

> > +const char *tpm2_algo_name(int algo)
> > +{
> > +       switch (algo) {
> > +       case TPM2_ALG_SHA1:
> > +               return "sha1";
> > +       case TPM2_ALG_SHA256:
> > +               return "sha256";
> > +       case TPM2_ALG_SHA384:
> > +               return "sha384";
> > +       case TPM2_ALG_SHA512:
> > +               return "sha512";
> > +       case TPM2_ALG_SM3_256:
> > +               return "sm3_256";
> > +       }
> > +
> > +       return "";
> > +}
> > --
> > 2.25.1
> >
>
> Thanks
> /Ilias


More information about the U-Boot mailing list