[PATCH v2 4/5] lib: sha256: Add support for hardware specific sha256_process
Loic Poulain
loic.poulain at linaro.org
Mon Feb 6 23:12:23 CET 2023
Hi Simon,
Le lun. 6 févr. 2023 à 18:12, Simon Glass <sjg at chromium.org> a écrit :
> Hi Loic,
>
> On Wed, 1 Jun 2022 at 12:27, Loic Poulain <loic.poulain at linaro.org> wrote:
> >
> > Mark sha256_process as weak to allow hardware specific implementation.
> > Add parameter for supporting multiple blocks processing.
> >
> > Signed-off-by: Loic Poulain <loic.poulain at linaro.org>
> > ---
> > lib/sha256.c | 26 +++++++++++++++++++-------
> > 1 file changed, 19 insertions(+), 7 deletions(-)
> >
> > diff --git a/lib/sha256.c b/lib/sha256.c
> > index c1fe93d..50b0b51 100644
> > --- a/lib/sha256.c
> > +++ b/lib/sha256.c
> > @@ -14,6 +14,8 @@
> > #include <watchdog.h>
> > #include <u-boot/sha256.h>
> >
> > +#include <linux/compiler_attributes.h>
> > +
> > const uint8_t sha256_der_prefix[SHA256_DER_LEN] = {
> > 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86,
> > 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05,
> > @@ -55,7 +57,7 @@ void sha256_starts(sha256_context * ctx)
> > ctx->state[7] = 0x5BE0CD19;
> > }
> >
> > -static void sha256_process(sha256_context *ctx, const uint8_t data[64])
> > +static void sha256_process_one(sha256_context *ctx, const uint8_t
> data[64])
> > {
> > uint32_t temp1, temp2;
> > uint32_t W[64];
> > @@ -186,6 +188,18 @@ static void sha256_process(sha256_context *ctx,
> const uint8_t data[64])
> > ctx->state[7] += H;
> > }
> >
> > +__weak void sha256_process(sha256_context *ctx, const unsigned char
> *data,
> > + unsigned int blocks)
> > +{
> > + if (!blocks)
> > + return;
> > +
> > + while (blocks--) {
> > + sha256_process_one(ctx, data);
> > + data += 64;
> > + }
> > +}
> > +
> > void sha256_update(sha256_context *ctx, const uint8_t *input, uint32_t
> length)
> > {
> > uint32_t left, fill;
> > @@ -204,17 +218,15 @@ void sha256_update(sha256_context *ctx, const
> uint8_t *input, uint32_t length)
> >
> > if (left && length >= fill) {
> > memcpy((void *) (ctx->buffer + left), (void *) input,
> fill);
> > - sha256_process(ctx, ctx->buffer);
> > + sha256_process(ctx, ctx->buffer, 1);
> > length -= fill;
> > input += fill;
> > left = 0;
> > }
> >
> > - while (length >= 64) {
> > - sha256_process(ctx, input);
> > - length -= 64;
> > - input += 64;
> > - }
> > + sha256_process(ctx, input, length / 64);
> > + input += length / 64 * 64;
> > + length = length % 64;
> >
> > if (length)
> > memcpy((void *) (ctx->buffer + left), (void *) input,
> length);
> > --
> > 2.7.4
> >
>
> I just came across this patch as it broke minnowmax.
Ok, is it a build time or runtime break?
>
> This should be using driver model, not weak functions. Please can you
> take a look?
Yes I can look at it in the next few days. I have used weak function
because it’s an architecture feature offered by armv8 instructions, It’s
not strictly speaking an internal device/IP.
Regards,
Loic
>
More information about the U-Boot
mailing list