Coverage Report

Created: 2026-10-13 06:38

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/barebox/commands/hashsum.c
Line
Count
Source
1
// SPDX-License-Identifier: GPL-2.0-only
2
// SPDX-FileCopyrightText: © 2011 Peter Korsgaard <jacmet@sunsite.dk>
3
4
/* digest.c - Calculate a md5/sha1/sha256 checksum of a memory area */
5
6
#include <common.h>
7
#include <command.h>
8
#include <fs.h>
9
#include <fcntl.h>
10
#include <errno.h>
11
#include <xfuncs.h>
12
#include <malloc.h>
13
#include <digest.h>
14
#include <getopt.h>
15
16
#include "internal.h"
17
18
static int do_hash(char *algo, int argc, char *argv[])
19
0
{
20
0
  struct digest *d;
21
0
  unsigned char *key = NULL;
22
0
  size_t keylen = 0;
23
0
  int opt, ret;
24
25
0
  while ((opt = getopt(argc, argv, "h:")) > 0) {
26
0
    switch(opt) {
27
0
    case 'h':
28
0
      key = optarg;
29
0
      keylen = strlen(key);
30
0
      break;
31
0
    default:
32
0
      return COMMAND_ERROR_USAGE;
33
0
    }
34
0
  }
35
36
0
  if (key) {
37
0
    char *tmp = basprintf("hmac(%s)", algo);
38
0
    d = digest_alloc(tmp);
39
0
    free(tmp);
40
0
    BUG_ON(!d);
41
42
0
    ret = digest_set_key(d, key, keylen);
43
0
    if (ret) {
44
0
      perror("set_key");
45
0
      return ret;
46
0
    }
47
0
  } else {
48
0
    d = digest_alloc(algo);
49
0
    BUG_ON(!d);
50
0
  }
51
52
0
  argc -= optind;
53
0
  argv += optind;
54
55
0
  return __do_digest(d, NULL, argc, argv);
56
0
}
57
58
#ifdef CONFIG_CMD_MD5SUM
59
60
static int do_md5(int argc, char *argv[])
61
0
{
62
0
  return do_hash("md5", argc, argv);
63
0
}
64
65
BAREBOX_CMD_HELP_START(md5sum)
66
BAREBOX_CMD_HELP_TEXT("Calculate a MD5 digest over a FILE or a memory area.")
67
BAREBOX_CMD_HELP_END
68
69
BAREBOX_CMD_START(md5sum)
70
  .cmd    = do_md5,
71
  BAREBOX_CMD_DESC("calculate MD5 checksum")
72
  BAREBOX_CMD_OPTS("FILE|AREA...")
73
  BAREBOX_CMD_GROUP(CMD_GRP_FILE)
74
  BAREBOX_CMD_HELP(cmd_md5sum_help)
75
BAREBOX_CMD_END
76
77
#endif /* CONFIG_CMD_MD5SUM */
78
79
#ifdef CONFIG_CMD_SHA1SUM
80
81
static int do_sha1(int argc, char *argv[])
82
0
{
83
0
  return do_hash("sha1", argc, argv);
84
0
}
85
86
BAREBOX_CMD_HELP_START(sha1sum)
87
BAREBOX_CMD_HELP_TEXT("Calculate a SHA1 digest over a FILE or a memory area.")
88
BAREBOX_CMD_HELP_END
89
90
BAREBOX_CMD_START(sha1sum)
91
  .cmd    = do_sha1,
92
  BAREBOX_CMD_DESC("calculate SHA1 digest")
93
  BAREBOX_CMD_OPTS("FILE|AREA")
94
  BAREBOX_CMD_GROUP(CMD_GRP_FILE)
95
  BAREBOX_CMD_HELP(cmd_sha1sum_help)
96
BAREBOX_CMD_END
97
98
#endif /* CONFIG_CMD_SHA1SUM */
99
100
#ifdef CONFIG_CMD_SHA224SUM
101
102
static int do_sha224(int argc, char *argv[])
103
0
{
104
0
  return do_hash("sha224", argc, argv);
105
0
}
106
107
BAREBOX_CMD_HELP_START(sha224sum)
108
BAREBOX_CMD_HELP_TEXT("Calculate a SHA224 digest over a FILE or a memory area.")
109
BAREBOX_CMD_HELP_END
110
111
BAREBOX_CMD_START(sha224sum)
112
  .cmd    = do_sha224,
113
  BAREBOX_CMD_DESC("calculate SHA224 digest")
114
  BAREBOX_CMD_OPTS("FILE|AREA")
115
  BAREBOX_CMD_GROUP(CMD_GRP_FILE)
116
  BAREBOX_CMD_HELP(cmd_sha224sum_help)
117
BAREBOX_CMD_END
118
119
#endif /* CONFIG_CMD_SHA224SUM */
120
121
#ifdef CONFIG_CMD_SHA256SUM
122
123
static int do_sha256(int argc, char *argv[])
124
0
{
125
0
  return do_hash("sha256", argc, argv);
126
0
}
127
128
BAREBOX_CMD_HELP_START(sha256sum)
129
BAREBOX_CMD_HELP_TEXT("Calculate a SHA256 digest over a FILE or a memory area.")
130
BAREBOX_CMD_HELP_END
131
132
BAREBOX_CMD_START(sha256sum)
133
  .cmd    = do_sha256,
134
  BAREBOX_CMD_DESC("calculate SHA256 digest")
135
  BAREBOX_CMD_OPTS("FILE|AREA")
136
  BAREBOX_CMD_GROUP(CMD_GRP_FILE)
137
  BAREBOX_CMD_HELP(cmd_sha256sum_help)
138
BAREBOX_CMD_END
139
140
#endif /* CONFIG_CMD_SHA256SUM */
141
142
#ifdef CONFIG_CMD_SHA384SUM
143
144
static int do_sha384(int argc, char *argv[])
145
0
{
146
0
  return do_hash("sha384", argc, argv);
147
0
}
148
149
BAREBOX_CMD_HELP_START(sha384sum)
150
BAREBOX_CMD_HELP_TEXT("Calculate a SHA384 digest over a FILE or a memory area.")
151
BAREBOX_CMD_HELP_END
152
153
BAREBOX_CMD_START(sha384sum)
154
  .cmd    = do_sha384,
155
  BAREBOX_CMD_DESC("calculate SHA384 digest")
156
  BAREBOX_CMD_OPTS("FILE|AREA")
157
  BAREBOX_CMD_GROUP(CMD_GRP_FILE)
158
  BAREBOX_CMD_HELP(cmd_sha384sum_help)
159
BAREBOX_CMD_END
160
161
#endif /* CONFIG_CMD_SHA384SUM */
162
163
#ifdef CONFIG_CMD_SHA512SUM
164
165
static int do_sha512(int argc, char *argv[])
166
0
{
167
0
  return do_hash("sha512", argc, argv);
168
0
}
169
170
BAREBOX_CMD_HELP_START(sha512sum)
171
BAREBOX_CMD_HELP_TEXT("Calculate a SHA512 digest over a FILE or a memory area.")
172
BAREBOX_CMD_HELP_END
173
174
BAREBOX_CMD_START(sha512sum)
175
  .cmd    = do_sha512,
176
  BAREBOX_CMD_DESC("calculate SHA512 digest")
177
  BAREBOX_CMD_OPTS("FILE|AREA")
178
  BAREBOX_CMD_GROUP(CMD_GRP_FILE)
179
  BAREBOX_CMD_HELP(cmd_sha512sum_help)
180
BAREBOX_CMD_END
181
182
#endif /* CONFIG_CMD_SHA512SUM */