Mercurial > hg > orthanc
comparison Resources/sha1/sha.cpp @ 177:81b6f3013738
sha1
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 09 Nov 2012 10:42:00 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
176:81f11fb357f2 | 177:81b6f3013738 |
---|---|
1 /* | |
2 * sha.cpp | |
3 * | |
4 * Copyright (C) 1998, 2009 | |
5 * Paul E. Jones <paulej@packetizer.com> | |
6 * All Rights Reserved | |
7 * | |
8 ***************************************************************************** | |
9 * $Id: sha.cpp 13 2009-06-22 20:20:32Z paulej $ | |
10 ***************************************************************************** | |
11 * | |
12 * Description: | |
13 * This utility will display the message digest (fingerprint) for | |
14 * the specified file(s). | |
15 * | |
16 * Portability Issues: | |
17 * None. | |
18 */ | |
19 | |
20 #include <stdio.h> | |
21 #include <string.h> | |
22 #ifdef WIN32 | |
23 #include <io.h> | |
24 #endif | |
25 #include <fcntl.h> | |
26 #include "sha1.h" | |
27 | |
28 /* | |
29 * Function prototype | |
30 */ | |
31 void usage(); | |
32 | |
33 | |
34 /* | |
35 * main | |
36 * | |
37 * Description: | |
38 * This is the entry point for the program | |
39 * | |
40 * Parameters: | |
41 * argc: [in] | |
42 * This is the count of arguments in the argv array | |
43 * argv: [in] | |
44 * This is an array of filenames for which to compute message digests | |
45 * | |
46 * Returns: | |
47 * Nothing. | |
48 * | |
49 * Comments: | |
50 * | |
51 */ | |
52 int main(int argc, char *argv[]) | |
53 { | |
54 SHA1 sha; // SHA-1 class | |
55 FILE *fp; // File pointer for reading files | |
56 char c; // Character read from file | |
57 unsigned message_digest[5]; // Message digest from "sha" | |
58 int i; // Counter | |
59 bool reading_stdin; // Are we reading standard in? | |
60 bool read_stdin = false; // Have we read stdin? | |
61 | |
62 /* | |
63 * Check the program arguments and print usage information if -? | |
64 * or --help is passed as the first argument. | |
65 */ | |
66 if (argc > 1 && (!strcmp(argv[1],"-?") || !strcmp(argv[1],"--help"))) | |
67 { | |
68 usage(); | |
69 return 1; | |
70 } | |
71 | |
72 /* | |
73 * For each filename passed in on the command line, calculate the | |
74 * SHA-1 value and display it. | |
75 */ | |
76 for(i = 0; i < argc; i++) | |
77 { | |
78 /* | |
79 * We start the counter at 0 to guarantee entry into the for loop. | |
80 * So if 'i' is zero, we will increment it now. If there is no | |
81 * argv[1], we will use STDIN below. | |
82 */ | |
83 if (i == 0) | |
84 { | |
85 i++; | |
86 } | |
87 | |
88 if (argc == 1 || !strcmp(argv[i],"-")) | |
89 { | |
90 #ifdef WIN32 | |
91 _setmode(_fileno(stdin), _O_BINARY); | |
92 #endif | |
93 fp = stdin; | |
94 reading_stdin = true; | |
95 } | |
96 else | |
97 { | |
98 if (!(fp = fopen(argv[i],"rb"))) | |
99 { | |
100 fprintf(stderr, "sha: unable to open file %s\n", argv[i]); | |
101 return 2; | |
102 } | |
103 reading_stdin = false; | |
104 } | |
105 | |
106 /* | |
107 * We do not want to read STDIN multiple times | |
108 */ | |
109 if (reading_stdin) | |
110 { | |
111 if (read_stdin) | |
112 { | |
113 continue; | |
114 } | |
115 | |
116 read_stdin = true; | |
117 } | |
118 | |
119 /* | |
120 * Reset the SHA1 object and process input | |
121 */ | |
122 sha.Reset(); | |
123 | |
124 c = fgetc(fp); | |
125 while(!feof(fp)) | |
126 { | |
127 sha.Input(c); | |
128 c = fgetc(fp); | |
129 } | |
130 | |
131 if (!reading_stdin) | |
132 { | |
133 fclose(fp); | |
134 } | |
135 | |
136 if (!sha.Result(message_digest)) | |
137 { | |
138 fprintf(stderr,"sha: could not compute message digest for %s\n", | |
139 reading_stdin?"STDIN":argv[i]); | |
140 } | |
141 else | |
142 { | |
143 printf( "%08X %08X %08X %08X %08X - %s\n", | |
144 message_digest[0], | |
145 message_digest[1], | |
146 message_digest[2], | |
147 message_digest[3], | |
148 message_digest[4], | |
149 reading_stdin?"STDIN":argv[i]); | |
150 } | |
151 } | |
152 | |
153 return 0; | |
154 } | |
155 | |
156 /* | |
157 * usage | |
158 * | |
159 * Description: | |
160 * This function will display program usage information to the user. | |
161 * | |
162 * Parameters: | |
163 * None. | |
164 * | |
165 * Returns: | |
166 * Nothing. | |
167 * | |
168 * Comments: | |
169 * | |
170 */ | |
171 void usage() | |
172 { | |
173 printf("usage: sha <file> [<file> ...]\n"); | |
174 printf("\tThis program will display the message digest (fingerprint)\n"); | |
175 printf("\tfor files using the Secure Hashing Algorithm (SHA-1).\n"); | |
176 } |