Re: [U-Boot] [PATCH 8/9] [v3] hash: Add function to find hash_algo struct with progressive hash

2014-12-23 Thread Simon Glass
Hi Ruchika,

On 23 December 2014 at 04:32, Ruchika Gupta  wrote:
> The hash_algo structure has some implementations in which progressive hash
> API's are not defined. These are basically the hardware based implementations
> of SHA. An API is added to find the algo which has progressive hash API's
> defined. This can then be integrated with RSA checksum library which uses
> Progressive Hash API's.
>
> Signed-off-by: Ruchika Gupta 
> CC: Simon Glass 
> ---
> Changes in v3 :
> Corrected ifdef for SHA1
>
> Changes in v2 :
> Added commit message
>
>  common/hash.c  | 33 -
>  include/hash.h | 15 +++
>  2 files changed, 39 insertions(+), 9 deletions(-)
>
> diff --git a/common/hash.c b/common/hash.c
> index 12d6759..ea1ec60 100644
> --- a/common/hash.c
> +++ b/common/hash.c
> @@ -20,7 +20,7 @@
>  #include 
>  #include 
>
> -#ifdef CONFIG_CMD_SHA1SUM
> +#ifdef CONFIG_SHA1

I'm still not sure about this. I suspect this will bloat the code for
boards that use CONFIG_SHA1 (most) but not CONFIG_CMD_SHA1SUM. You
could check that, but I went through some contortions to make sure
that the hash API was not compiled in when not needed.

>  static int hash_init_sha1(struct hash_algo *algo, void **ctxp)
>  {
> sha1_context *ctx = malloc(sizeof(sha1_context));
> @@ -125,12 +125,7 @@ static struct hash_algo hash_algo[] = {
> CHUNKSZ_SHA256,
> },
>  #endif
> -   /*
> -* This is CONFIG_CMD_SHA1SUM instead of CONFIG_SHA1 since otherwise
> -* it bloats the code for boards which use SHA1 but not the 'hash'
> -* or 'sha1sum' commands.
> -*/

This is the comment referring to the above.

Is it possible to leave this logic as it is?

> -#ifdef CONFIG_CMD_SHA1SUM
> +#ifdef CONFIG_SHA1
> {
> "sha1",
> SHA1_SUM_LEN,
> @@ -140,7 +135,6 @@ static struct hash_algo hash_algo[] = {
> hash_update_sha1,
> hash_finish_sha1,
> },
> -#define MULTI_HASH
>  #endif
>  #ifdef CONFIG_SHA256
> {
> @@ -152,7 +146,6 @@ static struct hash_algo hash_algo[] = {
> hash_update_sha256,
> hash_finish_sha256,
> },
> -#define MULTI_HASH
>  #endif
> {
> "crc32",
> @@ -165,6 +158,10 @@ static struct hash_algo hash_algo[] = {
> },
>  };
>
> +#if defined(CONFIG_SHA256) || defined(CONFIG_CMD_SHA1SUM)
> +#define MULTI_HASH
> +#endif
> +
>  #if defined(CONFIG_HASH_VERIFY) || defined(CONFIG_CMD_HASH)
>  #define MULTI_HASH
>  #endif
> @@ -311,6 +308,24 @@ int hash_lookup_algo(const char *algo_name, struct 
> hash_algo **algop)
> return -EPROTONOSUPPORT;
>  }
>
> +int hash_progressive_lookup_algo(const char *algo_name,
> +struct hash_algo **algop)
> +{
> +   int i;
> +
> +   for (i = 0; i < ARRAY_SIZE(hash_algo); i++) {
> +   if (!strcmp(algo_name, hash_algo[i].name)) {
> +   if (hash_algo[i].hash_init) {
> +   *algop = &hash_algo[i];
> +   return 0;
> +   }
> +   }
> +   }
> +
> +   debug("Unknown hash algorithm '%s'\n", algo_name);
> +   return -EPROTONOSUPPORT;
> +}
> +
>  void hash_show(struct hash_algo *algo, ulong addr, ulong len, uint8_t 
> *output)
>  {
> int i;
> diff --git a/include/hash.h b/include/hash.h
> index d8ec4f0..059f84e 100644
> --- a/include/hash.h
> +++ b/include/hash.h
> @@ -128,6 +128,21 @@ int hash_block(const char *algo_name, const void *data, 
> unsigned int len,
>  int hash_lookup_algo(const char *algo_name, struct hash_algo **algop);
>
>  /**
> + * hash_progressive_lookup_algo() - Look up the hash_algo struct with 
> progressive
> + * hash support for an algorithm

Try to get that on one line if you can.

> + *
> + * The function returns the pointer to the struct or -EPROTONOSUPPORT if the
> + * algorithm is not available with progressive hash support.
> + *
> + * @algo_name: Hash algorithm to look up
> + * @algop: Pointer to the hash_algo struct if found
> + *
> + * @return 0 if ok, -EPROTONOSUPPORT for an unknown algorithm.
> + */
> +int hash_progressive_lookup_algo(const char *algo_name,
> +struct hash_algo **algop);
> +
> +/**
>   * hash_show() - Print out a hash algorithm and value
>   *
>   * You will get a message like this (without a newline at the end):
> --
> 1.8.1.4
>

Regards,
Simon
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 8/9] [v3] hash: Add function to find hash_algo struct with progressive hash

2014-12-28 Thread Ruchika Gupta
Hi Simon,

> -Original Message-
> From: s...@google.com [mailto:s...@google.com] On Behalf Of Simon Glass
> Sent: Wednesday, December 24, 2014 6:20 AM
> To: Gupta Ruchika-R66431
> Cc: U-Boot Mailing List; Sun York-R58495
> Subject: Re: [PATCH 8/9] [v3] hash: Add function to find hash_algo struct
> with progressive hash
> 
> Hi Ruchika,
> 
> On 23 December 2014 at 04:32, Ruchika Gupta 
> wrote:
> > The hash_algo structure has some implementations in which progressive
> > hash API's are not defined. These are basically the hardware based
> > implementations of SHA. An API is added to find the algo which has
> > progressive hash API's defined. This can then be integrated with RSA
> > checksum library which uses Progressive Hash API's.
> >
> > Signed-off-by: Ruchika Gupta 
> > CC: Simon Glass 
> > ---
> > Changes in v3 :
> > Corrected ifdef for SHA1
> >
> > Changes in v2 :
> > Added commit message
> >
> >  common/hash.c  | 33 -  include/hash.h
> > | 15 +++
> >  2 files changed, 39 insertions(+), 9 deletions(-)
> >
> > diff --git a/common/hash.c b/common/hash.c index 12d6759..ea1ec60
> > 100644
> > --- a/common/hash.c
> > +++ b/common/hash.c
> > @@ -20,7 +20,7 @@
> >  #include 
> >  #include 
> >
> > -#ifdef CONFIG_CMD_SHA1SUM
> > +#ifdef CONFIG_SHA1
> 
> I'm still not sure about this. I suspect this will bloat the code for boards
> that use CONFIG_SHA1 (most) but not CONFIG_CMD_SHA1SUM. You could check that,
> but I went through some contortions to make sure that the hash API was not
> compiled in when not needed.

Since we will be using this API now in RSA checksum, defining CONFIG_SHA1 
should allow the compilation of this structure. Asking user to enable 
CONFIG_CMD_SHA1SUM for using rsa-checksum doesn’t look right. Please suggest.

> 
> >  static int hash_init_sha1(struct hash_algo *algo, void **ctxp)  {
> > sha1_context *ctx = malloc(sizeof(sha1_context)); @@ -125,12
> > +125,7 @@ static struct hash_algo hash_algo[] = {
> > CHUNKSZ_SHA256,
> > },
> >  #endif
> > -   /*
> > -* This is CONFIG_CMD_SHA1SUM instead of CONFIG_SHA1 since
> otherwise
> > -* it bloats the code for boards which use SHA1 but not the 'hash'
> > -* or 'sha1sum' commands.
> > -*/
> 
> This is the comment referring to the above.
> 
> Is it possible to leave this logic as it is?
> 
> > -#ifdef CONFIG_CMD_SHA1SUM
> > +#ifdef CONFIG_SHA1
> > {
> > "sha1",
> > SHA1_SUM_LEN,
> > @@ -140,7 +135,6 @@ static struct hash_algo hash_algo[] = {
> > hash_update_sha1,
> > hash_finish_sha1,
> > },
> > -#define MULTI_HASH
> >  #endif
> >  #ifdef CONFIG_SHA256
> > {
> > @@ -152,7 +146,6 @@ static struct hash_algo hash_algo[] = {
> > hash_update_sha256,
> > hash_finish_sha256,
> > },
> > -#define MULTI_HASH
> >  #endif
> > {
> > "crc32",
> > @@ -165,6 +158,10 @@ static struct hash_algo hash_algo[] = {
> > },
> >  };
> >
> > +#if defined(CONFIG_SHA256) || defined(CONFIG_CMD_SHA1SUM) #define
> > +MULTI_HASH #endif
> > +
> >  #if defined(CONFIG_HASH_VERIFY) || defined(CONFIG_CMD_HASH)  #define
> > MULTI_HASH  #endif @@ -311,6 +308,24 @@ int hash_lookup_algo(const
> > char *algo_name, struct hash_algo **algop)
> > return -EPROTONOSUPPORT;
> >  }
> >
> > +int hash_progressive_lookup_algo(const char *algo_name,
> > +struct hash_algo **algop) {
> > +   int i;
> > +
> > +   for (i = 0; i < ARRAY_SIZE(hash_algo); i++) {
> > +   if (!strcmp(algo_name, hash_algo[i].name)) {
> > +   if (hash_algo[i].hash_init) {
> > +   *algop = &hash_algo[i];
> > +   return 0;
> > +   }
> > +   }
> > +   }
> > +
> > +   debug("Unknown hash algorithm '%s'\n", algo_name);
> > +   return -EPROTONOSUPPORT;
> > +}
> > +
> >  void hash_show(struct hash_algo *algo, ulong addr, ulong len, uint8_t
> > *output)  {
> > int i;
> > diff --git a/include/hash.h b/include/hash.h index d8ec4f0..059f84e
> > 100644
> > --- a/include/hash.h
> > +++ b/include/hash.h
> > @@ -128,6 +128,21 @@ int hash_block(const char *algo_name, const void
> > *data, unsigned int len,  int hash_lookup_algo(const char *algo_name,
> > struct hash_algo **algop);
> >
> >  /**
> > + * hash_progressive_lookup_algo() - Look up the hash_algo struct with
> progressive
> > + * hash support for an algorithm
> 
> Try to get that on one line if you can.
> 
> > + *
> > + * The function returns the pointer to the struct or -EPROTONOSUPPORT
> > +if the
> > + * algorithm is not available with progressive hash support.
> > + *
> > + * @algo_name: Hash algorithm to look up
> > + * @algop: Pointer to the hash_algo struct if found
> > + *
> > + * @re

Re: [U-Boot] [PATCH 8/9] [v3] hash: Add function to find hash_algo struct with progressive hash

2014-12-29 Thread Simon Glass
+Wolfgang

Hi Ruchika,

On 29 December 2014 at 00:07, Ruchika Gupta  wrote:
> Hi Simon,
>
>> -Original Message-
>> From: s...@google.com [mailto:s...@google.com] On Behalf Of Simon Glass
>> Sent: Wednesday, December 24, 2014 6:20 AM
>> To: Gupta Ruchika-R66431
>> Cc: U-Boot Mailing List; Sun York-R58495
>> Subject: Re: [PATCH 8/9] [v3] hash: Add function to find hash_algo struct
>> with progressive hash
>>
>> Hi Ruchika,
>>
>> On 23 December 2014 at 04:32, Ruchika Gupta 
>> wrote:
>> > The hash_algo structure has some implementations in which progressive
>> > hash API's are not defined. These are basically the hardware based
>> > implementations of SHA. An API is added to find the algo which has
>> > progressive hash API's defined. This can then be integrated with RSA
>> > checksum library which uses Progressive Hash API's.
>> >
>> > Signed-off-by: Ruchika Gupta 
>> > CC: Simon Glass 
>> > ---
>> > Changes in v3 :
>> > Corrected ifdef for SHA1
>> >
>> > Changes in v2 :
>> > Added commit message
>> >
>> >  common/hash.c  | 33 -  include/hash.h
>> > | 15 +++
>> >  2 files changed, 39 insertions(+), 9 deletions(-)
>> >
>> > diff --git a/common/hash.c b/common/hash.c index 12d6759..ea1ec60
>> > 100644
>> > --- a/common/hash.c
>> > +++ b/common/hash.c
>> > @@ -20,7 +20,7 @@
>> >  #include 
>> >  #include 
>> >
>> > -#ifdef CONFIG_CMD_SHA1SUM
>> > +#ifdef CONFIG_SHA1
>>
>> I'm still not sure about this. I suspect this will bloat the code for boards
>> that use CONFIG_SHA1 (most) but not CONFIG_CMD_SHA1SUM. You could check that,
>> but I went through some contortions to make sure that the hash API was not
>> compiled in when not needed.
>
> Since we will be using this API now in RSA checksum, defining CONFIG_SHA1 
> should allow the compilation of this structure. Asking user to enable 
> CONFIG_CMD_SHA1SUM for using rsa-checksum doesn’t look right. Please suggest.

Agreed it doesn't, it was just a code size hack. Wolfgang might be
able to chime in with thoughts here (+Cc).

But still, do you need to change it? After all, CONFIG_CMD_SHA1SUM
should be a superest for CONFIG_SHA1.

[snip]

Regards,
Simon
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 8/9] [v3] hash: Add function to find hash_algo struct with progressive hash

2014-12-30 Thread Ruchika Gupta
Hi Simon,

> -Original Message-
> From: s...@google.com [mailto:s...@google.com] On Behalf Of Simon Glass
> Sent: Tuesday, December 30, 2014 2:44 AM
> To: Gupta Ruchika-R66431
> Cc: U-Boot Mailing List; Sun York-R58495; Wolfgang Denk
> Subject: Re: [PATCH 8/9] [v3] hash: Add function to find hash_algo struct
> with progressive hash
> 
> +Wolfgang
> 
> Hi Ruchika,
> 
> On 29 December 2014 at 00:07, Ruchika Gupta 
> wrote:
> > Hi Simon,
> >
> >> -Original Message-
> >> From: s...@google.com [mailto:s...@google.com] On Behalf Of Simon Glass
> >> Sent: Wednesday, December 24, 2014 6:20 AM
> >> To: Gupta Ruchika-R66431
> >> Cc: U-Boot Mailing List; Sun York-R58495
> >> Subject: Re: [PATCH 8/9] [v3] hash: Add function to find hash_algo
> >> struct with progressive hash
> >>
> >> Hi Ruchika,
> >>
> >> On 23 December 2014 at 04:32, Ruchika Gupta
> >> 
> >> wrote:
> >> > The hash_algo structure has some implementations in which
> >> > progressive hash API's are not defined. These are basically the
> >> > hardware based implementations of SHA. An API is added to find the
> >> > algo which has progressive hash API's defined. This can then be
> >> > integrated with RSA checksum library which uses Progressive Hash API's.
> >> >
> >> > Signed-off-by: Ruchika Gupta 
> >> > CC: Simon Glass 
> >> > ---
> >> > Changes in v3 :
> >> > Corrected ifdef for SHA1
> >> >
> >> > Changes in v2 :
> >> > Added commit message
> >> >
> >> >  common/hash.c  | 33 -
> >> > include/hash.h
> >> > | 15 +++
> >> >  2 files changed, 39 insertions(+), 9 deletions(-)
> >> >
> >> > diff --git a/common/hash.c b/common/hash.c index 12d6759..ea1ec60
> >> > 100644
> >> > --- a/common/hash.c
> >> > +++ b/common/hash.c
> >> > @@ -20,7 +20,7 @@
> >> >  #include 
> >> >  #include 
> >> >
> >> > -#ifdef CONFIG_CMD_SHA1SUM
> >> > +#ifdef CONFIG_SHA1
> >>
> >> I'm still not sure about this. I suspect this will bloat the code for
> >> boards that use CONFIG_SHA1 (most) but not CONFIG_CMD_SHA1SUM. You
> >> could check that, but I went through some contortions to make sure
> >> that the hash API was not compiled in when not needed.
> >
> > Since we will be using this API now in RSA checksum, defining CONFIG_SHA1
> should allow the compilation of this structure. Asking user to enable
> CONFIG_CMD_SHA1SUM for using rsa-checksum doesn’t look right. Please suggest.
> 
> Agreed it doesn't, it was just a code size hack. Wolfgang might be able to
> chime in with thoughts here (+Cc).
> 
> But still, do you need to change it? After all, CONFIG_CMD_SHA1SUM should be
> a superest for CONFIG_SHA1.
With CONFIG_FIT_SIGNATURE, CONFIG_SHA1 and CONFIG_SHA256 get automatically 
defined in include/image.h. I need to use the structure hash_algos to find the  
functions to be used for algo SHA1. If I leave this as it is, it would mean 
that I will have to modify include/image.h to define CONFIG_CMD_SHA1SUM for FIT 
signatures. I am not sure whether that would be the right thing to do.
> 
> [snip]
> 
> Regards,
> Simon

Regards,
Ruchika
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot