[BACK]Return to sha1test.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / ox_ntl / crypt / sha1

File: [local] / OpenXM / src / ox_ntl / crypt / sha1 / sha1test.c (download)

Revision 1.2, Sun Jun 20 10:59:01 2004 UTC (19 years, 11 months ago) by iwane
Branch: MAIN
CVS Tags: R_1_3_1-2, RELEASE_1_3_1_13b, RELEASE_1_2_3_12, RELEASE_1_2_3, KNOPPIX_2006, HEAD, DEB_REL_1_2_3-9
Changes since 1.1: +62 -16 lines

fixed a bug in base filesize == 0
convert "unsigned int" to "uint32_t"

/* $OpenXM: OpenXM/src/ox_ntl/crypt/sha1/sha1test.c,v 1.2 2004/06/20 10:59:01 iwane Exp $ */

/* openssl sha1 ${FILE} */

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

#include "sha1.h"

void
Usage(char *cmd)
{
	printf("Usage: %s [-f][-s] file\n", cmd);
	exit (-1);
}


int
main(int argc, char *argv[])
{
	FILE *fp;
	char buf[1000000];
	int ret;
	int i;
	unsigned char sha[100];
	int flag = 0;

	enum {
		SHA = 1,
		F_SHA = 2
	};

	for (i = 1; i < argc; i++) {
		if (strcmp(argv[i], "-f") == 0) {
			flag |= F_SHA;
		} else if (strcmp(argv[i], "-s") == 0) {
			flag |= SHA;
		} else {
			break;
		}
	}

	if (flag == 0)
		flag |= SHA;
	argc -= i;

	if (argc != 1)
		Usage(argv[0]);

	argv += i - 1;

	if (flag & SHA) {
		fp = fopen(argv[1], "r");
		if (fp == NULL) {
			fprintf(stderr, "file not found: %s\n", argv[1]);
			exit (-1);
		}

		ret = fread(buf, 1, sizeof(buf), fp);

		sha1(sha, (unsigned char *)buf, ret);

		fclose(fp);

		printf("SHA1(%s)= ", argv[1]);
		for (i = 0; i < 20; i++) {
			printf("%02x", sha[i] & 0xff);
		}
		printf("\n");
	}

	if (flag & F_SHA) {
		int fd;

		fd = open(argv[1], O_RDONLY, NULL);
		if (fd == -1) {
			fprintf(stderr, "file not found: %s\n", argv[1]);
			exit (-1);
		}

		fsha1(sha, fd);
		close(fd);

		printf("SHA1(%s)= ", argv[1]);
		for (i = 0; i < 20; i++) {
			printf("%02x", sha[i] & 0xff);
		}
		printf("\n");
	}


	return (0);
}