summaryrefslogtreecommitdiff
path: root/lib/libc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/hash/Makefile.inc23
-rw-r--r--lib/libc/hash/helper.c (renamed from lib/libc/hash/rmd160hl.c)41
-rw-r--r--lib/libc/hash/rmd160.322
-rw-r--r--lib/libc/hash/rmd160.c26
-rw-r--r--lib/libc/hash/sha1.322
-rw-r--r--lib/libc/hash/sha1.c14
-rw-r--r--lib/libc/hash/sha1hl.c74
-rw-r--r--lib/libc/hash/sha2hl.c177
8 files changed, 85 insertions, 314 deletions
diff --git a/lib/libc/hash/Makefile.inc b/lib/libc/hash/Makefile.inc
index 21500da4ca4..6d9df011903 100644
--- a/lib/libc/hash/Makefile.inc
+++ b/lib/libc/hash/Makefile.inc
@@ -1,9 +1,10 @@
-# $OpenBSD: Makefile.inc,v 1.14 2003/05/08 23:34:55 millert Exp $
+# $OpenBSD: Makefile.inc,v 1.15 2004/04/26 19:38:12 millert Exp $
# hash functions
.PATH: ${LIBCSRCDIR}/hash
-SRCS+= rmd160.c rmd160hl.c sha1.c sha1hl.c sha2.c sha2hl.c
+HELPER= rmd160hl.c sha1hl.c sha256hl.c sha384hl.c sha512hl.c
+SRCS+= rmd160.c sha1.c sha2.c ${HELPER}
MAN+= rmd160.3 sha1.3 sha2.3
MLINKS+=rmd160.3 RMD160Init.3 rmd160.3 RMD160Update.3 rmd160.3 RMD160Final.3
MLINKS+=rmd160.3 RMD160End.3 rmd160.3 RMD160File.3 rmd160.3 RMD160Data.3
@@ -17,3 +18,21 @@ MLINKS+=sha2.3 SHA384_Init.3 sha2.3 SHA384_Update.3 sha2.3 SHA384_Final.3
MLINKS+=sha2.3 SHA384_End.3 sha2.3 SHA384_File.3 sha2.3 SHA384_Data.3
MLINKS+=sha2.3 SHA512_Init.3 sha2.3 SHA512_Update.3 sha2.3 SHA512_Final.3
MLINKS+=sha2.3 SHA512_End.3 sha2.3 SHA512_File.3 sha2.3 SHA512_Data.3
+CLEANFILES+= ${HELPER}
+
+rmd160hl.c: helper.c
+ sed -e 's/hashinc/rmd160.h/g' -e 's/HASH/RMD160/g' $> > $@
+
+sha1hl.c: helper.c
+ sed -e 's/hashinc/sha1.h/g' -e 's/HASH/SHA1/g' $> > $@
+
+sha256hl.c: helper.c
+ sed -e 's/hashinc/sha2.h/g' -e 's/HASH_\{0,1\}/SHA256_/g' $> > $@
+
+sha384hl.c: helper.c
+ sed -e 's/hashinc/sha2.h/g' -e 's/HASH_\{0,1\}/SHA384_/g' $> > $@
+
+sha512hl.c: helper.c
+ sed -e 's/hashinc/sha2.h/g' -e 's/HASH_\{0,1\}/SHA512_/g' $> > $@
+
+beforedepend: rmd160hl.c sha1hl.c sha256hl.c sha384hl.c sha512hl.c
diff --git a/lib/libc/hash/rmd160hl.c b/lib/libc/hash/helper.c
index 043eff87eb1..f7dd752dcf1 100644
--- a/lib/libc/hash/rmd160hl.c
+++ b/lib/libc/hash/helper.c
@@ -1,4 +1,6 @@
-/* rmd160hl.c
+/* $OpenBSD: helper.c,v 1.1 2004/04/26 19:38:12 millert Exp $ */
+
+/*
* ----------------------------------------------------------------------------
* "THE BEER-WARE LICENSE" (Revision 42):
* <phk@login.dkuug.dk> wrote this file. As long as you retain this notice you
@@ -8,32 +10,33 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static char rcsid[] = "$OpenBSD: rmd160hl.c,v 1.5 2003/05/09 16:46:31 millert Exp $";
+static const char rcsid[] = "$OpenBSD: helper.c,v 1.1 2004/04/26 19:38:12 millert Exp $";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <errno.h>
#include <fcntl.h>
-#include <rmd160.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
+#include <hashinc>
+
/* ARGSUSED */
char *
-RMD160End(RMD160_CTX *ctx, char *buf)
+HASHEnd(HASH_CTX *ctx, char buf[HASH_DIGEST_STRING_LENGTH])
{
int i;
- u_char digest[20];
- static const char hex[]="0123456789abcdef";
+ u_char digest[HASH_DIGEST_LENGTH];
+ static const char hex[] = "0123456789abcdef";
- if (buf == NULL && (buf = malloc(41)) == NULL)
+ if (buf == NULL && (buf = malloc(HASH_DIGEST_STRING_LENGTH)) == NULL)
return(NULL);
- RMD160Final(digest, ctx);
- for (i = 0; i < 20; i++) {
+ HASHFinal(digest,ctx);
+ for (i = 0; i < HASH_DIGEST_LENGTH; i++) {
buf[i + i] = hex[digest[i] >> 4];
buf[i + i + 1] = hex[digest[i] & 0x0f];
}
@@ -43,32 +46,32 @@ RMD160End(RMD160_CTX *ctx, char *buf)
}
char *
-RMD160File (char *filename, char *buf)
+HASHFile(char *filename, char buf[HASH_DIGEST_STRING_LENGTH])
{
u_char buffer[BUFSIZ];
- RMD160_CTX ctx;
+ HASH_CTX ctx;
int fd, num, oerrno;
- RMD160Init(&ctx);
+ HASHInit(&ctx);
if ((fd = open(filename, O_RDONLY)) < 0)
return(0);
while ((num = read(fd, buffer, sizeof(buffer))) > 0)
- RMD160Update(&ctx, buffer, num);
+ HASHUpdate(&ctx, buffer, num);
oerrno = errno;
close(fd);
errno = oerrno;
- return(num < 0 ? 0 : RMD160End(&ctx, buf));
+ return(num < 0 ? 0 : HASHEnd(&ctx, buf));
}
char *
-RMD160Data (const u_char *data, size_t len, char *buf)
+HASHData(const u_char *data, size_t len, char buf[HASH_DIGEST_STRING_LENGTH])
{
- RMD160_CTX ctx;
+ HASH_CTX ctx;
- RMD160Init(&ctx);
- RMD160Update(&ctx, data, len);
- return(RMD160End(&ctx, buf));
+ HASHInit(&ctx);
+ HASHUpdate(&ctx, data, len);
+ return(HASHEnd(&ctx, buf));
}
diff --git a/lib/libc/hash/rmd160.3 b/lib/libc/hash/rmd160.3
index 65b84a1f61c..8e8eecef269 100644
--- a/lib/libc/hash/rmd160.3
+++ b/lib/libc/hash/rmd160.3
@@ -1,4 +1,4 @@
-.\" $OpenBSD: rmd160.3,v 1.20 2003/06/25 19:33:34 deraadt Exp $
+.\" $OpenBSD: rmd160.3,v 1.21 2004/04/26 19:38:12 millert Exp $
.\"
.\" Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
.\"
@@ -35,17 +35,17 @@
.Ft void
.Fn RMD160Init "RMD160_CTX *context"
.Ft void
-.Fn RMD160Update "RMD160_CTX *context" "const u_char *data" "u_int32_t nbytes"
+.Fn RMD160Update "RMD160_CTX *context" "const u_int8_t *data" "u_int32_t nbytes"
.Ft void
-.Fn RMD160Final "u_char digest[20]" "RMD160_CTX *context"
+.Fn RMD160Final "u_int8_t digest[RMD160_DIGEST_LENGTH]" "RMD160_CTX *context"
.Ft void
-.Fn RMD160Transform "u_int32_t state[5]" "const u_char block[64]"
+.Fn RMD160Transform "u_int32_t state[5]" "const u_int8_t block[RMD160_BLOCK_LENGTH]"
.Ft "char *"
-.Fn RMD160End "RMD160_CTX *context" "char *buf"
+.Fn RMD160End "RMD160_CTX *context" "char buf[RMD160_DIGEST_STRING_LENGTH]"
.Ft "char *"
-.Fn RMD160File "char *filename" "char *buf"
+.Fn RMD160File "char *filename" "char buf[RMD160_DIGEST_STRING_LENGTH]"
.Ft "char *"
-.Fn RMD160Data "const u_char *data" "size_t len" "char *buf"
+.Fn RMD160Data "const u_int8_t *data" "size_t len" "char buf[RMD160_DIGEST_STRING_LENGTH]"
.Sh DESCRIPTION
The RMD160 functions implement the 160-bit RIPE message digest hash algorithm
(RMD-160).
@@ -147,19 +147,19 @@ 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];
+u_int8_t results[RMD160_DIGEST_LENGTH];
char *buf;
int n;
buf = "abc";
n = strlen(buf);
RMD160Init(&rmd);
-RMD160Update(&rmd, (u_char *)buf, n);
+RMD160Update(&rmd, (u_int8_t *)buf, n);
RMD160Final(results, &rmd);
/* Print the digest as one long hex value */
printf("0x");
-for (n = 0; n < 20; n++)
+for (n = 0; n < RMD160_DIGEST_LENGTH; n++)
printf("%02x", results[n]);
putchar('\en');
.Ed
@@ -167,7 +167,7 @@ putchar('\en');
Alternately, the helper functions could be used in the following way:
.Bd -literal -offset indent
RMD160_CTX rmd;
-u_char output[41];
+u_int8_t output[RMD160_DIGEST_STRING_LENGTH];
char *buf = "abc";
printf("0x%s\en", RMD160Data(buf, strlen(buf), output));
diff --git a/lib/libc/hash/rmd160.c b/lib/libc/hash/rmd160.c
index f1d6cf72fab..e38843dead5 100644
--- a/lib/libc/hash/rmd160.c
+++ b/lib/libc/hash/rmd160.c
@@ -32,7 +32,7 @@
#include <rmd160.h>
#if defined(LIBC_SCCS) && !defined(lint)
-static char rcsid[] = "$OpenBSD: rmd160.c,v 1.13 2003/12/14 11:22:35 markus Exp $";
+static char rcsid[] = "$OpenBSD: rmd160.c,v 1.14 2004/04/26 19:38:12 millert Exp $";
#endif /* LIBC_SCCS and not lint */
#define PUT_64BIT_LE(cp, value) do { \
@@ -86,7 +86,7 @@ static char rcsid[] = "$OpenBSD: rmd160.c,v 1.13 2003/12/14 11:22:35 markus Exp
#define X(i) x[i]
-static u_char PADDING[64] = {
+static u_char PADDING[RMD160_BLOCK_LENGTH] = {
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
@@ -108,8 +108,8 @@ RMD160Update(RMD160_CTX *ctx, const u_char *input, u_int32_t len)
{
u_int32_t have, off, need;
- have = (ctx->count/8) % 64;
- need = 64 - have;
+ have = (ctx->count / 8) % RMD160_BLOCK_LENGTH;
+ need = RMD160_BLOCK_LENGTH - have;
ctx->count += 8 * len;
off = 0;
@@ -121,9 +121,9 @@ RMD160Update(RMD160_CTX *ctx, const u_char *input, u_int32_t len)
have = 0;
}
/* now the buffer is empty */
- while (off + 64 <= len) {
+ while (off + RMD160_BLOCK_LENGTH <= len) {
RMD160Transform(ctx->state, input+off);
- off += 64;
+ off += RMD160_BLOCK_LENGTH;
}
}
if (off < len)
@@ -131,7 +131,7 @@ RMD160Update(RMD160_CTX *ctx, const u_char *input, u_int32_t len)
}
void
-RMD160Final(u_char digest[20], RMD160_CTX *ctx)
+RMD160Final(u_char digest[RMD160_DIGEST_LENGTH], RMD160_CTX *ctx)
{
int i;
u_char size[8];
@@ -140,12 +140,12 @@ RMD160Final(u_char digest[20], RMD160_CTX *ctx)
PUT_64BIT_LE(size, ctx->count);
/*
- * pad to 64 byte blocks, at least one byte from PADDING plus 8 bytes
- * for the size
+ * pad to RMD160_BLOCK_LENGTH byte blocks, at least one byte from
+ * PADDING plus 8 bytes for the size
*/
- padlen = 64 - ((ctx->count/8) % 64);
+ padlen = RMD160_BLOCK_LENGTH - ((ctx->count / 8) % RMD160_BLOCK_LENGTH);
if (padlen < 1 + 8)
- padlen += 64;
+ padlen += RMD160_BLOCK_LENGTH;
RMD160Update(ctx, PADDING, padlen - 8); /* padlen - 8 <= 64 */
RMD160Update(ctx, size, 8);
@@ -157,12 +157,12 @@ RMD160Final(u_char digest[20], RMD160_CTX *ctx)
}
void
-RMD160Transform(u_int32_t state[5], const u_char block[64])
+RMD160Transform(u_int32_t state[5], const u_char block[RMD160_BLOCK_LENGTH])
{
u_int32_t a, b, c, d, e, aa, bb, cc, dd, ee, t, x[16];
#if BYTE_ORDER == LITTLE_ENDIAN
- memcpy(x, block, 64);
+ memcpy(x, block, RMD160_BLOCK_LENGTH);
#else
int i;
diff --git a/lib/libc/hash/sha1.3 b/lib/libc/hash/sha1.3
index 4d753ca7966..9b5b001d238 100644
--- a/lib/libc/hash/sha1.3
+++ b/lib/libc/hash/sha1.3
@@ -1,4 +1,4 @@
-.\" $OpenBSD: sha1.3,v 1.26 2003/06/25 19:33:34 deraadt Exp $
+.\" $OpenBSD: sha1.3,v 1.27 2004/04/26 19:38:12 millert Exp $
.\"
.\" Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
.\"
@@ -35,17 +35,17 @@
.Ft void
.Fn SHA1Init "SHA1_CTX *context"
.Ft void
-.Fn SHA1Update "SHA1_CTX *context" "const u_char *data" "u_int len"
+.Fn SHA1Update "SHA1_CTX *context" "const u_int8_t *data" "u_int len"
.Ft void
-.Fn SHA1Final "u_char digest[20]" "SHA1_CTX *context"
+.Fn SHA1Final "u_int8_t digest[SHA1_DIGEST_LENGTH]" "SHA1_CTX *context"
.Ft void
-.Fn SHA1Transform "u_int32_t state[5]" "u_char buffer[64]"
+.Fn SHA1Transform "u_int32_t state[5]" "u_int8_t buffer[SHA1_BLOCK_LENGTH]"
.Ft "char *"
-.Fn SHA1End "SHA1_CTX *context" "char *buf"
+.Fn SHA1End "SHA1_CTX *context" "char buf[SHA1_DIGEST_STRING_LENGTH]"
.Ft "char *"
-.Fn SHA1File "char *filename" "char *buf"
+.Fn SHA1File "char *filename" "char buf[SHA1_DIGEST_STRING_LENGTH]"
.Ft "char *"
-.Fn SHA1Data "const u_char *data" "u_int len" "char *buf"
+.Fn SHA1Data "const u_int8_t *data" "u_int len" "char buf[SHA1_DIGEST_STRING_LENGTH]"
.Sh DESCRIPTION
The SHA1 functions implement the NIST Secure Hash Algorithm (SHA-1),
FIPS PUB 180-1.
@@ -144,19 +144,19 @@ The follow code fragment will calculate the digest for
the string "abc" which is ``0xa9993e36476816aba3e25717850c26c9cd0d89d''.
.Bd -literal -offset indent
SHA1_CTX sha;
-u_char results[20];
+u_int8_t results[SHA1_DIGEST_LENGTH];
char *buf;
int n;
buf = "abc";
n = strlen(buf);
SHA1Init(&sha);
-SHA1Update(&sha, (u_char *)buf, n);
+SHA1Update(&sha, (u_int8_t *)buf, n);
SHA1Final(results, &sha);
/* Print the digest as one long hex value */
printf("0x");
-for (n = 0; n < 20; n++)
+for (n = 0; n < SHA1_DIGEST_LENGTH; n++)
printf("%02x", results[n]);
putchar('\en');
.Ed
@@ -164,7 +164,7 @@ putchar('\en');
Alternately, the helper functions could be used in the following way:
.Bd -literal -offset indent
SHA1_CTX sha;
-u_char output[41];
+u_int8_t output[SHA1_DIGEST_STRING_LENGTH];
char *buf = "abc";
printf("0x%s\en", SHA1Data(buf, strlen(buf), output));
diff --git a/lib/libc/hash/sha1.c b/lib/libc/hash/sha1.c
index 66246e8d214..cda161a05d5 100644
--- a/lib/libc/hash/sha1.c
+++ b/lib/libc/hash/sha1.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sha1.c,v 1.13 2004/03/31 23:41:53 brad Exp $ */
+/* $OpenBSD: sha1.c,v 1.14 2004/04/26 19:38:12 millert Exp $ */
/*
* SHA-1 in C
@@ -15,7 +15,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static char rcsid[] = "$OpenBSD: sha1.c,v 1.13 2004/03/31 23:41:53 brad Exp $";
+static char rcsid[] = "$OpenBSD: sha1.c,v 1.14 2004/04/26 19:38:12 millert Exp $";
#endif /* LIBC_SCCS and not lint */
#define SHA1HANDSOFF /* Copies data before messing with it. */
@@ -52,7 +52,7 @@ static char rcsid[] = "$OpenBSD: sha1.c,v 1.13 2004/03/31 23:41:53 brad Exp $";
* Hash a single 512-bit block. This is the core of the algorithm.
*/
void
-SHA1Transform(u_int32_t state[5], const u_char buffer[64])
+SHA1Transform(u_int32_t state[5], const u_char buffer[SHA1_BLOCK_LENGTH])
{
u_int32_t a, b, c, d, e;
typedef union {
@@ -62,9 +62,9 @@ SHA1Transform(u_int32_t state[5], const u_char buffer[64])
CHAR64LONG16 *block;
#ifdef SHA1HANDSOFF
- u_char workspace[64];
+ u_char workspace[SHA1_BLOCK_LENGTH];
block = (CHAR64LONG16 *)workspace;
- (void)memcpy(block, buffer, 64);
+ (void)memcpy(block, buffer, SHA1_BLOCK_LENGTH);
#else
block = (CHAR64LONG16 *)buffer;
#endif
@@ -156,7 +156,7 @@ SHA1Update(SHA1_CTX *context, const u_char *data, u_int len)
* Add padding and return the message digest.
*/
void
-SHA1Final(u_char digest[20], SHA1_CTX *context)
+SHA1Final(u_char digest[SHA1_DIGEST_LENGTH], SHA1_CTX *context)
{
u_int i;
u_char finalcount[8];
@@ -171,7 +171,7 @@ SHA1Final(u_char digest[20], SHA1_CTX *context)
SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */
if (digest) {
- for (i = 0; i < 20; i++)
+ for (i = 0; i < SHA1_DIGEST_LENGTH; i++)
digest[i] = (u_char)
((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
}
diff --git a/lib/libc/hash/sha1hl.c b/lib/libc/hash/sha1hl.c
deleted file mode 100644
index a30273aec99..00000000000
--- a/lib/libc/hash/sha1hl.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* sha1hl.c
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dkuug.dk> wrote this file. As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$OpenBSD: sha1hl.c,v 1.5 2003/05/09 16:46:31 millert Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <sha1.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-/* ARGSUSED */
-char *
-SHA1End(SHA1_CTX *ctx, char *buf)
-{
- int i;
- u_char digest[20];
- static const char hex[]="0123456789abcdef";
-
- if (buf == NULL && (buf = malloc(41)) == NULL)
- return(NULL);
-
- SHA1Final(digest,ctx);
- for (i = 0; i < 20; i++) {
- buf[i + i] = hex[digest[i] >> 4];
- buf[i + i + 1] = hex[digest[i] & 0x0f];
- }
- buf[i + i] = '\0';
- memset(digest, 0, sizeof(digest));
- return(buf);
-}
-
-char *
-SHA1File (char *filename, char *buf)
-{
- u_char buffer[BUFSIZ];
- SHA1_CTX ctx;
- int fd, num, oerrno;
-
- SHA1Init(&ctx);
-
- if ((fd = open(filename, O_RDONLY)) < 0)
- return(0);
-
- while ((num = read(fd, buffer, sizeof(buffer))) > 0)
- SHA1Update(&ctx, buffer, num);
-
- oerrno = errno;
- close(fd);
- errno = oerrno;
- return(num < 0 ? 0 : SHA1End(&ctx, buf));
-}
-
-char *
-SHA1Data (const u_char *data, size_t len, char *buf)
-{
- SHA1_CTX ctx;
-
- SHA1Init(&ctx);
- SHA1Update(&ctx, data, len);
- return(SHA1End(&ctx, buf));
-}
diff --git a/lib/libc/hash/sha2hl.c b/lib/libc/hash/sha2hl.c
deleted file mode 100644
index dee7f3cfa23..00000000000
--- a/lib/libc/hash/sha2hl.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/* sha2hl.c
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dkuug.dk> wrote this file. As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$OpenBSD: sha2hl.c,v 1.2 2003/05/09 16:46:31 millert Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <sha2.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-static const char hex[]="0123456789abcdef";
-
-/* ARGSUSED */
-char *
-SHA256_End(SHA256_CTX *ctx, char buf[SHA256_DIGEST_STRING_LENGTH])
-{
- int i;
- u_int8_t digest[SHA256_DIGEST_LENGTH];
-
- if (buf == NULL && (buf = malloc(SHA256_DIGEST_STRING_LENGTH)) == NULL)
- return(NULL);
-
- SHA256_Final(digest, ctx);
- for (i = 0; i < SHA256_DIGEST_LENGTH; i++) {
- buf[i + i] = hex[digest[i] >> 4];
- buf[i + i + 1] = hex[digest[i] & 0x0f];
- }
- buf[i + i] = '\0';
- memset(digest, 0, sizeof(digest));
- return(buf);
-}
-
-char *
-SHA256_File(char *filename, char buf[SHA256_DIGEST_STRING_LENGTH])
-{
- u_int8_t buffer[BUFSIZ];
- SHA256_CTX ctx;
- int fd, num, oerrno;
-
- SHA256_Init(&ctx);
-
- if ((fd = open(filename, O_RDONLY)) < 0)
- return(0);
-
- while ((num = read(fd, buffer, sizeof(buffer))) > 0)
- SHA256_Update(&ctx, buffer, num);
-
- oerrno = errno;
- close(fd);
- errno = oerrno;
- return(num < 0 ? 0 : SHA256_End(&ctx, buf));
-}
-
-char *
-SHA256_Data(const u_int8_t *data, size_t len, char buf[SHA256_DIGEST_STRING_LENGTH])
-{
- SHA256_CTX ctx;
-
- SHA256_Init(&ctx);
- SHA256_Update(&ctx, data, len);
- return(SHA256_End(&ctx, buf));
-}
-
-/* ARGSUSED */
-char *
-SHA384_End(SHA384_CTX *ctx, char buf[SHA384_DIGEST_STRING_LENGTH])
-{
- int i;
- u_int8_t digest[SHA384_DIGEST_LENGTH];
-
- if (buf == NULL && (buf = malloc(SHA384_DIGEST_STRING_LENGTH)) == NULL)
- return(NULL);
-
- SHA384_Final(digest, ctx);
- for (i = 0; i < SHA384_DIGEST_LENGTH; i++) {
- buf[i + i] = hex[digest[i] >> 4];
- buf[i + i + 1] = hex[digest[i] & 0x0f];
- }
- buf[i + i] = '\0';
- memset(digest, 0, sizeof(digest));
- return(buf);
-}
-
-char *
-SHA384_File(char *filename, char buf[SHA384_DIGEST_STRING_LENGTH])
-{
- u_int8_t buffer[BUFSIZ];
- SHA384_CTX ctx;
- int fd, num, oerrno;
-
- SHA384_Init(&ctx);
-
- if ((fd = open(filename, O_RDONLY)) < 0)
- return(0);
-
- while ((num = read(fd, buffer, sizeof(buffer))) > 0)
- SHA384_Update(&ctx, buffer, num);
-
- oerrno = errno;
- close(fd);
- errno = oerrno;
- return(num < 0 ? 0 : SHA384_End(&ctx, buf));
-}
-
-char *
-SHA384_Data(const u_int8_t *data, size_t len, char buf[SHA384_DIGEST_STRING_LENGTH])
-{
- SHA384_CTX ctx;
-
- SHA384_Init(&ctx);
- SHA384_Update(&ctx, data, len);
- return(SHA384_End(&ctx, buf));
-}
-
-/* ARGSUSED */
-char *
-SHA512_End(SHA512_CTX *ctx, char buf[SHA512_DIGEST_STRING_LENGTH])
-{
- int i;
- u_int8_t digest[SHA512_DIGEST_LENGTH];
-
- if (buf == NULL && (buf = malloc(SHA512_DIGEST_STRING_LENGTH)) == NULL)
- return(NULL);
-
- SHA512_Final(digest, ctx);
- for (i = 0; i < SHA512_DIGEST_LENGTH; i++) {
- buf[i + i] = hex[digest[i] >> 4];
- buf[i + i + 1] = hex[digest[i] & 0x0f];
- }
- buf[i + i] = '\0';
- memset(digest, 0, sizeof(digest));
- return(buf);
-}
-
-char *
-SHA512_File(char *filename, char buf[SHA512_DIGEST_STRING_LENGTH])
-{
- u_int8_t buffer[BUFSIZ];
- SHA512_CTX ctx;
- int fd, num, oerrno;
-
- SHA512_Init(&ctx);
-
- if ((fd = open(filename, O_RDONLY)) < 0)
- return(0);
-
- while ((num = read(fd, buffer, sizeof(buffer))) > 0)
- SHA512_Update(&ctx, buffer, num);
-
- oerrno = errno;
- close(fd);
- errno = oerrno;
- return(num < 0 ? 0 : SHA512_End(&ctx, buf));
-}
-
-char *
-SHA512_Data(const u_int8_t *data, size_t len, char buf[SHA512_DIGEST_STRING_LENGTH])
-{
- SHA512_CTX ctx;
-
- SHA512_Init(&ctx);
- SHA512_Update(&ctx, data, len);
- return(SHA512_End(&ctx, buf));
-}