Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src Pull in RIPEMD-160 functions from OpenBSD - this has the sam...



details:   https://anonhg.NetBSD.org/src/rev/0b99c962d93d
branches:  trunk
changeset: 494299:0b99c962d93d
user:      ad <ad%NetBSD.org@localhost>
date:      Wed Jul 05 11:44:01 2000 +0000

description:
Pull in RIPEMD-160 functions from OpenBSD - this has the same API as our MD4,
MD5 and SHA1 stuff.

diffstat:

 include/Makefile             |   10 +-
 include/rmd160.h             |   47 ++++
 lib/libc/hash/Makefile.inc   |   11 +-
 lib/libc/hash/rmd160.3       |  224 ++++++++++++++++++++++
 lib/libc/hash/rmd160.c       |  435 +++++++++++++++++++++++++++++++++++++++++++
 lib/libc/hash/rmd160hl.c     |   88 ++++++++
 lib/libc/include/namespace.h |    9 +-
 7 files changed, 815 insertions(+), 9 deletions(-)

diffs (truncated from 883 to 300 lines):

diff -r 9aaa450d73cb -r 0b99c962d93d include/Makefile
--- a/include/Makefile  Wed Jul 05 11:35:36 2000 +0000
+++ b/include/Makefile  Wed Jul 05 11:44:01 2000 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: Makefile,v 1.91 2000/06/20 06:00:32 thorpej Exp $
+#      $NetBSD: Makefile,v 1.92 2000/07/05 11:44:01 ad Exp $
 #      @(#)Makefile    8.2 (Berkeley) 1/4/94
 
 # Doing a make includes builds /usr/include
@@ -14,10 +14,10 @@
        memory.h mpool.h ndbm.h netconfig.h netdb.h netgroup.h nlist.h \
        nl_types.h \
        nsswitch.h paths.h pwd.h ranlib.h re_comp.h regex.h regexp.h \
-       resolv.h rmt.h search.h setjmp.h sgtty.h signal.h stab.h stddef.h \
-       stdio.h stdlib.h string.h strings.h stringlist.h struct.h sysexits.h \
-       tar.h time.h ttyent.h tzfile.h ulimit.h unistd.h util.h utime.h \
-       utmp.h vis.h wchar.h
+       resolv.h rmd160.h rmt.h search.h setjmp.h sgtty.h signal.h stab.h \
+       stddef.h stdio.h stdlib.h string.h strings.h stringlist.h struct.h \
+       sysexits.h tar.h time.h ttyent.h tzfile.h ulimit.h unistd.h util.h \
+       utime.h utmp.h vis.h wchar.h
 INCS+= arpa/ftp.h arpa/inet.h arpa/nameser.h arpa/telnet.h arpa/tftp.h
 INCS+= protocols/dumprestore.h protocols/routed.h protocols/rwhod.h \
        protocols/talkd.h protocols/timed.h
diff -r 9aaa450d73cb -r 0b99c962d93d include/rmd160.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/include/rmd160.h  Wed Jul 05 11:44:01 2000 +0000
@@ -0,0 +1,47 @@
+/*     $NetBSD: rmd160.h,v 1.1 2000/07/05 11:44:01 ad Exp $    */
+
+/********************************************************************\
+ *
+ *      FILE:     rmd160.h
+ *
+ *      CONTENTS: Header file for a sample C-implementation of the
+ *                RIPEMD-160 hash-function. 
+ *      TARGET:   any computer with an ANSI C compiler
+ *
+ *      AUTHOR:   Antoon Bosselaers, ESAT-COSIC
+ *      DATE:     1 March 1996
+ *      VERSION:  1.0
+ *
+ *      Copyright (c) Katholieke Universiteit Leuven
+ *      1996, All Rights Reserved
+ *
+\********************************************************************/
+
+/*
+ * from OpenBSD: rmd160.h,v 1.4 1999/08/16 09:59:04 millert Exp
+ */
+
+#ifndef _RMD160_H_
+#define _RMD160_H_
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+typedef struct {
+       u_int32_t       state[5];       /* state (ABCDE) */
+       u_int32_t       length[2];      /* number of bits */
+       u_char          bbuffer[64];    /* overflow buffer */
+       u_int32_t       buflen;         /* number of chars in bbuffer */
+} RMD160_CTX;
+
+__BEGIN_DECLS
+void   RMD160Init(RMD160_CTX *);
+void   RMD160Transform(u_int32_t[5], const u_int32_t[16]);
+void   RMD160Update(RMD160_CTX *, const u_char *, u_int32_t);
+void   RMD160Final(u_char[20], RMD160_CTX *);
+char   *RMD160End(RMD160_CTX *, char *);
+char   *RMD160File(char *, char *);
+char   *RMD160Data(const u_char *, size_t, char *);
+__END_DECLS
+
+#endif  /* !_RMD160_H_ */
diff -r 9aaa450d73cb -r 0b99c962d93d lib/libc/hash/Makefile.inc
--- a/lib/libc/hash/Makefile.inc        Wed Jul 05 11:35:36 2000 +0000
+++ b/lib/libc/hash/Makefile.inc        Wed Jul 05 11:44:01 2000 +0000
@@ -1,14 +1,19 @@
-#      $NetBSD: Makefile.inc,v 1.2 1999/02/24 15:05:20 drochner Exp $
+#      $NetBSD: Makefile.inc,v 1.3 2000/07/05 11:44:03 ad Exp $
 #      $OpenBSD: Makefile.inc,v 1.5 1997/07/17 06:02:42 millert Exp $
 
 # hash functions
 .PATH: ${ARCHDIR}/hash ${.CURDIR}/hash
 
-SRCS+= sha1.c sha1hl.c
+SRCS+= rmd160.c rmd160l.c sha1.c sha1hl.c
 
-MAN+=  sha1.3
+MAN+=  sha1.3 rmd160.3
 
 MLINKS+=sha1.3 SHA1Init.3    sha1.3 SHA1Update.3
 MLINKS+=sha1.3 SHA1Final.3   sha1.3 SHA1Transform.3
 MLINKS+=sha1.3 SHA1End.3     sha1.3 SHA1File.3
 MLINKS+=sha1.3 SHA1Data.3
+
+MLINKS+=rmd160.3 RMD160Init.3    rmd160.3 RMD160Update.3
+MLINKS+=rmd160.3 RMD160Final.3   rmd160.3 RMD160Transform.3
+MLINKS+=rmd160.3 RMD160End.3     rmd160.3 RMD160File.3
+MLINKS+=rmd160.3 RMD160Data.3
diff -r 9aaa450d73cb -r 0b99c962d93d lib/libc/hash/rmd160.3
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/libc/hash/rmd160.3    Wed Jul 05 11:44:01 2000 +0000
@@ -0,0 +1,224 @@
+.\"    $OpenBSD: rmd160.3,v 1.12 2000/04/18 03:01:29 aaron Exp $
+.\"
+.\" Copyright (c) 1997 Todd C. Miller <Todd.Miller%courtesan.com@localhost>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. The name of the author may not be used to endorse or promote products
+.\"    derived from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+.\" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
+.\" THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+.\" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+.\" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+.\" OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.\" See http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html
+.\"    for detailed information about RIPEMD-160.
+.\"
+.Dd July 16, 1997
+.Dt RMD160 3
+.Os
+.Sh NAME
+.Nm RMD160Init ,
+.Nm RMD160Update ,
+.Nm RMD160Final ,
+.Nm RMD160Transform ,
+.Nm RMD160End ,
+.Nm RMD160File ,
+.Nm RMD160Data
+.Nd calculate the ``RIPEMD-160'' message digest
+.Sh SYNOPSIS
+.Fd #include <sys/types.h>
+.Fd #include <rmd160.h>
+.Ft void
+.Fn RMD160Init "RMD160_CTX *context"
+.Ft void
+.Fn RMD160Update "RMD160_CTX *context" "const u_char *data" "u_int nbytes"
+.Ft void
+.Fn RMD160Final "u_char digest[20]" "RMD160_CTX *context"
+.Ft void
+.Fn RMD160Transform "u_int32_t state[5]" "const u_int32_t block[16]"
+.Ft "char *"
+.Fn RMD160End "RMD160_CTX *context" "char *buf"
+.Ft "char *"
+.Fn RMD160File "char *filename" "char *buf"
+.Ft "char *"
+.Fn RMD160Data "u_char *data" "u_int len" "char *buf"
+.Sh DESCRIPTION
+The RMD160 functions implement the 160-bit RIPE message digest hash algorithm
+(RMD-160).
+RMD-160 is used to generate a condensed representation
+of a message called a message digest.
+The algorithm takes a
+message less than 2^64 bits as input and produces a 160-bit digest
+suitable for use as a digital signature.
+.Pp
+The RMD160 functions are considered to be more secure than the
+.Xr md4 3
+and
+.Xr md5 3
+functions and at least as secure as the
+.Xr sha1 3
+function.
+All share a similar interface.
+.Pp
+The
+.Fn RMD160Init
+function initializes a RMD160_CTX
+.Ar context
+for use with
+.Fn RMD160Update ,
+and
+.Fn RMD160Final .
+The
+.Fn RMD160Update
+function adds
+.Ar data
+of length
+.Ar nbytes
+to the RMD160_CTX specified by
+.Ar context .
+.Fn RMD160Final
+is called when all data has been added via
+.Fn RMD160Update
+and stores a message digest in the
+.Ar digest
+parameter.
+When a null pointer is passed to
+.Fn RMD160Final
+as first argument only the final padding will be applied and the
+current context can still be used with
+.Fn RMD160Update .
+.Pp
+The
+.Fn RMD160Transform
+function is used by
+.Fn RMD160Update
+to hash 512-bit blocks and forms the core of the algorithm.
+Most programs should use the interface provided by
+.Fn RMD160Init ,
+.Fn RMD160Update
+and
+.Fn RMD160Final
+instead of calling
+.Fn RMD160Transform
+directly.
+.Pp
+The
+.Fn RMD160End
+function is a front end for
+.Fn RMD160Final
+which converts the digest into an
+.Tn ASCII
+representation of the 160 bit digest in hexadecimal.
+.Pp
+The
+.Fn RMD160File
+function calculates the digest for a file and returns the result via
+.Fn RMD160End .
+If
+.Fn RMD160File
+is unable to open the file a NULL pointer is returned.
+.Pp
+The
+.Fn RMD160Data
+function
+calculates the digest of an arbitrary string and returns the result via
+.Fn RMD160End .
+.Pp
+For each of the
+.Fn RMD160End ,
+.Fn RMD160File ,
+and
+.Fn RMD160Data
+functions the
+.Ar buf
+parameter should either be a string of at least 41 characters in
+size or a NULL pointer.
+In the latter case, space will be dynamically allocated via
+.Xr malloc 3
+and should be freed using
+.Xr free 3
+when it is no longer needed.
+.Sh EXAMPLES
+The follow code fragment will calculate the digest for
+the string "abc" which is ``0x8eb208f7e05d987a9b044a8e98c6b087f15a0bfc''.
+.Bd -literal -offset indent
+RMD160_CTX rmd;
+u_char results[20];
+char *buf;
+int n;
+
+buf = "abc";
+n = strlen(buf);
+RMD160Init(&rmd);
+RMD160Update(&rmd, (u_char *)buf, n);
+RMD160Final(results, &rmd);
+
+/* Print the digest as one long hex value */
+printf("0x");
+for (n = 0; n < 20; n++)
+       printf("%02x", results[n]);
+putchar('\\n');
+.Ed
+.Pp
+Alternately, the helper functions could be used in the following way:
+.Bd -literal -offset indent
+RMD160_CTX rmd;
+u_char output[41];
+char *buf = "abc";
+
+printf("0x%s\en", RMD160Data(buf, strlen(buf), output));
+.Ed
+.Sh CAVEATS
+If a message digest is to be copied to a multi-byte type (ie:
+an array of five 32-bit integers) it will be necessary to
+perform byte swapping on little endian machines such as the i386, alpha,
+and vax.
+.Sh AUTHOR
+This implementation of RMD-160 was written by Antoon Bosselaers.
+.Pp
+The
+.Fn RMD160End ,



Home | Main Index | Thread Index | Old Index