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