summaryrefslogtreecommitdiff
path: root/security/digest/files/digest.c
diff options
context:
space:
mode:
Diffstat (limited to 'security/digest/files/digest.c')
-rw-r--r--security/digest/files/digest.c96
1 files changed, 85 insertions, 11 deletions
diff --git a/security/digest/files/digest.c b/security/digest/files/digest.c
index f5538b998dc7..1ad4cd3cd7d6 100644
--- a/security/digest/files/digest.c
+++ b/security/digest/files/digest.c
@@ -1,5 +1,4 @@
-/* $NetBSD: digest.c,v 1.1.1.1 2001/03/06 11:21:04 agc Exp $ */
-/* $FreeBSD$ */
+/* $NetBSD: digest.c,v 1.3 2001/07/09 21:42:30 hubertf Exp $ */
/*
* Copyright (c) 2001 Alistair G. Crooks. All rights reserved.
@@ -31,22 +30,21 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
#include <sys/cdefs.h>
#ifndef lint
__COPYRIGHT("@(#) Copyright (c) 2001 \
The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: digest.c,v 1.1.1.1 2001/03/06 11:21:04 agc Exp $");
+__RCSID("$NetBSD: digest.c,v 1.3 2001/07/09 21:42:30 hubertf Exp $");
#endif
#include <sys/types.h>
-#include <err.h>
#include <locale.h>
-#include "md5.h"
-#include "rmd160.h"
-#include "sha1.h"
+#include <md5.h>
+#include <rmd160.h>
+#include <sha1.h>
+#include <sha2.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -124,6 +122,78 @@ rmd160_digest_file(char *fn)
return 1;
}
+/* perform a sha256 digest, and print the results if successful */
+static int
+sha256_digest_file(char *fn)
+{
+ SHA256_CTX sha256;
+ char in[BUFSIZ * 20];
+ char digest[65];
+ int cc;
+
+ if (fn == NULL) {
+ SHA256_Init(&sha256);
+ while ((cc = read(STDIN_FILENO, in, sizeof(in))) > 0) {
+ SHA256_Update(&sha256, (u_char *)in, (unsigned) cc);
+ }
+ (void) printf("%s\n", SHA256_End(&sha256, digest));
+ } else {
+ if (SHA256_File(fn, digest) == NULL) {
+ return 0;
+ }
+ (void) printf("SHA256 (%s) = %s\n", fn, digest);
+ }
+ return 1;
+}
+
+/* perform a sha384 digest, and print the results if successful */
+static int
+sha384_digest_file(char *fn)
+{
+ SHA384_CTX sha384;
+ char in[BUFSIZ * 20];
+ char digest[97];
+ int cc;
+
+ if (fn == NULL) {
+ SHA384_Init(&sha384);
+ while ((cc = read(STDIN_FILENO, in, sizeof(in))) > 0) {
+ SHA384_Update(&sha384, (u_char *)in, (unsigned) cc);
+ }
+ (void) printf("%s\n", SHA384_End(&sha384, digest));
+ } else {
+ if (SHA384_File(fn, digest) == NULL) {
+ return 0;
+ }
+ (void) printf("SHA384 (%s) = %s\n", fn, digest);
+ }
+ return 1;
+}
+
+/* perform a sha512 digest, and print the results if successful */
+static int
+sha512_digest_file(char *fn)
+{
+ SHA512_CTX sha512;
+ char in[BUFSIZ * 20];
+ char digest[129];
+ int cc;
+
+ if (fn == NULL) {
+ SHA512_Init(&sha512);
+ while ((cc = read(STDIN_FILENO, in, sizeof(in))) > 0) {
+ SHA512_Update(&sha512, (u_char *)in, (unsigned) cc);
+ }
+ (void) printf("%s\n", SHA512_End(&sha512, digest));
+ } else {
+ if (SHA512_File(fn, digest) == NULL) {
+ return 0;
+ }
+ (void) printf("SHA512 (%s) = %s\n", fn, digest);
+ }
+ return 1;
+}
+
/* this struct defines a message digest algorithm */
typedef struct alg_t {
const char *name; /* algorithm name */
@@ -135,6 +205,9 @@ static alg_t algorithms[] = {
{ "md5", md5_digest_file },
{ "rmd160", rmd160_digest_file },
{ "sha1", sha1_digest_file },
+ { "sha256", sha256_digest_file },
+ { "sha384", sha384_digest_file },
+ { "sha512", sha512_digest_file },
{ NULL }
};
@@ -169,18 +242,19 @@ main(int argc, char **argv)
return EXIT_FAILURE;
}
if ((alg = find_algorithm(argv[optind])) == NULL) {
- errx(EXIT_FAILURE, "No such algorithm `%s'", argv[optind]);
+ (void) fprintf(stderr, "No such algorithm `%s'\n", argv[optind]);
+ exit(EXIT_FAILURE);
}
rval = EXIT_SUCCESS;
if (argc == optind + 1) {
if (!(*alg->func)(NULL)) {
- warn("stdin");
+ (void) fprintf(stderr, "stdin\n");
rval = EXIT_FAILURE;
}
} else {
for (i = optind + 1 ; i < argc ; i++) {
if (!(*alg->func)(argv[i])) {
- warn("%s", argv[i]);
+ (void) fprintf(stderr, "%s\n", argv[i]);
rval = EXIT_FAILURE;
}
}