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

Ilias Apalodimas ilias.apalodimas at linaro.org
Thu Mar 28 17:34:57 CET 2024


On Thu, 28 Mar 2024 at 17:33, Tim Harvey <tharvey at gateworks.com> wrote:
>
> 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.

Yep, that's fine,
> I also
> didn't see tpm2_supported_algorithms; should I only support
> name-to-algorithm and algorithm-to-name for that subset?
>

Yea, that would be good, we can at least have a reference of what we
currently support.

Cheers
/Ilias

> 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