mkimage: Refactor and clean up 32-bit crcs
cover mkimage: Refactor and clean up 32-bit crcs
As a step towards adding an image signer for socfpga, this set of patches breaks out the common crc code that is used in both pblimage and mxsimage.
Not that this is NOT the same algorithm as the crc generated by zlib.
The new function has been named pbl_crc32.
Charles Manning (2):
mkimage : Split out and clean pbl_crc32 for use by other image types
mkimage: Refactor mxsimage to use common crc32 code
tools/Makefile | 1 + tools/mxsimage.c | 28 +++------------------------ tools/pbl_crc32.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/pbl_crc32.h | 13 +++++++++++++ tools/pblimage.c | 47 +------------------------------------------- 5 files changed, 74 insertions(+), 71 deletions(-) create mode 100644 tools/pbl_crc32.c create mode 100644 tools/pbl_crc32.h
Signature · 1 line
1.7.9.5
PATCH 1/2 mkimage : Split out and clean pbl_crc32 for use by other image types
The crc32 used by pblimgae is NOT the same as zlib crc32.
The pbl_crc32 is useful for other purposes in mkimage so split it out.
While we are about it, clean up redundant and confusing code.
--- tools/Makefile | 1 + tools/pbl_crc32.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/pbl_crc32.h | 13 +++++++++++++ tools/pblimage.c | 47 +------------------------------------------- 4 files changed, 71 insertions(+), 46 deletions(-) create mode 100644 tools/pbl_crc32.c create mode 100644 tools/pbl_crc32.h
tools/Makefile +1 -0
@@ -86,6 +86,7 @@ dumpimage-mkimage-objs := aisimage.o \ omapimage.o \ os_support.o \ pblimage.o \ + pbl_crc32.o \ sha1.o \ sha256.o \ ublimage.o \
tools/pbl_crc32.c new file +56 -0
56 lines not on this page · raw message
tools/pbl_crc32.h new file +13 -0
@@ -0,0 +1,13 @@ +/* +* Copyright 2012 Freescale Semiconductor, Inc. +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#ifndef PBLCRC32_H +#define PBLCRC32_H + +#include <stdint.h> +uint32_t pbl_crc32 (uint32_t in_crc,const char *buf,uint32_t len); + +#endif
tools/pblimage.c +1 -46
59 lines not on this page · raw message
Signature · 1 line
1.7.9.5
PATCH 1/2 mkimage : Split out and clean pbl_crc32 for use by other image types
Hi Charles,
Quoted 165 lines · Charles Manning
The crc32 used by pblimgae is NOT the same as zlib crc32.
The
pbl_crc32is useful for other purposes in mkimage so split it out.While we are about it, clean up redundant and confusing code.
Signed-off-by Charles Manning <[email protected]>--- tools/Makefile | 1 + tools/pbl_crc32.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/pbl_crc32.h | 13 +++++++++++++ tools/pblimage.c | 47 +------------------------------------------- 4 files changed, 71 insertions(+), 46 deletions(-) create mode 100644 tools/pbl_crc32.c create mode 100644 tools/pbl_crc32.htools/Makefile +1
-0@@ -86,6 +86,7 @@ dumpimage-mkimage-objs := aisimage.o \ omapimage.o \ os_support.o \ pblimage.o \ + pbl_crc32.o \ sha1.o \ sha256.o \ ublimage.o \tools/pbl_crc32.c new file +56
-0@@ -0,0 +1,56 @@ +/* +* Copyright 2012 Freescale Semiconductor, Inc. +* +* Cleaned up and refactored by Charles Manning. +* +* SPDX-License-Identifier: GPL-2.0+ +*/ +#include "pblimage.h" + +static uint32_t crc_table[256 ]; +static int crc_table_valid; + +static void make_crc_table (void ) +{ +uint32_t mask; +int i, j; +uint32_t poly;/* polynomial exclusive-or pattern */ + +if (crc_table_valid) +return ; + +/* +* the polynomial used by PBL is 1 + x1 + x2 + x4 + x5 + x7 + x8 + x10 +* + x11 + x12 + x16 + x22 + x23 + x26 + x32. +*/ + poly =0x04c11db7 ; + +for (i =0 ; i <256 ; i++) { + mask = i <<24 ; +for (j =0 ; j <8 ; j++) { +if (mask &0x80000000 ) + mask = (mask <<1 ) ^ poly; +else + mask <<=1 ; + } + crc_table[i] = mask; + } + + crc_table_valid =1 ; +} + +uint32_t pbl_crc32 (uint32_t in_crc,const char *buf,uint32_t len) +{ +uint32_t crc32_val; +int i; + +make_crc_table (); + + crc32_val = ~in_crc; + +for (i =0 ; i < len; i++) + crc32_val = (crc32_val <<8 ) ^ + crc_table[(crc32_val >>24 ) ^ (*buf++ &0xff )]; + +return crc32_val; +}tools/pbl_crc32.h new file +13
-0@@ -0,0 +1,13 @@ +/* +* Copyright 2012 Freescale Semiconductor, Inc. +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#ifndef PBLCRC32_H +#define PBLCRC32_H + +#include <stdint.h> +uint32_t pbl_crc32 (uint32_t in_crc,const char *buf,uint32_t len); + +#endif tools/pblimage.c +1
-39@@ -6,6 +6,7 @@#include "imagetool.h" #include <image.h> #include "pblimage.h" +#include "pbl_crc32.h" /* * Initialize to an invalid value. @@ -137,52 +138,6 @@ static void pbl_parser(char *name)fclose (fd); } -static uint32_t crc_table[256 ]; - -static void make_crc_table (void ) -{ -uint32_t mask; -int i, j; -uint32_t poly;/* polynomial exclusive-or pattern */ - -/* -* the polynomial used by PBL is 1 + x1 + x2 + x4 + x5 + x7 + x8 + x10 -* + x11 + x12 + x16 + x22 + x23 + x26 + x32. -*/ - poly =0x04c11db7 ; - -for (i =0 ; i <256 ; i++) { - mask = i <<24 ; -for (j =0 ; j <8 ; j++) { -if (mask &0x80000000 ) - mask = (mask <<1 ) ^ poly; -else - mask <<=1 ; - } - crc_table[i] = mask; - } -} - -unsigned long pbl_crc32 (unsigned long crc,const char *buf,uint32_t len) -{ -uint32_t crc32_val =0xffffffff ; -uint32_t xor =0x0 ; -int i; - -make_crc_table (); - -for (i =0 ; i < len; i++) - crc32_val = (crc32_val <<8 ) ^ - crc_table[(crc32_val >>24 ) ^ (*buf++ &0xff )]; - - crc32_val = crc32_val ^ xor;
tools/pblimage.c static void pbl_parser(char *name) · line 143
Quoted 10 lines
tools/pblimage.c +0
-7-if (crc32_val <0 ) { - crc32_val +=0xffffffff ; - crc32_val +=1 ; - } -return crc32_val; -} -static uint32_t reverse_byte (uint32_t val) {uint32_t temp;
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================
PATCH 2/2 mkimage: Refactor mxsimage to use common crc32 code
In reply to Charles Manningmxsimage uses the same crc32 function as pblimage.
--- tools/mxsimage.c | 28 +++------------------------- 1 file changed, 3 insertions(+), 25 deletions(-)
tools/mxsimage.c +3 -25
@@ -19,6 +19,7 @@#include "imagetool.h" #include "mxsimage.h" +#include "pbl_crc32.h" #include <image.h>
@@ -231,29 +232,6 @@ static int sb_aes_reinit(struct sb_image_ctx *ictx, int enc) }/* -* CRC32 -*/ -static uint32_t crc32 (uint8_t *data,uint32_t len) -{ -const uint32_t poly =0x04c11db7 ; -uint32_t crc32 =0xffffffff ; -unsigned int byte, bit; - -for (byte =0 ; byte < len; byte++) { - crc32 ^= data[byte] <<24 ; - -for (bit =8 ; bit >0 ; bit--) { -if (crc32 & (1UL <<31 )) - crc32 = (crc32 <<1 ) ^ poly; -else - crc32 = (crc32 <<1 ); - } - } - -return crc32; -} - -/* * Debug */ static void soprintf (struct sb_image_ctx *ictx,const char *fmt, ...)
@@ -998,7 +976,7 @@ static int sb_build_command_load(struct sb_image_ctx *ictx, ccmd->load.address = dest; ccmd->load.count = cctx->length; - ccmd->load.crc32 =crc32 (cctx->data, cctx->length); + ccmd->load.crc32 =pbl_crc32 (0 , cctx->data, cctx->length); cctx->size =sizeof (*ccmd) + cctx->length;
@@ -1834,7 +1812,7 @@ static int sb_verify_command(struct sb_image_ctx *ictx,EVP_DigestUpdate (&ictx->md_ctx, cctx->data, asize);sb_aes_crypt (ictx, cctx->data, cctx->data, asize); -if (ccmd->load.crc32 !=crc32 (cctx->data, asize)) { +if (ccmd->load.crc32 !=pbl_crc32 (0 , cctx->data, asize)) {fprintf (stderr,"ERR: SB LOAD command payload CRC32 invalid!\n" );return -EINVAL ;
Signature · 1 line
1.7.9.5
PATCH 2/2 mkimage: Refactor mxsimage to use common crc32 code
Hi Charles,
Quoted 60 lines · Charles Manning
mxsimage uses the same crc32 function as pblimage.
Signed-off-by Charles Manning <[email protected]>--- tools/mxsimage.c | 28 +++------------------------- 1 file changed, 3 insertions(+), 25 deletions(-)tools/mxsimage.c +2
-24@@ -19,6 +19,7 @@#include "imagetool.h" #include "mxsimage.h" +#include "pbl_crc32.h" #include <image.h> @@ -231,29 +232,6 @@ static int sb_aes_reinit(struct sb_image_ctx *ictx, int enc) }/* -* CRC32 -*/ -static uint32_t crc32 (uint8_t *data,uint32_t len) -{ -const uint32_t poly =0x04c11db7 ; -uint32_t crc32 =0xffffffff ; -unsigned int byte, bit; - -for (byte =0 ; byte < len; byte++) { - crc32 ^= data[byte] <<24 ; - -for (bit =8 ; bit >0 ; bit--) { -if (crc32 & (1UL <<31 )) - crc32 = (crc32 <<1 ) ^ poly; -else - crc32 = (crc32 <<1 ); - } - } - -return crc32; -} - -/* * Debug */ static void soprintf (struct sb_image_ctx *ictx,const char *fmt, ...)@@ -998,7 +976,7 @@ static int sb_build_command_load(struct sb_image_ctx *ictx, ccmd->load.address = dest; ccmd->load.count = cctx->length; - ccmd->load.crc32 =crc32 (cctx->data, cctx->length); + ccmd->load.crc32 =pbl_crc32 (0 , cctx->data, cctx->length); cctx->size =sizeof (*ccmd) + cctx->length;
tools/mxsimage.c static int sb_verify_command(struct sb_image_ctx *ictx, · line 1818
Quoted 8 lines
tools/mxsimage.c +1
-1@@ -1834,7 +1812,7 @@ static int sb_verify_command(struct sb_image_ctx *ictx,EVP_DigestUpdate (&ictx->md_ctx, cctx->data, asize);sb_aes_crypt (ictx, cctx->data, cctx->data, asize); -if (ccmd->load.crc32 !=crc32 (cctx->data, asize)) { +if (ccmd->load.crc32 !=pbl_crc32 (0 , cctx->data, asize)) {fprintf (stderr,"ERR: SB LOAD command payload CRC32 invalid!\n" );return -EINVAL ;
Good idea to factorize these functions, thanks !
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================
PATCH 2/2 mkimage: Refactor mxsimage to use common crc32 code
In reply to Charles ManningQuoted 4 lines · Charles Manning
mxsimage uses the same crc32 function as pblimage.
Signed-off-by Charles Manning <[email protected]>Acked-by Stefano Babic <[email protected]>
This introduces warnings:tools/mxsimage.c: In function ?sb_build_command_load?:tools/mxsimage.c:979:2: warning: pointer targets in passing argument 2 of ?pbl_crc32? differ in signedness [-Wpointer-sign] tools/pbl_crc32.h:11:10: note: expected ?const char *? but argument is of type ?uint8_t *? u-boot/tools/mxsimage.c: In function ?sb_verify_command?:tools/mxsimage.c:1815:3: warning: pointer targets in passing argument 2 of ?pbl_crc32? differ in signedness [-Wpointer-sign] tools/pbl_crc32.h:11:10: note: expected ?const char *? but argument is of type ?uint8_t *?
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140512/a6caceff/attachment.pgp>
PATCH 2/2 mkimage: Refactor mxsimage to use common crc32 code
Quoted 6 lines · On Tuesday 13 May 2014 08:26:44 Tom Rini wrote:
Quoted 4 lines · Charles Manning
mxsimage uses the same crc32 function as pblimage.
Signed-off-by Charles Manning <[email protected]>Acked-by Stefano Babic <[email protected]>
Quoted 9 lines
This introduces warnings:
tools/mxsimage.c: In function ?sb_build_command_load?:tools/mxsimage.c:979:2: warning: pointer targets in passing argument 2 of ?pbl_crc32? differ in signedness [-Wpointer-sign]tools/pbl_crc32.h:11:10:
note: expected ?const char *? but argument is of type ?uint8_t *?u-boot/tools/mxsimage.c: In function ?sb_verify_command?:tools/mxsimage.c:1815:3: warning: pointer targets in passing argument 2 of ?pbl_crc32? differ in signedness [-Wpointer-sign]tools/pbl_crc32.h:11:10:
note: expected ?const char *? but argument is of type ?uint8_t *?
Thanks for the feedback.
Will it be acceptable to do the following:
*Change the called function from uint8_t * to const uint8_t *Cast the const char * pointer to const uint8_t *.
Thanks
Charles
PATCH 2/2 mkimage: Refactor mxsimage to use common crc32 code
Quoted 17 lines · Charles Manning
Quoted 6 lines · On Tuesday 13 May 2014 08:26:44 Tom Rini wrote:
Quoted 4 lines · Charles Manning
mxsimage uses the same crc32 function as pblimage.
Signed-off-by Charles Manning <[email protected]>Acked-by Stefano Babic <[email protected]>Quoted 9 lines
This introduces warnings:
tools/mxsimage.c: In function ?sb_build_command_load?:tools/mxsimage.c:979:2: warning: pointer targets in passing argument 2 of ?pbl_crc32? differ in signedness [-Wpointer-sign]tools/pbl_crc32.h:11:10:
note: expected ?const char *? but argument is of type ?uint8_t *?u-boot/tools/mxsimage.c: In function ?sb_verify_command?:tools/mxsimage.c:1815:3: warning: pointer targets in passing argument 2 of ?pbl_crc32? differ in signedness [-Wpointer-sign]tools/pbl_crc32.h:11:10:
note: expected ?const char *? but argument is of type ?uint8_t *?
Quoted 6 lines
Thanks for the feedback.
Will it be acceptable to do the following:
*Change the called function from
uint8_t* to constuint8_t*Cast the const char * pointer to constuint8_t*.
Sounds right.
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140513/5dfa0834/attachment.pgp>
v2 cover mkimage: Refactor and clean up 32-bit crcs
In reply to Charles ManningAs a step towards adding an image signer for socfpga, this set of patches breaks out the common crc code that is used in both pblimage and mxsimage.
Not that this is NOT the same algorithm as the crc generated by zlib.
The new function has been named pbl_crc32.
This patch set just changes patch 1/2: casting pointers in mxsimage.c
Charles Manning (2):
mkimage : Split out and clean pbl_crc32 for use by other image types
tools: Refactor mxsimage to use pbl_crc32
tools/Makefile | 1 + tools/mxsimage.c | 32 +++++++----------------------- tools/pbl_crc32.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/pbl_crc32.h | 13 +++++++++++++ tools/pblimage.c | 47 +------------------------------------------- 5 files changed, 78 insertions(+), 71 deletions(-) create mode 100644 tools/pbl_crc32.c create mode 100644 tools/pbl_crc32.h
Signature · 1 line
1.7.9.5
PATCH v2 1/2 mkimage : Split out and clean pbl_crc32 for use by other image types
The crc32 used by pblimgae is NOT the same as zlib crc32.
The pbl_crc32 is useful for other purposes in mkimage so split it out.
While we are about it, clean up redundant and confusing code.
---
Unchanged from V1.
tools/Makefile | 1 + tools/pbl_crc32.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/pbl_crc32.h | 13 +++++++++++++ tools/pblimage.c | 47 +------------------------------------------- 4 files changed, 71 insertions(+), 46 deletions(-) create mode 100644 tools/pbl_crc32.c create mode 100644 tools/pbl_crc32.h
tools/Makefile +1 -0
@@ -86,6 +86,7 @@ dumpimage-mkimage-objs := aisimage.o \ omapimage.o \ os_support.o \ pblimage.o \ + pbl_crc32.o \ sha1.o \ sha256.o \ ublimage.o \
tools/pbl_crc32.c new file +56 -0
56 lines not on this page · raw message
tools/pbl_crc32.h new file +13 -0
@@ -0,0 +1,13 @@ +/* +* Copyright 2012 Freescale Semiconductor, Inc. +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#ifndef PBLCRC32_H +#define PBLCRC32_H + +#include <stdint.h> +uint32_t pbl_crc32 (uint32_t in_crc,const char *buf,uint32_t len); + +#endif
tools/pblimage.c +1 -46
59 lines not on this page · raw message
Signature · 1 line
1.7.9.5
PATCH v2 1/2 mkimage : Split out and clean pbl_crc32 for use by other image types
Quoted 7 lines · Charles Manning
The crc32 used by pblimgae is NOT the same as zlib crc32.
The
pbl_crc32is useful for other purposes in mkimage so split it out.While we are about it, clean up redundant and confusing code.
Signed-off-by Charles Manning <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140605/5a828342/attachment.pgp>
PATCH v2 2/2 tools: Refactor mxsimage to use pbl_crc32
In reply to Charles ManningBoth pblimage and mxsimage use the same crc algorithm, so refactor.
---
Changes for V2:
- Cast buffer pointers when calling pbl_crc32().
tools/mxsimage.c | 32 +++++++------------------------- 1 file changed, 7 insertions(+), 25 deletions(-)
tools/mxsimage.c +7 -25
@@ -19,6 +19,7 @@#include "imagetool.h" #include "mxsimage.h" +#include "pbl_crc32.h" #include <image.h>
@@ -231,29 +232,6 @@ static int sb_aes_reinit(struct sb_image_ctx *ictx, int enc) }/* -* CRC32 -*/ -static uint32_t crc32 (uint8_t *data,uint32_t len) -{ -const uint32_t poly =0x04c11db7 ; -uint32_t crc32 =0xffffffff ; -unsigned int byte, bit; - -for (byte =0 ; byte < len; byte++) { - crc32 ^= data[byte] <<24 ; - -for (bit =8 ; bit >0 ; bit--) { -if (crc32 & (1UL <<31 )) - crc32 = (crc32 <<1 ) ^ poly; -else - crc32 = (crc32 <<1 ); - } - } - -return crc32; -} - -/* * Debug */ static void soprintf (struct sb_image_ctx *ictx,const char *fmt, ...)
@@ -998,7 +976,9 @@ static int sb_build_command_load(struct sb_image_ctx *ictx, ccmd->load.address = dest; ccmd->load.count = cctx->length; - ccmd->load.crc32 =crc32 (cctx->data, cctx->length); + ccmd->load.crc32 =pbl_crc32 (0 , + (const char *)cctx->data, + cctx->length); cctx->size =sizeof (*ccmd) + cctx->length;
@@ -1834,7 +1814,9 @@ static int sb_verify_command(struct sb_image_ctx *ictx,EVP_DigestUpdate (&ictx->md_ctx, cctx->data, asize);sb_aes_crypt (ictx, cctx->data, cctx->data, asize); -if (ccmd->load.crc32 !=crc32 (cctx->data, asize)) { +if (ccmd->load.crc32 !=pbl_crc32 (0 , + (const char *)cctx->data, + asize)) {fprintf (stderr,"ERR: SB LOAD command payload CRC32 invalid!\n" );return -EINVAL ;
Signature · 1 line
1.7.9.5
PATCH v2 2/2 tools: Refactor mxsimage to use pbl_crc32
Quoted 3 lines · Charles Manning
Both pblimage and mxsimage use the same crc algorithm, so refactor.
Signed-off-by Charles Manning <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140605/93cb317e/attachment.pgp>