* [PATCH 1/5] move digest to crypto/ @ 2011-10-08 14:41 Jean-Christophe PLAGNIOL-VILLARD 2011-10-08 14:41 ` [PATCH 2/5] digest: factorise file digest to common/digest.c Jean-Christophe PLAGNIOL-VILLARD ` (3 more replies) 0 siblings, 4 replies; 8+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2011-10-08 14:41 UTC (permalink / raw) To: barebox Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- Makefile | 2 +- arch/arm/Kconfig | 1 + arch/blackfin/Kconfig | 2 +- arch/mips/Kconfig | 1 + arch/nios2/Kconfig | 2 +- arch/ppc/Kconfig | 1 + arch/sandbox/Kconfig | 1 + arch/x86/Kconfig | 1 + {lib => crypto}/Kconfig | 15 --------------- crypto/Makefile | 5 +++++ {lib => crypto}/crc16.c | 0 {lib => crypto}/crc32.c | 0 {lib => crypto}/md5.c | 0 {lib => crypto}/sha1.c | 0 {lib => crypto}/sha256.c | 0 lib/Kconfig | 22 ---------------------- lib/Makefile | 5 ----- scripts/bareboxenv.c | 2 +- scripts/mkimage.c | 2 +- 19 files changed, 15 insertions(+), 47 deletions(-) copy {lib => crypto}/Kconfig (56%) create mode 100644 crypto/Makefile rename {lib => crypto}/crc16.c (100%) rename {lib => crypto}/crc32.c (100%) rename {lib => crypto}/md5.c (100%) rename {lib => crypto}/sha1.c (100%) rename {lib => crypto}/sha256.c (100%) diff --git a/Makefile b/Makefile index ccf012c..175444d 100644 --- a/Makefile +++ b/Makefile @@ -410,7 +410,7 @@ scripts: scripts_basic include/config/auto.conf $(Q)$(MAKE) $(build)=$(@) # Objects we will link into barebox / subdirs we need to visit -common-y := common/ drivers/ commands/ lib/ net/ fs/ +common-y := common/ drivers/ commands/ lib/ crypto/ net/ fs/ ifeq ($(dot-config),1) # Read in config diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index d123787..da33000 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -144,3 +144,4 @@ source net/Kconfig source drivers/Kconfig source fs/Kconfig source lib/Kconfig +source crypto/Kconfig diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig index 587f802..1c58ba8 100644 --- a/arch/blackfin/Kconfig +++ b/arch/blackfin/Kconfig @@ -73,4 +73,4 @@ source net/Kconfig source drivers/Kconfig source fs/Kconfig source lib/Kconfig - +source crypto/Kconfig diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 8970470..50d5c67 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -225,3 +225,4 @@ source net/Kconfig source drivers/Kconfig source fs/Kconfig source lib/Kconfig +source crypto/Kconfig diff --git a/arch/nios2/Kconfig b/arch/nios2/Kconfig index b4b0429..e1af0c0 100644 --- a/arch/nios2/Kconfig +++ b/arch/nios2/Kconfig @@ -36,4 +36,4 @@ source net/Kconfig source drivers/Kconfig source fs/Kconfig source lib/Kconfig - +source crypto/Kconfig diff --git a/arch/ppc/Kconfig b/arch/ppc/Kconfig index 50ccaac..4c7b7cd 100644 --- a/arch/ppc/Kconfig +++ b/arch/ppc/Kconfig @@ -55,3 +55,4 @@ source net/Kconfig source drivers/Kconfig source fs/Kconfig source lib/Kconfig +source crypto/Kconfig diff --git a/arch/sandbox/Kconfig b/arch/sandbox/Kconfig index 36f8afb..10e6829 100644 --- a/arch/sandbox/Kconfig +++ b/arch/sandbox/Kconfig @@ -20,3 +20,4 @@ source net/Kconfig source drivers/Kconfig source fs/Kconfig source lib/Kconfig +source crypto/Kconfig diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 6e70760..711bbfe 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -65,3 +65,4 @@ source net/Kconfig source drivers/Kconfig source fs/Kconfig source lib/Kconfig +source crypto/Kconfig diff --git a/lib/Kconfig b/crypto/Kconfig similarity index 56% copy from lib/Kconfig copy to crypto/Kconfig index ad2b3cf..9f01810 100644 --- a/lib/Kconfig +++ b/crypto/Kconfig @@ -1,9 +1,3 @@ -config ZLIB - bool - -config BZLIB - bool - config CRC32 bool @@ -25,12 +19,3 @@ config SHA256 bool "SHA256" endif - -config GENERIC_FIND_NEXT_BIT - def_bool n - -config PROCESS_ESCAPE_SEQUENCE - def_bool n - -source lib/lzo/Kconfig - diff --git a/crypto/Makefile b/crypto/Makefile new file mode 100644 index 0000000..a88c5b7 --- /dev/null +++ b/crypto/Makefile @@ -0,0 +1,5 @@ +obj-$(CONFIG_CRC32) += crc32.o +obj-$(CONFIG_CRC16) += crc16.o +obj-$(CONFIG_MD5) += md5.o +obj-$(CONFIG_SHA1) += sha1.o +obj-$(CONFIG_SHA256) += sha256.o diff --git a/lib/crc16.c b/crypto/crc16.c similarity index 100% rename from lib/crc16.c rename to crypto/crc16.c diff --git a/lib/crc32.c b/crypto/crc32.c similarity index 100% rename from lib/crc32.c rename to crypto/crc32.c diff --git a/lib/md5.c b/crypto/md5.c similarity index 100% rename from lib/md5.c rename to crypto/md5.c diff --git a/lib/sha1.c b/crypto/sha1.c similarity index 100% rename from lib/sha1.c rename to crypto/sha1.c diff --git a/lib/sha256.c b/crypto/sha256.c similarity index 100% rename from lib/sha256.c rename to crypto/sha256.c diff --git a/lib/Kconfig b/lib/Kconfig index ad2b3cf..51f43e0 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -4,28 +4,6 @@ config ZLIB config BZLIB bool -config CRC32 - bool - -config CRC16 - bool - -menuconfig DIGEST - bool "Digest " - -if DIGEST - -config MD5 - bool "MD5" - -config SHA1 - bool "SHA1" - -config SHA256 - bool "SHA256" - -endif - config GENERIC_FIND_NEXT_BIT def_bool n diff --git a/lib/Makefile b/lib/Makefile index d96cfe7..c66da7a 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -17,8 +17,6 @@ obj-y += recursive_action.o obj-y += make_directory.o obj-$(CONFIG_BZLIB) += bzlib.o bzlib_crctable.o bzlib_decompress.o bzlib_huffman.o bzlib_randtable.o obj-$(CONFIG_ZLIB) += zlib.o gunzip.o -obj-$(CONFIG_CRC32) += crc32.o -obj-$(CONFIG_CRC16) += crc16.o obj-$(CONFIG_CMDLINE_EDITING) += readline.o obj-$(CONFIG_SIMPLE_READLINE) += readline_simple.o obj-$(CONFIG_GLOB) += fnmatch.o @@ -31,6 +29,3 @@ obj-y += lzo/ obj-y += show_progress.o obj-$(CONFIG_LZO_DECOMPRESS) += decompress_unlzo.o obj-$(CONFIG_PROCESS_ESCAPE_SEQUENCE) += process_escape_sequence.o -obj-$(CONFIG_MD5) += md5.o -obj-$(CONFIG_SHA1) += sha1.o -obj-$(CONFIG_SHA256) += sha256.o diff --git a/scripts/bareboxenv.c b/scripts/bareboxenv.c index 5c7f10e..b0d5818 100644 --- a/scripts/bareboxenv.c +++ b/scripts/bareboxenv.c @@ -117,7 +117,7 @@ char *concat_subpath_file(const char *path, const char *f) #include "../lib/recursive_action.c" #include "../include/envfs.h" -#include "../lib/crc32.c" +#include "../crypto/crc32.c" #include "../lib/make_directory.c" #include "../include/environment.h" #include "../common/environment.c" diff --git a/scripts/mkimage.c b/scripts/mkimage.c index d3a8bfb..3beab91 100644 --- a/scripts/mkimage.c +++ b/scripts/mkimage.c @@ -34,7 +34,7 @@ char *cmdname; #include "../include/zlib.h" -#include "../lib/crc32.c" +#include "../crypto/crc32.c" //extern unsigned long crc32 (unsigned long crc, const char *buf, unsigned int len); -- 1.7.6.3 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/5] digest: factorise file digest to common/digest.c 2011-10-08 14:41 [PATCH 1/5] move digest to crypto/ Jean-Christophe PLAGNIOL-VILLARD @ 2011-10-08 14:41 ` Jean-Christophe PLAGNIOL-VILLARD 2011-10-08 14:41 ` [PATCH 3/5] sha1: drop never used sha1_hmac Jean-Christophe PLAGNIOL-VILLARD ` (2 subsequent siblings) 3 siblings, 0 replies; 8+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2011-10-08 14:41 UTC (permalink / raw) To: barebox rename it to digest_file_window introduce digest_file to digest a file and digest_file_by_name where we specify the algo by name Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- commands/digest.c | 78 ++++++++-------------------------------- common/digest.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++ include/digest.h | 8 ++++ 3 files changed, 125 insertions(+), 62 deletions(-) diff --git a/commands/digest.c b/commands/digest.c index 2a699e6..1fbffb6 100644 --- a/commands/digest.c +++ b/commands/digest.c @@ -29,71 +29,12 @@ #include <malloc.h> #include <digest.h> -static int file_digest(struct digest *d, char *filename, - ulong start, ulong size) -{ - ulong len = 0; - int fd, now, i, ret = 0; - unsigned char *buf; - - d->init(d); - - fd = open(filename, O_RDONLY); - if (fd < 0) { - perror(filename); - return fd; - } - - if (start > 0) { - ret = lseek(fd, start, SEEK_SET); - if (ret == -1) { - perror("lseek"); - goto out; - } - } - - buf = xmalloc(4096); - - while (size) { - now = min((ulong)4096, size); - now = read(fd, buf, now); - if (now < 0) { - ret = now; - perror("read"); - goto out_free; - } - if (!now) - break; - - if (ctrlc()) { - ret = -EINTR; - goto out_free; - } - - d->update(d, buf, now); - size -= now; - len += now; - } - - d->final(d, buf); - - for (i = 0; i < d->length; i++) - printf("%02x", buf[i]); - - printf(" %s\t0x%08lx ... 0x%08lx\n", filename, start, start + len); - -out_free: - free(buf); -out: - close(fd); - - return ret; -} - static int do_digest(char *algorithm, int argc, char *argv[]) { struct digest *d; int ret = 0; + int i; + unsigned char *hash; d = digest_get_by_name(algorithm); BUG_ON(!d); @@ -101,6 +42,12 @@ static int do_digest(char *algorithm, int argc, char *argv[]) if (argc < 2) return COMMAND_ERROR_USAGE; + hash = calloc(d->length, sizeof(unsigned char)); + if (!hash) { + perror("calloc"); + return COMMAND_ERROR_USAGE; + } + argv++; while (*argv) { char *filename = "/dev/mem"; @@ -113,12 +60,19 @@ static int do_digest(char *algorithm, int argc, char *argv[]) argv++; } - if (file_digest(d, filename, start, size) < 0) + if (digest_file_window(d, filename, hash, start, size) < 0) ret = 1; + for (i = 0; i < d->length; i++) + printf("%02x", hash[i]); + + printf(" %s\t0x%08lx ... 0x%08lx\n", filename, start, start + size); + argv++; } + free(hash); + return ret; } diff --git a/common/digest.c b/common/digest.c index 10ad060..a327395 100644 --- a/common/digest.c +++ b/common/digest.c @@ -23,6 +23,9 @@ #include <common.h> #include <digest.h> #include <malloc.h> +#include <fs.h> +#include <fcntl.h> +#include <linux/stat.h> #include <errno.h> #include <module.h> #include <linux/err.h> @@ -75,3 +78,101 @@ struct digest* digest_get_by_name(char* name) return NULL; } EXPORT_SYMBOL_GPL(digest_get_by_name); + +int digest_file_window(struct digest *d, char *filename, + unsigned char *hash, + ulong start, ulong size) +{ + ulong len = 0; + int fd, now, ret = 0; + unsigned char *buf; + int flags; + + d->init(d); + + fd = open(filename, O_RDONLY); + if (fd < 0) { + perror(filename); + return fd; + } + + buf = memmap(fd, PROT_READ); + if (buf == (void *)-1) { + buf = xmalloc(4096); + flags = 1; + } + + if (start > 0) { + if (flags) { + ret = lseek(fd, start, SEEK_SET); + if (ret == -1) { + perror("lseek"); + goto out; + } + } else { + buf += start; + } + } + + while (size) { + now = min((ulong)4096, size); + if (flags) { + now = read(fd, buf, now); + if (now < 0) { + ret = now; + perror("read"); + goto out_free; + } + if (!now) + break; + } + + if (ctrlc()) { + ret = -EINTR; + goto out_free; + } + + d->update(d, buf, now); + size -= now; + len += now; + } + + d->final(d, hash); + +out_free: + if (flags) + free(buf); +out: + close(fd); + + return ret; +} +EXPORT_SYMBOL_GPL(digest_file_window); + +int digest_file(struct digest *d, char *filename, + unsigned char *hash) +{ + struct stat st; + int ret; + + ret = stat(filename, &st); + + if (ret < 0) + return ret; + + return digest_file_window(d, filename, hash, 0, st.st_size); +} +EXPORT_SYMBOL_GPL(digest_file); + +int digest_file_by_name(char *algo, char *filename, + unsigned char *hash) +{ + struct digest *d; + + d = digest_get_by_name(algo); + if (!d) + return -EIO; + + return digest_file(d, filename, hash); +} +EXPORT_SYMBOL_GPL(digest_file_by_name); diff --git a/include/digest.h b/include/digest.h index 1dcfd9d..36a8e37 100644 --- a/include/digest.h +++ b/include/digest.h @@ -46,4 +46,12 @@ void digest_unregister(struct digest *d); struct digest* digest_get_by_name(char* name); +int digest_file_window(struct digest *d, char *filename, + unsigned char *hash, + ulong start, ulong size); +int digest_file(struct digest *d, char *filename, + unsigned char *hash); +int digest_file_by_name(char *algo, char *filename, + unsigned char *hash); + #endif /* __SH_ST_DEVICES_H__ */ -- 1.7.6.3 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/5] sha1: drop never used sha1_hmac 2011-10-08 14:41 [PATCH 1/5] move digest to crypto/ Jean-Christophe PLAGNIOL-VILLARD 2011-10-08 14:41 ` [PATCH 2/5] digest: factorise file digest to common/digest.c Jean-Christophe PLAGNIOL-VILLARD @ 2011-10-08 14:41 ` Jean-Christophe PLAGNIOL-VILLARD 2011-10-09 9:38 ` Sascha Hauer 2011-10-08 14:41 ` [PATCH 4/5] crypto: add sha224 support Jean-Christophe PLAGNIOL-VILLARD 2011-10-08 14:41 ` [PATCH 5/5] command/digest: " Jean-Christophe PLAGNIOL-VILLARD 3 siblings, 1 reply; 8+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2011-10-08 14:41 UTC (permalink / raw) To: barebox Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- crypto/sha1.c | 39 --------------------------------------- 1 files changed, 0 insertions(+), 39 deletions(-) diff --git a/crypto/sha1.c b/crypto/sha1.c index b4e2abc..e989c8a 100644 --- a/crypto/sha1.c +++ b/crypto/sha1.c @@ -291,45 +291,6 @@ static void sha1_finish (sha1_context * ctx, uint8_t output[20]) PUT_UINT32_BE (ctx->state[4], output, 16); } -/* - * Output = HMAC-SHA-1( input buffer, hmac key ) - */ -void sha1_hmac (uint8_t *key, uint32_t keylen, - uint8_t *input, uint32_t ilen, uint8_t output[20]) -{ - uint32_t i; - sha1_context ctx; - uint8_t k_ipad[64]; - uint8_t k_opad[64]; - uint8_t tmpbuf[20]; - - memset (k_ipad, 0x36, 64); - memset (k_opad, 0x5C, 64); - - for (i = 0; i < keylen; i++) { - if (i >= 64) - break; - - k_ipad[i] ^= key[i]; - k_opad[i] ^= key[i]; - } - - sha1_starts (&ctx); - sha1_update (&ctx, k_ipad, 64); - sha1_update (&ctx, input, ilen); - sha1_finish (&ctx, tmpbuf); - - sha1_starts (&ctx); - sha1_update (&ctx, k_opad, 64); - sha1_update (&ctx, tmpbuf, 20); - sha1_finish (&ctx, output); - - memset (k_ipad, 0, 64); - memset (k_opad, 0, 64); - memset (tmpbuf, 0, 20); - memset (&ctx, 0, sizeof (sha1_context)); -} - struct sha1 { sha1_context context; struct digest d; -- 1.7.6.3 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/5] sha1: drop never used sha1_hmac 2011-10-08 14:41 ` [PATCH 3/5] sha1: drop never used sha1_hmac Jean-Christophe PLAGNIOL-VILLARD @ 2011-10-09 9:38 ` Sascha Hauer 2011-10-10 18:10 ` Jean-Christophe PLAGNIOL-VILLARD 0 siblings, 1 reply; 8+ messages in thread From: Sascha Hauer @ 2011-10-09 9:38 UTC (permalink / raw) To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox On Sat, Oct 08, 2011 at 04:41:57PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote: > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> > --- > crypto/sha1.c | 39 --------------------------------------- > 1 files changed, 0 insertions(+), 39 deletions(-) This one does not apply. We do not have a crypto/ dir in the tree. Sascha > > diff --git a/crypto/sha1.c b/crypto/sha1.c > index b4e2abc..e989c8a 100644 > --- a/crypto/sha1.c > +++ b/crypto/sha1.c > @@ -291,45 +291,6 @@ static void sha1_finish (sha1_context * ctx, uint8_t output[20]) > PUT_UINT32_BE (ctx->state[4], output, 16); > } > > -/* > - * Output = HMAC-SHA-1( input buffer, hmac key ) > - */ > -void sha1_hmac (uint8_t *key, uint32_t keylen, > - uint8_t *input, uint32_t ilen, uint8_t output[20]) > -{ > - uint32_t i; > - sha1_context ctx; > - uint8_t k_ipad[64]; > - uint8_t k_opad[64]; > - uint8_t tmpbuf[20]; > - > - memset (k_ipad, 0x36, 64); > - memset (k_opad, 0x5C, 64); > - > - for (i = 0; i < keylen; i++) { > - if (i >= 64) > - break; > - > - k_ipad[i] ^= key[i]; > - k_opad[i] ^= key[i]; > - } > - > - sha1_starts (&ctx); > - sha1_update (&ctx, k_ipad, 64); > - sha1_update (&ctx, input, ilen); > - sha1_finish (&ctx, tmpbuf); > - > - sha1_starts (&ctx); > - sha1_update (&ctx, k_opad, 64); > - sha1_update (&ctx, tmpbuf, 20); > - sha1_finish (&ctx, output); > - > - memset (k_ipad, 0, 64); > - memset (k_opad, 0, 64); > - memset (tmpbuf, 0, 20); > - memset (&ctx, 0, sizeof (sha1_context)); > -} > - > struct sha1 { > sha1_context context; > struct digest d; > -- > 1.7.6.3 > > > _______________________________________________ > barebox mailing list > barebox@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/barebox > -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/5] sha1: drop never used sha1_hmac 2011-10-09 9:38 ` Sascha Hauer @ 2011-10-10 18:10 ` Jean-Christophe PLAGNIOL-VILLARD 2011-10-12 6:53 ` Sascha Hauer 0 siblings, 1 reply; 8+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2011-10-10 18:10 UTC (permalink / raw) To: Sascha Hauer; +Cc: barebox On 11:38 Sun 09 Oct , Sascha Hauer wrote: > On Sat, Oct 08, 2011 at 04:41:57PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote: > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> > > --- > > crypto/sha1.c | 39 --------------------------------------- > > 1 files changed, 0 insertions(+), 39 deletions(-) > > This one does not apply. We do not have a crypto/ dir in the tree. the frist patch do the move it Best Regards, J. _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/5] sha1: drop never used sha1_hmac 2011-10-10 18:10 ` Jean-Christophe PLAGNIOL-VILLARD @ 2011-10-12 6:53 ` Sascha Hauer 0 siblings, 0 replies; 8+ messages in thread From: Sascha Hauer @ 2011-10-12 6:53 UTC (permalink / raw) To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox On Mon, Oct 10, 2011 at 08:10:45PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote: > On 11:38 Sun 09 Oct , Sascha Hauer wrote: > > On Sat, Oct 08, 2011 at 04:41:57PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote: > > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> > > > --- > > > crypto/sha1.c | 39 --------------------------------------- > > > 1 files changed, 0 insertions(+), 39 deletions(-) > > > > This one does not apply. We do not have a crypto/ dir in the tree. > the frist patch do the move it Ah, ok. I probably skipped the first patch because I thought it's the introductory mail. Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 4/5] crypto: add sha224 support 2011-10-08 14:41 [PATCH 1/5] move digest to crypto/ Jean-Christophe PLAGNIOL-VILLARD 2011-10-08 14:41 ` [PATCH 2/5] digest: factorise file digest to common/digest.c Jean-Christophe PLAGNIOL-VILLARD 2011-10-08 14:41 ` [PATCH 3/5] sha1: drop never used sha1_hmac Jean-Christophe PLAGNIOL-VILLARD @ 2011-10-08 14:41 ` Jean-Christophe PLAGNIOL-VILLARD 2011-10-08 14:41 ` [PATCH 5/5] command/digest: " Jean-Christophe PLAGNIOL-VILLARD 3 siblings, 0 replies; 8+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2011-10-08 14:41 UTC (permalink / raw) To: barebox the sha224sum is nearly the same as sha256sum except for the init of the context and the hash length Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- crypto/Kconfig | 3 + crypto/Makefile | 3 +- crypto/{sha256.c => sha2.c} | 130 +++++++++++++++++++++++++++++------------- 3 files changed, 95 insertions(+), 41 deletions(-) rename crypto/{sha256.c => sha2.c} (75%) diff --git a/crypto/Kconfig b/crypto/Kconfig index 9f01810..a391ae6 100644 --- a/crypto/Kconfig +++ b/crypto/Kconfig @@ -15,6 +15,9 @@ config MD5 config SHA1 bool "SHA1" +config SHA224 + bool "SHA224" + config SHA256 bool "SHA256" diff --git a/crypto/Makefile b/crypto/Makefile index a88c5b7..955a66d 100644 --- a/crypto/Makefile +++ b/crypto/Makefile @@ -2,4 +2,5 @@ obj-$(CONFIG_CRC32) += crc32.o obj-$(CONFIG_CRC16) += crc16.o obj-$(CONFIG_MD5) += md5.o obj-$(CONFIG_SHA1) += sha1.o -obj-$(CONFIG_SHA256) += sha256.o +obj-$(CONFIG_SHA224) += sha2.o +obj-$(CONFIG_SHA256) += sha2.o diff --git a/crypto/sha256.c b/crypto/sha2.c similarity index 75% rename from crypto/sha256.c rename to crypto/sha2.c index 975ebe9..17303e6 100644 --- a/crypto/sha256.c +++ b/crypto/sha2.c @@ -24,13 +24,15 @@ #include <linux/string.h> #include <asm/byteorder.h> +#define SHA224_SUM_LEN 28 #define SHA256_SUM_LEN 32 typedef struct { uint32_t total[2]; uint32_t state[8]; uint8_t buffer[64]; -} sha256_context; + int is224; +} sha2_context; /* * 32-bit integer manipulation macros (big endian) @@ -38,22 +40,42 @@ typedef struct { #define GET_UINT32_BE(n,b,i) (n) = be32_to_cpu(((uint32_t*)(b))[i / 4]) #define PUT_UINT32_BE(n,b,i) ((uint32_t*)(b))[i / 4] = cpu_to_be32(n) -static void sha256_starts(sha256_context * ctx) +static void sha2_starts(sha2_context * ctx, int is224) { ctx->total[0] = 0; ctx->total[1] = 0; - ctx->state[0] = 0x6A09E667; - ctx->state[1] = 0xBB67AE85; - ctx->state[2] = 0x3C6EF372; - ctx->state[3] = 0xA54FF53A; - ctx->state[4] = 0x510E527F; - ctx->state[5] = 0x9B05688C; - ctx->state[6] = 0x1F83D9AB; - ctx->state[7] = 0x5BE0CD19; +#ifdef CONFIG_SHA256 + if (is224 == 0) { + /* SHA-256 */ + ctx->state[0] = 0x6A09E667; + ctx->state[1] = 0xBB67AE85; + ctx->state[2] = 0x3C6EF372; + ctx->state[3] = 0xA54FF53A; + ctx->state[4] = 0x510E527F; + ctx->state[5] = 0x9B05688C; + ctx->state[6] = 0x1F83D9AB; + ctx->state[7] = 0x5BE0CD19; + } +#endif +#ifdef CONFIG_SHA224 + if (is224 == 1) { + /* SHA-224 */ + ctx->state[0] = 0xC1059ED8; + ctx->state[1] = 0x367CD507; + ctx->state[2] = 0x3070DD17; + ctx->state[3] = 0xF70E5939; + ctx->state[4] = 0xFFC00B31; + ctx->state[5] = 0x68581511; + ctx->state[6] = 0x64F98FA7; + ctx->state[7] = 0xBEFA4FA4; + } +#endif + + ctx->is224 = is224; } -static void sha256_process(sha256_context * ctx, uint8_t data[64]) +static void sha2_process(sha2_context * ctx, const uint8_t data[64]) { uint32_t temp1, temp2; uint32_t W[64]; @@ -184,32 +206,33 @@ static void sha256_process(sha256_context * ctx, uint8_t data[64]) ctx->state[7] += H; } -static void sha256_update(sha256_context * ctx, uint8_t * input, uint32_t length) +static void sha2_update(sha2_context * ctx, const uint8_t * input, size_t length) { - uint32_t left, fill; + size_t fill; + uint32_t left; - if (!length) + if (length <= 0) return; left = ctx->total[0] & 0x3F; fill = 64 - left; - ctx->total[0] += length; + ctx->total[0] += (uint32_t)length; ctx->total[0] &= 0xFFFFFFFF; - if (ctx->total[0] < length) + if (ctx->total[0] < (uint32_t)length) ctx->total[1]++; if (left && length >= fill) { memcpy((void *) (ctx->buffer + left), (void *) input, fill); - sha256_process(ctx, ctx->buffer); + sha2_process(ctx, ctx->buffer); length -= fill; input += fill; left = 0; } while (length >= 64) { - sha256_process(ctx, input); + sha2_process(ctx, input); length -= 64; input += 64; } @@ -218,14 +241,14 @@ static void sha256_update(sha256_context * ctx, uint8_t * input, uint32_t length memcpy((void *) (ctx->buffer + left), (void *) input, length); } -static uint8_t sha256_padding[64] = { +static const uint8_t sha2_padding[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -static void sha256_finish(sha256_context * ctx, uint8_t digest[32]) +static void sha2_finish(sha2_context * ctx, uint8_t digest[32]) { uint32_t last, padn; uint32_t high, low; @@ -241,8 +264,8 @@ static void sha256_finish(sha256_context * ctx, uint8_t digest[32]) last = ctx->total[0] & 0x3F; padn = (last < 56) ? (56 - last) : (120 - last); - sha256_update(ctx, sha256_padding, padn); - sha256_update(ctx, msglen, 8); + sha2_update(ctx, sha2_padding, padn); + sha2_update(ctx, msglen, 8); PUT_UINT32_BE(ctx->state[0], digest, 0); PUT_UINT32_BE(ctx->state[1], digest, 4); @@ -254,53 +277,80 @@ static void sha256_finish(sha256_context * ctx, uint8_t digest[32]) PUT_UINT32_BE(ctx->state[7], digest, 28); } -struct sha256 { - sha256_context context; +struct sha2 { + sha2_context context; struct digest d; }; -static int digest_sha256_init(struct digest *d) +static int digest_sha2_update(struct digest *d, const void *data, + unsigned long len) { - struct sha256 *m = container_of(d, struct sha256, d); + struct sha2 *m = container_of(d, struct sha2, d); - sha256_starts(&m->context); + sha2_update(&m->context, (uint8_t *)data, len); return 0; } -static int digest_sha256_update(struct digest *d, const void *data, - unsigned long len) +static int digest_sha2_final(struct digest *d, unsigned char *md) { - struct sha256 *m = container_of(d, struct sha256, d); + struct sha2 *m = container_of(d, struct sha2, d); - sha256_update(&m->context, (uint8_t *)data, len); + sha2_finish(&m->context, md); return 0; } -static int digest_sha256_final(struct digest *d, unsigned char *md) +#ifdef CONFIG_SHA224 +static int digest_sha224_init(struct digest *d) +{ + struct sha2 *m = container_of(d, struct sha2, d); + + sha2_starts(&m->context, 1); + + return 0; +} + +static struct sha2 m224 = { + .d = { + .init = digest_sha224_init, + .update = digest_sha2_update, + .final = digest_sha2_final, + .length = SHA224_SUM_LEN, + } +}; +#endif + +#ifdef CONFIG_SHA256 +static int digest_sha256_init(struct digest *d) { - struct sha256 *m = container_of(d, struct sha256, d); + struct sha2 *m = container_of(d, struct sha2, d); - sha256_finish(&m->context, md); + sha2_starts(&m->context, 0); return 0; } -static struct sha256 m = { +static struct sha2 m256 = { .d = { .name = "sha256", .init = digest_sha256_init, - .update = digest_sha256_update, - .final = digest_sha256_final, + .update = digest_sha2_update, + .final = digest_sha2_final, .length = SHA256_SUM_LEN, } }; +#endif -static int sha256_digest_register(void) +static int sha2_digest_register(void) { - digest_register(&m.d); +#ifdef CONFIG_SHA224 + digest_register(&m224.d); +#endif +#ifdef CONFIG_SHA256 + digest_register(&m256.d); +#endif return 0; } -device_initcall(sha256_digest_register); +device_initcall(sha2_digest_register); -- 1.7.6.3 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 5/5] command/digest: add sha224 support 2011-10-08 14:41 [PATCH 1/5] move digest to crypto/ Jean-Christophe PLAGNIOL-VILLARD ` (2 preceding siblings ...) 2011-10-08 14:41 ` [PATCH 4/5] crypto: add sha224 support Jean-Christophe PLAGNIOL-VILLARD @ 2011-10-08 14:41 ` Jean-Christophe PLAGNIOL-VILLARD 3 siblings, 0 replies; 8+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2011-10-08 14:41 UTC (permalink / raw) To: barebox Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- commands/Kconfig | 6 ++++++ commands/digest.c | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 0 deletions(-) diff --git a/commands/Kconfig b/commands/Kconfig index 39bdb0f..095c1b2 100644 --- a/commands/Kconfig +++ b/commands/Kconfig @@ -252,6 +252,12 @@ config CMD_SHA256SUM select SHA256 prompt "sha256sum" +config CMD_SHA224SUM + tristate + select CMD_DIGEST + select SHA224 + prompt "sha224sum" + config CMD_MTEST tristate prompt "mtest" diff --git a/commands/digest.c b/commands/digest.c index 1fbffb6..fbeadf9 100644 --- a/commands/digest.c +++ b/commands/digest.c @@ -116,6 +116,26 @@ BAREBOX_CMD_END #endif /* CMD_CMD_SHA1SUM */ +#ifdef CONFIG_CMD_SHA224SUM + +static int do_sha224(struct command *cmdtp, int argc, char *argv[]) +{ + return do_digest("sha224", argc, argv); +} + +BAREBOX_CMD_HELP_START(sha224sum) +BAREBOX_CMD_HELP_USAGE("sha224sum [[FILE] [AREA]]...\n") +BAREBOX_CMD_HELP_SHORT("Calculate a sha224 checksum of a memory area.\n") +BAREBOX_CMD_HELP_END + +BAREBOX_CMD_START(sha224sum) + .cmd = do_sha224, + .usage = "sha224 checksum calculation", + BAREBOX_CMD_HELP(cmd_sha224sum_help) +BAREBOX_CMD_END + +#endif /* CMD_CMD_SHA224SUM */ + #ifdef CONFIG_CMD_SHA256SUM static int do_sha256(struct command *cmdtp, int argc, char *argv[]) -- 1.7.6.3 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-10-12 6:53 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2011-10-08 14:41 [PATCH 1/5] move digest to crypto/ Jean-Christophe PLAGNIOL-VILLARD 2011-10-08 14:41 ` [PATCH 2/5] digest: factorise file digest to common/digest.c Jean-Christophe PLAGNIOL-VILLARD 2011-10-08 14:41 ` [PATCH 3/5] sha1: drop never used sha1_hmac Jean-Christophe PLAGNIOL-VILLARD 2011-10-09 9:38 ` Sascha Hauer 2011-10-10 18:10 ` Jean-Christophe PLAGNIOL-VILLARD 2011-10-12 6:53 ` Sascha Hauer 2011-10-08 14:41 ` [PATCH 4/5] crypto: add sha224 support Jean-Christophe PLAGNIOL-VILLARD 2011-10-08 14:41 ` [PATCH 5/5] command/digest: " Jean-Christophe PLAGNIOL-VILLARD
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox