Module Name: src Committed By: joerg Date: Tue May 26 08:04:12 UTC 2009
Modified Files: src/common/lib/libc/hash/sha2: sha2.c src/distrib/sets/lists/base: md.amd64 md.sparc64 shl.mi src/distrib/sets/lists/comp: mi src/lib/libc: shlib_version src/lib/libc/hash/sha2: Makefile.inc sha2.3 src/lib/libc/include: namespace.h src/lib/libcrypto: sha.inc shlib_version src/sys/sys: sha2.h Added Files: src/lib/libc/hash/sha2: sha224hl.c src/lib/libcrypto: libc-sha256.c libc-sha512.c Log Message: Add SHA224 implementation to libc. Make libcrypto use the SHA2 implementation of libc. Bump minor versions of libc and libcrypto. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/common/lib/libc/hash/sha2/sha2.c cvs rdiff -u -r1.50 -r1.51 src/distrib/sets/lists/base/md.amd64 cvs rdiff -u -r1.45 -r1.46 src/distrib/sets/lists/base/md.sparc64 cvs rdiff -u -r1.473 -r1.474 src/distrib/sets/lists/base/shl.mi cvs rdiff -u -r1.1262 -r1.1263 src/distrib/sets/lists/comp/mi cvs rdiff -u -r1.211 -r1.212 src/lib/libc/shlib_version cvs rdiff -u -r1.3 -r1.4 src/lib/libc/hash/sha2/Makefile.inc cvs rdiff -u -r1.4 -r1.5 src/lib/libc/hash/sha2/sha2.3 cvs rdiff -u -r0 -r1.1 src/lib/libc/hash/sha2/sha224hl.c cvs rdiff -u -r1.137 -r1.138 src/lib/libc/include/namespace.h cvs rdiff -u -r0 -r1.1 src/lib/libcrypto/libc-sha256.c \ src/lib/libcrypto/libc-sha512.c cvs rdiff -u -r1.9 -r1.10 src/lib/libcrypto/sha.inc cvs rdiff -u -r1.15 -r1.16 src/lib/libcrypto/shlib_version cvs rdiff -u -r1.2 -r1.3 src/sys/sys/sha2.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/common/lib/libc/hash/sha2/sha2.c diff -u src/common/lib/libc/hash/sha2/sha2.c:1.7 src/common/lib/libc/hash/sha2/sha2.c:1.8 --- src/common/lib/libc/hash/sha2/sha2.c:1.7 Sat Feb 16 17:15:32 2008 +++ src/common/lib/libc/hash/sha2/sha2.c Tue May 26 08:04:11 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: sha2.c,v 1.7 2008/02/16 17:15:32 apb Exp $ */ +/* $NetBSD: sha2.c,v 1.8 2009/05/26 08:04:11 joerg Exp $ */ /* $KAME: sha2.c,v 1.9 2003/07/20 00:28:38 itojun Exp $ */ /* @@ -39,14 +39,14 @@ #include <sys/cdefs.h> #if defined(_KERNEL) || defined(_STANDALONE) -__KERNEL_RCSID(0, "$NetBSD: sha2.c,v 1.7 2008/02/16 17:15:32 apb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sha2.c,v 1.8 2009/05/26 08:04:11 joerg Exp $"); #include <lib/libkern/libkern.h> #else #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: sha2.c,v 1.7 2008/02/16 17:15:32 apb Exp $"); +__RCSID("$NetBSD: sha2.c,v 1.8 2009/05/26 08:04:11 joerg Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -219,6 +219,7 @@ * only. */ static void SHA512_Last(SHA512_CTX*); +void SHA224_Transform(SHA224_CTX*, const sha2_word64*); void SHA256_Transform(SHA256_CTX*, const sha2_word32*); void SHA384_Transform(SHA384_CTX*, const sha2_word64*); void SHA512_Transform(SHA512_CTX*, const sha2_word64*); @@ -245,6 +246,18 @@ 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL }; +/* Initial hash value H for SHA-224: */ +static const sha2_word32 sha224_initial_hash_value[8] = { + 0xc1059ed8UL, + 0x367cd507UL, + 0x3070dd17UL, + 0xf70e5939UL, + 0xffc00b31UL, + 0x68581511UL, + 0x64f98fa7UL, + 0xbefa4fa4UL +}; + /* Initial hash value H for SHA-256: */ static const sha2_word32 sha256_initial_hash_value[8] = { 0x6a09e667UL, @@ -326,6 +339,11 @@ }; #if !defined(_KERNEL) && defined(__weak_alias) +__weak_alias(SHA224_Init,_SHA224_Init) +__weak_alias(SHA224_Update,_SHA224_Update) +__weak_alias(SHA224_Final,_SHA224_Final) +__weak_alias(SHA224_Transform,_SHA224_Transform) + __weak_alias(SHA256_Init,_SHA256_Init) __weak_alias(SHA256_Update,_SHA256_Update) __weak_alias(SHA256_Final,_SHA256_Final) @@ -342,14 +360,32 @@ __weak_alias(SHA512_Transform,_SHA512_Transform) #endif +/*** SHA-224: *********************************************************/ +int SHA224_Init(SHA256_CTX* context) { + if (context == (SHA256_CTX*)0) { + return 1; + } + memcpy(context->state, sha224_initial_hash_value, (size_t)(SHA256_DIGEST_LENGTH)); + memset(context->buffer, 0, (size_t)(SHA256_BLOCK_LENGTH)); + context->bitcount = 0; + + return 1; +} + /*** SHA-256: *********************************************************/ -void SHA256_Init(SHA256_CTX* context) { +int SHA256_Init(SHA256_CTX* context) { if (context == (SHA256_CTX*)0) { - return; + return 1; } memcpy(context->state, sha256_initial_hash_value, (size_t)(SHA256_DIGEST_LENGTH)); memset(context->buffer, 0, (size_t)(SHA256_BLOCK_LENGTH)); context->bitcount = 0; + + return 1; +} + +void SHA224_Transform(SHA224_CTX* context, const sha2_word64* data) { + SHA224_Transform((SHA256_CTX*)context, data); } #ifdef SHA2_UNROLL_TRANSFORM @@ -527,12 +563,16 @@ #endif /* SHA2_UNROLL_TRANSFORM */ -void SHA256_Update(SHA256_CTX* context, const sha2_byte *data, size_t len) { +int SHA224_Update(SHA256_CTX *context, const sha2_byte *data, size_t len) { + return SHA256_Update(context, data, len); +} + +int SHA256_Update(SHA256_CTX* context, const sha2_byte *data, size_t len) { unsigned int freespace, usedspace; if (len == 0) { /* Calling with no data is valid - we do nothing */ - return; + return 1; } /* Sanity check: */ @@ -557,7 +597,7 @@ context->bitcount += len << 3; /* Clean up: */ usedspace = freespace = 0; - return; + return 1; } } /* @@ -592,9 +632,11 @@ } /* Clean up: */ usedspace = freespace = 0; + + return 1; } -void SHA256_Final(sha2_byte digest[], SHA256_CTX* context) { +static int SHA224_256_Final(sha2_byte digest[], SHA256_CTX* context, size_t len) { sha2_word32 *d = (void *)digest; unsigned int usedspace; @@ -641,30 +683,42 @@ #if BYTE_ORDER == LITTLE_ENDIAN { /* Convert TO host byte order */ - int j; - for (j = 0; j < 8; j++) { + size_t j; + for (j = 0; j < len / 4; j++) { REVERSE32(context->state[j],context->state[j]); *d++ = context->state[j]; } } #else - memcpy(d, context->state, SHA256_DIGEST_LENGTH); + memcpy(d, context->state, len / 4); #endif } /* Clean up state data: */ memset(context, 0, sizeof(*context)); usedspace = 0; + + return 1; +} + +int SHA224_Final(sha2_byte digest[], SHA256_CTX* context) { + return SHA224_256_Final(digest, context, SHA224_DIGEST_LENGTH); +} + +int SHA256_Final(sha2_byte digest[], SHA256_CTX* context) { + return SHA224_256_Final(digest, context, SHA256_DIGEST_LENGTH); } /*** SHA-512: *********************************************************/ -void SHA512_Init(SHA512_CTX* context) { +int SHA512_Init(SHA512_CTX* context) { if (context == (SHA512_CTX*)0) { - return; + return 1; } memcpy(context->state, sha512_initial_hash_value, (size_t)(SHA512_DIGEST_LENGTH)); memset(context->buffer, 0, (size_t)(SHA512_BLOCK_LENGTH)); context->bitcount[0] = context->bitcount[1] = 0; + + return 1; } #ifdef SHA2_UNROLL_TRANSFORM @@ -836,12 +890,12 @@ #endif /* SHA2_UNROLL_TRANSFORM */ -void SHA512_Update(SHA512_CTX* context, const sha2_byte *data, size_t len) { +int SHA512_Update(SHA512_CTX* context, const sha2_byte *data, size_t len) { unsigned int freespace, usedspace; if (len == 0) { /* Calling with no data is valid - we do nothing */ - return; + return 1; } /* Sanity check: */ @@ -865,7 +919,7 @@ ADDINC128(context->bitcount, len << 3); /* Clean up: */ usedspace = freespace = 0; - return; + return 1; } } /* @@ -900,6 +954,8 @@ } /* Clean up: */ usedspace = freespace = 0; + + return 1; } static void SHA512_Last(SHA512_CTX* context) { @@ -943,7 +999,7 @@ SHA512_Transform(context, (sha2_word64*)(void *)context->buffer); } -void SHA512_Final(sha2_byte digest[], SHA512_CTX* context) { +int SHA512_Final(sha2_byte digest[], SHA512_CTX* context) { sha2_word64 *d = (void *)digest; /* Sanity check: */ @@ -970,27 +1026,31 @@ /* Zero out state data */ memset(context, 0, sizeof(*context)); + + return 1; } /*** SHA-384: *********************************************************/ -void SHA384_Init(SHA384_CTX* context) { +int SHA384_Init(SHA384_CTX* context) { if (context == (SHA384_CTX*)0) { - return; + return 1; } memcpy(context->state, sha384_initial_hash_value, (size_t)(SHA512_DIGEST_LENGTH)); memset(context->buffer, 0, (size_t)(SHA384_BLOCK_LENGTH)); context->bitcount[0] = context->bitcount[1] = 0; + + return 1; } -void SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) { - SHA512_Update((SHA512_CTX*)context, data, len); +int SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) { + return SHA512_Update((SHA512_CTX*)context, data, len); } void SHA384_Transform(SHA512_CTX* context, const sha2_word64* data) { SHA512_Transform((SHA512_CTX*)context, data); } -void SHA384_Final(sha2_byte digest[], SHA384_CTX* context) { +int SHA384_Final(sha2_byte digest[], SHA384_CTX* context) { sha2_word64 *d = (void *)digest; /* Sanity check: */ @@ -1017,4 +1077,6 @@ /* Zero out state data */ memset(context, 0, sizeof(*context)); + + return 1; } Index: src/distrib/sets/lists/base/md.amd64 diff -u src/distrib/sets/lists/base/md.amd64:1.50 src/distrib/sets/lists/base/md.amd64:1.51 --- src/distrib/sets/lists/base/md.amd64:1.50 Wed May 20 16:22:22 2009 +++ src/distrib/sets/lists/base/md.amd64 Tue May 26 08:04:11 2009 @@ -1,4 +1,4 @@ -# $NetBSD: md.amd64,v 1.50 2009/05/20 16:22:22 christos Exp $ +# $NetBSD: md.amd64,v 1.51 2009/05/26 08:04:11 joerg Exp $ ./dev/lms0 base-obsolete obsolete ./dev/mms0 base-obsolete obsolete ./libexec/ld.elf_so-i386 base-sys-shlib compat,pic @@ -64,13 +64,13 @@ ./usr/lib/i386/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/i386/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/i386/libc.so.12 base-compat-shlib compat,pic -./usr/lib/i386/libc.so.12.167 base-compat-shlib compat,pic +./usr/lib/i386/libc.so.12.168 base-compat-shlib compat,pic ./usr/lib/i386/libcom_err.so.6 base-compat-shlib compat,pic,kerberos ./usr/lib/i386/libcom_err.so.6.0 base-compat-shlib compat,pic,kerberos ./usr/lib/i386/libcrypt.so.1 base-compat-shlib compat,pic ./usr/lib/i386/libcrypt.so.1.0 base-compat-shlib compat,pic ./usr/lib/i386/libcrypto.so.5 base-compat-shlib compat,pic -./usr/lib/i386/libcrypto.so.5.0 base-compat-shlib compat,pic +./usr/lib/i386/libcrypto.so.5.1 base-compat-shlib compat,pic ./usr/lib/i386/libcurses.so.7 base-compat-shlib compat,pic ./usr/lib/i386/libcurses.so.7.0 base-compat-shlib compat,pic ./usr/lib/i386/libdes.so.8 base-compat-shlib compat,pic Index: src/distrib/sets/lists/base/md.sparc64 diff -u src/distrib/sets/lists/base/md.sparc64:1.45 src/distrib/sets/lists/base/md.sparc64:1.46 --- src/distrib/sets/lists/base/md.sparc64:1.45 Wed May 20 16:22:22 2009 +++ src/distrib/sets/lists/base/md.sparc64 Tue May 26 08:04:11 2009 @@ -1,4 +1,4 @@ -# $NetBSD: md.sparc64,v 1.45 2009/05/20 16:22:22 christos Exp $ +# $NetBSD: md.sparc64,v 1.46 2009/05/26 08:04:11 joerg Exp $ ./libexec/ld.elf_so-sparc base-sysutil-bin compat,pic ./sbin/edlabel base-sysutil-root ./usr/bin/fdformat base-util-bin @@ -63,13 +63,13 @@ ./usr/lib/sparc/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/sparc/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/sparc/libc.so.12 base-compat-shlib compat,pic -./usr/lib/sparc/libc.so.12.167 base-compat-shlib compat,pic +./usr/lib/sparc/libc.so.12.168 base-compat-shlib compat,pic ./usr/lib/sparc/libcom_err.so.6 base-compat-shlib compat,pic ./usr/lib/sparc/libcom_err.so.6.0 base-compat-shlib compat,pic ./usr/lib/sparc/libcrypt.so.1 base-compat-shlib compat,pic ./usr/lib/sparc/libcrypt.so.1.0 base-compat-shlib compat,pic ./usr/lib/sparc/libcrypto.so.5 base-compat-shlib compat,pic -./usr/lib/sparc/libcrypto.so.5.0 base-compat-shlib compat,pic +./usr/lib/sparc/libcrypto.so.5.1 base-compat-shlib compat,pic ./usr/lib/sparc/libcurses.so.7 base-compat-shlib compat,pic ./usr/lib/sparc/libcurses.so.7.0 base-compat-shlib compat,pic ./usr/lib/sparc/libdes.so.8 base-compat-shlib compat,pic Index: src/distrib/sets/lists/base/shl.mi diff -u src/distrib/sets/lists/base/shl.mi:1.473 src/distrib/sets/lists/base/shl.mi:1.474 --- src/distrib/sets/lists/base/shl.mi:1.473 Wed May 13 02:50:31 2009 +++ src/distrib/sets/lists/base/shl.mi Tue May 26 08:04:11 2009 @@ -1,4 +1,4 @@ -# $NetBSD: shl.mi,v 1.473 2009/05/13 02:50:31 pgoyette Exp $ +# $NetBSD: shl.mi,v 1.474 2009/05/26 08:04:11 joerg Exp $ # # Note: Don't delete entries from here - mark them as "obsolete" instead, # unless otherwise stated below. @@ -13,9 +13,9 @@ # # Note: libtermcap and libtermlib are hardlinked and share the same version. # -./lib/libc.so.12.167 base-sys-shlib dynamicroot +./lib/libc.so.12.168 base-sys-shlib dynamicroot ./lib/libcrypt.so.1.0 base-sys-shlib dynamicroot -./lib/libcrypto.so.5.0 base-crypto-shlib crypto,dynamicroot +./lib/libcrypto.so.5.1 base-crypto-shlib crypto,dynamicroot ./lib/libdevmapper.so.1.0 base-lvm-shlib lvm,dynamicroot ./lib/libedit.so.3.0 base-sys-shlib dynamicroot ./lib/libevent.so.3.0 base-sys-shlib dynamicroot @@ -60,10 +60,10 @@ ./usr/lib/libbluetooth.so.4.1 base-sys-shlib ./usr/lib/libbsdmalloc.so.0.0 base-sys-shlib ./usr/lib/libbz2.so.1.1 base-sys-shlib -./usr/lib/libc.so.12.167 base-sys-shlib +./usr/lib/libc.so.12.168 base-sys-shlib ./usr/lib/libcom_err.so.6.0 base-krb5-shlib kerberos ./usr/lib/libcrypt.so.1.0 base-sys-shlib -./usr/lib/libcrypto.so.5.0 base-crypto-shlib crypto +./usr/lib/libcrypto.so.5.1 base-crypto-shlib crypto ./usr/lib/libcurses.so.7.0 base-sys-shlib ./usr/lib/libdes.so.8.0 base-crypto-shlib crypto ./usr/lib/libdevmapper.so.1.0 base-lvm-shlib lvm Index: src/distrib/sets/lists/comp/mi diff -u src/distrib/sets/lists/comp/mi:1.1262 src/distrib/sets/lists/comp/mi:1.1263 --- src/distrib/sets/lists/comp/mi:1.1262 Wed May 20 22:48:05 2009 +++ src/distrib/sets/lists/comp/mi Tue May 26 08:04:11 2009 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.1262 2009/05/20 22:48:05 dyoung Exp $ +# $NetBSD: mi,v 1.1263 2009/05/26 08:04:11 joerg Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -4354,6 +4354,14 @@ ./usr/share/man/cat3/SHA1Init.0 comp-c-catman .cat ./usr/share/man/cat3/SHA1Transform.0 comp-c-catman .cat ./usr/share/man/cat3/SHA1Update.0 comp-c-catman .cat +./usr/share/man/cat3/SHA224_Data.0 comp-c-catman .cat +./usr/share/man/cat3/SHA224_End.0 comp-c-catman .cat +./usr/share/man/cat3/SHA224_File.0 comp-c-catman .cat +./usr/share/man/cat3/SHA224_FileChunk.0 comp-c-catman .cat +./usr/share/man/cat3/SHA224_Final.0 comp-c-catman .cat +./usr/share/man/cat3/SHA224_Init.0 comp-c-catman .cat +./usr/share/man/cat3/SHA224_Transform.0 comp-c-catman .cat +./usr/share/man/cat3/SHA224_Update.0 comp-c-catman .cat ./usr/share/man/cat3/SHA256_Data.0 comp-c-catman .cat ./usr/share/man/cat3/SHA256_End.0 comp-c-catman .cat ./usr/share/man/cat3/SHA256_File.0 comp-c-catman .cat @@ -9859,6 +9867,14 @@ ./usr/share/man/html3/SHA1Init.html comp-c-htmlman html ./usr/share/man/html3/SHA1Transform.html comp-c-htmlman html ./usr/share/man/html3/SHA1Update.html comp-c-htmlman html +./usr/share/man/html3/SHA224_Data.html comp-c-htmlman html +./usr/share/man/html3/SHA224_End.html comp-c-htmlman html +./usr/share/man/html3/SHA224_File.html comp-c-htmlman html +./usr/share/man/html3/SHA224_FileChunk.html comp-c-htmlman html +./usr/share/man/html3/SHA224_Final.html comp-c-htmlman html +./usr/share/man/html3/SHA224_Init.html comp-c-htmlman html +./usr/share/man/html3/SHA224_Transform.html comp-c-htmlman html +./usr/share/man/html3/SHA224_Update.html comp-c-htmlman html ./usr/share/man/html3/SHA256_Data.html comp-c-htmlman html ./usr/share/man/html3/SHA256_End.html comp-c-htmlman html ./usr/share/man/html3/SHA256_File.html comp-c-htmlman html @@ -15164,6 +15180,14 @@ ./usr/share/man/man3/SHA1Init.3 comp-c-man .man ./usr/share/man/man3/SHA1Transform.3 comp-c-man .man ./usr/share/man/man3/SHA1Update.3 comp-c-man .man +./usr/share/man/man3/SHA224_Data.3 comp-c-man .man +./usr/share/man/man3/SHA224_End.3 comp-c-man .man +./usr/share/man/man3/SHA224_File.3 comp-c-man .man +./usr/share/man/man3/SHA224_FileChunk.3 comp-c-man .man +./usr/share/man/man3/SHA224_Final.3 comp-c-man .man +./usr/share/man/man3/SHA224_Init.3 comp-c-man .man +./usr/share/man/man3/SHA224_Transform.3 comp-c-man .man +./usr/share/man/man3/SHA224_Update.3 comp-c-man .man ./usr/share/man/man3/SHA256_Data.3 comp-c-man .man ./usr/share/man/man3/SHA256_End.3 comp-c-man .man ./usr/share/man/man3/SHA256_File.3 comp-c-man .man Index: src/lib/libc/shlib_version diff -u src/lib/libc/shlib_version:1.211 src/lib/libc/shlib_version:1.212 --- src/lib/libc/shlib_version:1.211 Fri May 1 17:27:01 2009 +++ src/lib/libc/shlib_version Tue May 26 08:04:11 2009 @@ -1,4 +1,4 @@ -# $NetBSD: shlib_version,v 1.211 2009/05/01 17:27:01 perry Exp $ +# $NetBSD: shlib_version,v 1.212 2009/05/26 08:04:11 joerg Exp $ # Remember to update distrib/sets/lists/base/shl.* when changing # # things we wish to do on next major version bump: @@ -35,4 +35,4 @@ # it's insufficient bitwidth to implement all ctype class. # see isblank's comment in ctype.h. major=12 -minor=167 +minor=168 Index: src/lib/libc/hash/sha2/Makefile.inc diff -u src/lib/libc/hash/sha2/Makefile.inc:1.3 src/lib/libc/hash/sha2/Makefile.inc:1.4 --- src/lib/libc/hash/sha2/Makefile.inc:1.3 Tue Aug 23 17:49:27 2005 +++ src/lib/libc/hash/sha2/Makefile.inc Tue May 26 08:04:11 2009 @@ -1,12 +1,15 @@ -# $NetBSD: Makefile.inc,v 1.3 2005/08/23 17:49:27 elad Exp $ +# $NetBSD: Makefile.inc,v 1.4 2009/05/26 08:04:11 joerg Exp $ # hash functions .PATH: ${.CURDIR}/hash/sha2 -SRCS+= sha2.c sha256hl.c sha384hl.c sha512hl.c +SRCS+= sha2.c sha224hl.c sha256hl.c sha384hl.c sha512hl.c MAN+= sha2.3 +MLINKS+=sha2.3 SHA224_Init.3 sha2.3 SHA224_Update.3 sha2.3 SHA224_Final.3 +MLINKS+=sha2.3 SHA224_End.3 sha2.3 SHA224_File.3 sha2.3 SHA224_Data.3 +MLINKS+=sha2.3 SHA224_Transform.3 sha2.3 SHA224_FileChunk.3 MLINKS+=sha2.3 SHA256_Init.3 sha2.3 SHA256_Update.3 sha2.3 SHA256_Final.3 MLINKS+=sha2.3 SHA256_End.3 sha2.3 SHA256_File.3 sha2.3 SHA256_Data.3 MLINKS+=sha2.3 SHA256_Transform.3 sha2.3 SHA256_FileChunk.3 Index: src/lib/libc/hash/sha2/sha2.3 diff -u src/lib/libc/hash/sha2/sha2.3:1.4 src/lib/libc/hash/sha2/sha2.3:1.5 --- src/lib/libc/hash/sha2/sha2.3:1.4 Mon Dec 26 19:40:15 2005 +++ src/lib/libc/hash/sha2/sha2.3 Tue May 26 08:04:12 2009 @@ -1,4 +1,4 @@ -.\" $NetBSD: sha2.3,v 1.4 2005/12/26 19:40:15 perry Exp $ +.\" $NetBSD: sha2.3,v 1.5 2009/05/26 08:04:12 joerg Exp $ .\" $OpenBSD: sha2.3,v 1.11 2004/06/22 01:57:29 jfb Exp $ .\" .\" Copyright (c) 2003, 2004 Todd C. Miller <todd.mil...@courtesan.com> @@ -21,7 +21,7 @@ .\" .\" See http://www.nist.gov/sha/ for the detailed standard .\" -.Dd April 24, 2003 +.Dd May 20, 2009 .Dt SHA2 3 .Os .Sh NAME @@ -39,6 +39,24 @@ .In sys/types.h .In sha2.h .Ft void +.Fn SHA224_Init "SHA224_CTX *context" +.Ft void +.Fn SHA224_Update "SHA224_CTX *context" "const uint8_t *data" "size_t len" +.Ft void +.Fn SHA224_Pad "SHA224_CTX *context" +.Ft void +.Fn SHA224_Final "uint8_t digest[SHA224_DIGEST_LENGTH]" "SHA224_CTX *context" +.Ft void +.Fn SHA224_Transform "uint32_t state[8]" "const uint8_t buffer[SHA224_BLOCK_LENGTH]" +.Ft "char *" +.Fn SHA224_End "SHA224_CTX *context" "char *buf" +.Ft "char *" +.Fn SHA224_File "const char *filename" "char *buf" +.Ft "char *" +.Fn SHA224_FileChunk "const char *filename" "char *buf" "off_t offset" "off_t length" +.Ft "char *" +.Fn SHA224_Data "uint8_t *data" "size_t len" "char *buf" +.Ft void .Fn SHA256_Init "SHA256_CTX *context" .Ft void .Fn SHA256_Update "SHA256_CTX *context" "const uint8_t *data" "size_t len" @@ -97,9 +115,9 @@ FIPS PUB 180-2. The SHA2 functions are used to generate a condensed representation of a message called a message digest, suitable for use as a digital signature. -There are three families of functions, with names corresponding to +There are four families of functions, with names corresponding to the number of bits in the resulting message digest. -The SHA-256 functions are limited to processing a message of less +The SHA-224 and SHA-256 functions are limited to processing a message of less than 2^64 bits as input. The SHA-384 and SHA-512 functions can process a message of at most 2^128 - 1 bits as input. @@ -107,7 +125,7 @@ The SHA2 functions are considered to be more secure than the .Xr sha1 3 functions with which they share a similar interface. -The 256, 384, and 512-bit versions of SHA2 share the same interface. +The 224, 256, 384, and 512-bit versions of SHA2 share the same interface. For brevity, only the 256-bit variants are described below. .Pp The @@ -205,6 +223,7 @@ .Ar buf parameter should either be a string large enough to hold the resulting digest (e.g., +.Ev SHA224_DIGEST_STRING_LENGTH , .Ev SHA256_DIGEST_STRING_LENGTH , .Ev SHA384_DIGEST_STRING_LENGTH , or Index: src/lib/libc/include/namespace.h diff -u src/lib/libc/include/namespace.h:1.137 src/lib/libc/include/namespace.h:1.138 --- src/lib/libc/include/namespace.h:1.137 Sun Jan 11 02:46:28 2009 +++ src/lib/libc/include/namespace.h Tue May 26 08:04:12 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: namespace.h,v 1.137 2009/01/11 02:46:28 christos Exp $ */ +/* $NetBSD: namespace.h,v 1.138 2009/05/26 08:04:12 joerg Exp $ */ /*- * Copyright (c) 1997-2004 The NetBSD Foundation, Inc. @@ -117,6 +117,14 @@ #define SHA1Init _SHA1Init #define SHA1Transform _SHA1Transform #define SHA1Update _SHA1Update +#define SHA224_Data _SHA224_Data +#define SHA224_End _SHA224_End +#define SHA224_FileChunk _SHA224_FileChunk +#define SHA224_File _SHA224_File +#define SHA224_Final _SHA224_Final +#define SHA224_Init _SHA224_Init +#define SHA224_Transform _SHA224_Transform +#define SHA224_Update _SHA224_Update #define SHA256_Data _SHA256_Data #define SHA256_End _SHA256_End #define SHA256_FileChunk _SHA256_FileChunk Index: src/lib/libcrypto/sha.inc diff -u src/lib/libcrypto/sha.inc:1.9 src/lib/libcrypto/sha.inc:1.10 --- src/lib/libcrypto/sha.inc:1.9 Sun Dec 9 22:44:21 2007 +++ src/lib/libcrypto/sha.inc Tue May 26 08:04:12 2009 @@ -1,4 +1,4 @@ -# $NetBSD: sha.inc,v 1.9 2007/12/09 22:44:21 adrianp Exp $ +# $NetBSD: sha.inc,v 1.10 2009/05/26 08:04:12 joerg Exp $ # # @(#) Copyright (c) 1995 Simon J. Gerraty # @@ -8,7 +8,11 @@ .PATH: ${OPENSSLSRC}/crypto/sha -SHA_SRCS = sha_dgst.c sha1dgst.c sha_one.c sha1_one.c sha256.c sha512.c +SHA_SRCS = sha_dgst.c sha1dgst.c sha_one.c sha1_one.c + +# Replaced OpenSSL version to avoid overlap with libc +SHA_SRCS+= libc-sha512.c libc-sha256.c + SRCS += ${SHA_SRCS} .for cryptosrc in ${SHA_SRCS} Index: src/lib/libcrypto/shlib_version diff -u src/lib/libcrypto/shlib_version:1.15 src/lib/libcrypto/shlib_version:1.16 --- src/lib/libcrypto/shlib_version:1.15 Sun Jan 11 03:07:47 2009 +++ src/lib/libcrypto/shlib_version Tue May 26 08:04:12 2009 @@ -1,5 +1,7 @@ -# $NetBSD: shlib_version,v 1.15 2009/01/11 03:07:47 christos Exp $ +# $NetBSD: shlib_version,v 1.16 2009/05/26 08:04:12 joerg Exp $ # Remember to update distrib/sets/lists/base/shl.* when changing # +# Things to do on the next major bump: +# - Make openssl/sha.h and sha2.h compatible. major=5 -minor=0 +minor=1 Index: src/sys/sys/sha2.h diff -u src/sys/sys/sha2.h:1.2 src/sys/sys/sha2.h:1.3 --- src/sys/sys/sha2.h:1.2 Sat Feb 16 17:37:13 2008 +++ src/sys/sys/sha2.h Tue May 26 08:04:12 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: sha2.h,v 1.2 2008/02/16 17:37:13 apb Exp $ */ +/* $NetBSD: sha2.h,v 1.3 2009/05/26 08:04:12 joerg Exp $ */ /* $KAME: sha2.h,v 1.4 2003/07/20 00:28:38 itojun Exp $ */ /* @@ -42,7 +42,10 @@ #include <sys/types.h> #include <sys/cdefs.h> -/*** SHA-256/384/512 Various Length Definitions ***********************/ +/*** SHA-224/256/384/512 Various Length Definitions ***********************/ +#define SHA224_BLOCK_LENGTH 64 +#define SHA224_DIGEST_LENGTH 28 +#define SHA224_DIGEST_STRING_LENGTH (SHA224_DIGEST_LENGTH * 2 + 1) #define SHA256_BLOCK_LENGTH 64 #define SHA256_DIGEST_LENGTH 32 #define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1) @@ -60,20 +63,32 @@ uint64_t bitcount; uint8_t buffer[SHA256_BLOCK_LENGTH]; } SHA256_CTX; + typedef struct _SHA512_CTX { uint64_t state[8]; uint64_t bitcount[2]; uint8_t buffer[SHA512_BLOCK_LENGTH]; } SHA512_CTX; +typedef SHA256_CTX SHA224_CTX; typedef SHA512_CTX SHA384_CTX; /*** SHA-256/384/512 Function Prototypes ******************************/ __BEGIN_DECLS -void SHA256_Init(SHA256_CTX *); -void SHA256_Update(SHA256_CTX*, const uint8_t*, size_t); -void SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*); +int SHA224_Init(SHA224_CTX *); +int SHA224_Update(SHA224_CTX*, const uint8_t*, size_t); +int SHA224_Final(uint8_t[SHA224_DIGEST_LENGTH], SHA224_CTX*); +#ifndef _KERNEL +char *SHA224_End(SHA224_CTX *, char[SHA224_DIGEST_STRING_LENGTH]); +char *SHA224_FileChunk(const char *, char *, off_t, off_t); +char *SHA224_File(const char *, char *); +char *SHA224_Data(const uint8_t *, size_t, char[SHA224_DIGEST_STRING_LENGTH]); +#endif /* !_KERNEL */ + +int SHA256_Init(SHA256_CTX *); +int SHA256_Update(SHA256_CTX*, const uint8_t*, size_t); +int SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*); #ifndef _KERNEL char *SHA256_End(SHA256_CTX *, char[SHA256_DIGEST_STRING_LENGTH]); char *SHA256_FileChunk(const char *, char *, off_t, off_t); @@ -81,9 +96,9 @@ char *SHA256_Data(const uint8_t *, size_t, char[SHA256_DIGEST_STRING_LENGTH]); #endif /* !_KERNEL */ -void SHA384_Init(SHA384_CTX*); -void SHA384_Update(SHA384_CTX*, const uint8_t*, size_t); -void SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*); +int SHA384_Init(SHA384_CTX*); +int SHA384_Update(SHA384_CTX*, const uint8_t*, size_t); +int SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*); #ifndef _KERNEL char *SHA384_End(SHA384_CTX *, char[SHA384_DIGEST_STRING_LENGTH]); char *SHA384_FileChunk(const char *, char *, off_t, off_t); @@ -91,9 +106,9 @@ char *SHA384_Data(const uint8_t *, size_t, char[SHA384_DIGEST_STRING_LENGTH]); #endif /* !_KERNEL */ -void SHA512_Init(SHA512_CTX*); -void SHA512_Update(SHA512_CTX*, const uint8_t*, size_t); -void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); +int SHA512_Init(SHA512_CTX*); +int SHA512_Update(SHA512_CTX*, const uint8_t*, size_t); +int SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); #ifndef _KERNEL char *SHA512_End(SHA512_CTX *, char[SHA512_DIGEST_STRING_LENGTH]); char *SHA512_FileChunk(const char *, char *, off_t, off_t); Added files: Index: src/lib/libc/hash/sha2/sha224hl.c diff -u /dev/null src/lib/libc/hash/sha2/sha224hl.c:1.1 --- /dev/null Tue May 26 08:04:12 2009 +++ src/lib/libc/hash/sha2/sha224hl.c Tue May 26 08:04:12 2009 @@ -0,0 +1,16 @@ +/* $NetBSD */ + +/* + * Derived from code written by Jason R. Thorpe <thor...@netbsd.org>, + * May 20, 2009. + * Public domain. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: sha224hl.c,v 1.1 2009/05/26 08:04:12 joerg Exp $"); + +#define HASH_ALGORITHM SHA224 +#define HASH_FNPREFIX SHA224_ +#define HASH_INCLUDE <sys/sha2.h> + +#include "../hashhl.c" Index: src/lib/libcrypto/libc-sha256.c diff -u /dev/null src/lib/libcrypto/libc-sha256.c:1.1 --- /dev/null Tue May 26 08:04:12 2009 +++ src/lib/libcrypto/libc-sha256.c Tue May 26 08:04:12 2009 @@ -0,0 +1,49 @@ +/* + * Special version of sha256.c that uses the libc SHA256 implementation + * of libc. + */ + +/* crypto/sha/sha256.c */ +/* ==================================================================== + * Copyright (c) 2004 The OpenSSL Project. All rights reserved + * according to the OpenSSL license [found in ../../LICENSE]. + * ==================================================================== + */ +#include <openssl/opensslconf.h> + +#include <stdlib.h> +#include <string.h> + +#include <openssl/crypto.h> +#include <openssl/sha.h> +#include <openssl/opensslv.h> + +#include "cryptlib.h" + +const char SHA256_version[]="SHA-256" OPENSSL_VERSION_PTEXT; + +unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md) + { + SHA256_CTX c; + static unsigned char m[SHA224_DIGEST_LENGTH]; + + if (md == NULL) md=m; + SHA224_Init(&c); + SHA224_Update(&c,d,n); + SHA224_Final(md,&c); + OPENSSL_cleanse(&c,sizeof(c)); + return(md); + } + +unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md) + { + SHA256_CTX c; + static unsigned char m[SHA256_DIGEST_LENGTH]; + + if (md == NULL) md=m; + SHA256_Init(&c); + SHA256_Update(&c,d,n); + SHA256_Final(md,&c); + OPENSSL_cleanse(&c,sizeof(c)); + return(md); + } Index: src/lib/libcrypto/libc-sha512.c diff -u /dev/null src/lib/libcrypto/libc-sha512.c:1.1 --- /dev/null Tue May 26 08:04:12 2009 +++ src/lib/libcrypto/libc-sha512.c Tue May 26 08:04:12 2009 @@ -0,0 +1,49 @@ +/* + * Special version of sha512.c that uses the libc SHA512 implementation + * of libc. + */ + +/* crypto/sha/sha512.c */ +/* ==================================================================== + * Copyright (c) 2004 The OpenSSL Project. All rights reserved + * according to the OpenSSL license [found in ../../LICENSE]. + * ==================================================================== + */ +#include <openssl/opensslconf.h> + +#include <stdlib.h> +#include <string.h> + +#include <openssl/crypto.h> +#include <openssl/sha.h> +#include <openssl/opensslv.h> + +#include "cryptlib.h" + +const char SHA512_version[]="SHA-512" OPENSSL_VERSION_PTEXT; + +unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md) + { + SHA512_CTX c; + static unsigned char m[SHA384_DIGEST_LENGTH]; + + if (md == NULL) md=m; + SHA384_Init(&c); + SHA384_Update(&c,d,n); + SHA384_Final(md,&c); + OPENSSL_cleanse(&c,sizeof(c)); + return(md); + } + +unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md) + { + SHA512_CTX c; + static unsigned char m[SHA512_DIGEST_LENGTH]; + + if (md == NULL) md=m; + SHA512_Init(&c); + SHA512_Update(&c,d,n); + SHA512_Final(md,&c); + OPENSSL_cleanse(&c,sizeof(c)); + return(md); + }