aboutsummaryrefslogtreecommitdiff
path: root/coreutils/md5_sha1_sum.c
diff options
context:
space:
mode:
Diffstat (limited to 'coreutils/md5_sha1_sum.c')
-rw-r--r--coreutils/md5_sha1_sum.c80
1 files changed, 69 insertions, 11 deletions
diff --git a/coreutils/md5_sha1_sum.c b/coreutils/md5_sha1_sum.c
index 3b897c18f..050d46701 100644
--- a/coreutils/md5_sha1_sum.c
+++ b/coreutils/md5_sha1_sum.c
@@ -6,6 +6,64 @@
6 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 6 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
7 */ 7 */
8 8
9//usage:#define md5sum_trivial_usage
10//usage: "[FILE]..."
11//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: md5sum -c [-sw] [FILE]")
12//usage:#define md5sum_full_usage "\n\n"
13//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums"
14//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
15//usage: "\nOptions:"
16//usage: "\n -c Check sums against given list"
17//usage: "\n -s Don't output anything, status code shows success"
18//usage: "\n -w Warn about improperly formatted checksum lines"
19//usage: )
20//usage:
21//usage:#define md5sum_example_usage
22//usage: "$ md5sum < busybox\n"
23//usage: "6fd11e98b98a58f64ff3398d7b324003\n"
24//usage: "$ md5sum busybox\n"
25//usage: "6fd11e98b98a58f64ff3398d7b324003 busybox\n"
26//usage: "$ md5sum -c -\n"
27//usage: "6fd11e98b98a58f64ff3398d7b324003 busybox\n"
28//usage: "busybox: OK\n"
29//usage: "^D\n"
30//usage:
31//usage:#define sha1sum_trivial_usage
32//usage: "[FILE]..."
33//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha1sum -c [-sw] [FILE]")
34//usage:#define sha1sum_full_usage "\n\n"
35//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums"
36//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
37//usage: "\nOptions:"
38//usage: "\n -c Check sums against given list"
39//usage: "\n -s Don't output anything, status code shows success"
40//usage: "\n -w Warn about improperly formatted checksum lines"
41//usage: )
42//usage:
43//usage:#define sha256sum_trivial_usage
44//usage: "[FILE]..."
45//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha256sum -c [-sw] [FILE]")
46//usage:#define sha256sum_full_usage "\n\n"
47//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA256 checksums"
48//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
49//usage: "\nOptions:"
50//usage: "\n -c Check sums against given list"
51//usage: "\n -s Don't output anything, status code shows success"
52//usage: "\n -w Warn about improperly formatted checksum lines"
53//usage: )
54//usage:
55//usage:#define sha512sum_trivial_usage
56//usage: "[FILE]..."
57//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha512sum -c [-sw] [FILE]")
58//usage:#define sha512sum_full_usage "\n\n"
59//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA512 checksums"
60//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
61//usage: "\nOptions:"
62//usage: "\n -c Check sums against given list"
63//usage: "\n -s Don't output anything, status code shows success"
64//usage: "\n -w Warn about improperly formatted checksum lines"
65//usage: )
66
9#include "libbb.h" 67#include "libbb.h"
10 68
11/* This is a NOEXEC applet. Be very careful! */ 69/* This is a NOEXEC applet. Be very careful! */
@@ -42,7 +100,6 @@ static uint8_t *hash_file(const char *filename)
42 md5_ctx_t md5; 100 md5_ctx_t md5;
43 } context; 101 } context;
44 uint8_t *hash_value = NULL; 102 uint8_t *hash_value = NULL;
45 RESERVE_CONFIG_UBUFFER(in_buf, 4096);
46 void FAST_FUNC (*update)(void*, const void*, size_t); 103 void FAST_FUNC (*update)(void*, const void*, size_t);
47 void FAST_FUNC (*final)(void*, void*); 104 void FAST_FUNC (*final)(void*, void*);
48 char hash_algo; 105 char hash_algo;
@@ -54,7 +111,7 @@ static uint8_t *hash_file(const char *filename)
54 111
55 hash_algo = applet_name[3]; 112 hash_algo = applet_name[3];
56 113
57 /* figure specific hash algorithims */ 114 /* figure specific hash algorithms */
58 if (ENABLE_MD5SUM && hash_algo == HASH_MD5) { 115 if (ENABLE_MD5SUM && hash_algo == HASH_MD5) {
59 md5_begin(&context.md5); 116 md5_begin(&context.md5);
60 update = (void*)md5_hash; 117 update = (void*)md5_hash;
@@ -79,17 +136,18 @@ static uint8_t *hash_file(const char *filename)
79 xfunc_die(); /* can't reach this */ 136 xfunc_die(); /* can't reach this */
80 } 137 }
81 138
82 while ((count = safe_read(src_fd, in_buf, 4096)) > 0) { 139 {
83 update(&context, in_buf, count); 140 RESERVE_CONFIG_UBUFFER(in_buf, 4096);
84 } 141 while ((count = safe_read(src_fd, in_buf, 4096)) > 0) {
85 142 update(&context, in_buf, count);
86 if (count == 0) { 143 }
87 final(&context, in_buf); 144 if (count == 0) {
88 hash_value = hash_bin_to_hex(in_buf, hash_len); 145 final(&context, in_buf);
146 hash_value = hash_bin_to_hex(in_buf, hash_len);
147 }
148 RELEASE_CONFIG_BUFFER(in_buf);
89 } 149 }
90 150
91 RELEASE_CONFIG_BUFFER(in_buf);
92
93 if (src_fd != STDIN_FILENO) { 151 if (src_fd != STDIN_FILENO) {
94 close(src_fd); 152 close(src_fd);
95 } 153 }