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);
+	}

Reply via email to