md5: Create md5sum, etc compatible programs
On Linux, there's a similar set of programs to ours, but that end in the letters 'sum'. These act basically like FreeBSD versions run with the -r option. Add code so that when the program ends in 'sum' you get the linux -r behavior. This is enough to make most things that use sha*sum work correctly (the -c / --check options, as well as the long args are not implemented). When running with the -sum programs, ignore -t instead of running internal speed tests and make -c an error. Reviewed by: sef, and kp and allanjude (earlier version) Relnotes: yes Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D30309
This commit is contained in:
parent
4a6830761c
commit
086feed850
@ -4,27 +4,49 @@
|
||||
PACKAGE=runtime
|
||||
PROG= md5
|
||||
|
||||
LINKS= ${BINDIR}/md5 ${BINDIR}/rmd160 \
|
||||
LINKS= ${BINDIR}/md5 ${BINDIR}/md5sum \
|
||||
${BINDIR}/md5 ${BINDIR}/rmd160 \
|
||||
${BINDIR}/md5 ${BINDIR}/rmd160sum \
|
||||
${BINDIR}/md5 ${BINDIR}/sha1 \
|
||||
${BINDIR}/md5 ${BINDIR}/sha1sum \
|
||||
${BINDIR}/md5 ${BINDIR}/sha224 \
|
||||
${BINDIR}/md5 ${BINDIR}/sha224sum \
|
||||
${BINDIR}/md5 ${BINDIR}/sha256 \
|
||||
${BINDIR}/md5 ${BINDIR}/sha256sum \
|
||||
${BINDIR}/md5 ${BINDIR}/sha384 \
|
||||
${BINDIR}/md5 ${BINDIR}/sha384sum \
|
||||
${BINDIR}/md5 ${BINDIR}/sha512 \
|
||||
${BINDIR}/md5 ${BINDIR}/sha512sum \
|
||||
${BINDIR}/md5 ${BINDIR}/sha512t256 \
|
||||
${BINDIR}/md5 ${BINDIR}/sha512t256sum \
|
||||
${BINDIR}/md5 ${BINDIR}/skein256 \
|
||||
${BINDIR}/md5 ${BINDIR}/skein256sum \
|
||||
${BINDIR}/md5 ${BINDIR}/skein512 \
|
||||
${BINDIR}/md5 ${BINDIR}/skein1024
|
||||
${BINDIR}/md5 ${BINDIR}/skein512sum \
|
||||
${BINDIR}/md5 ${BINDIR}/skein1024 \
|
||||
${BINDIR}/md5 ${BINDIR}/skein1024sum
|
||||
|
||||
MLINKS= md5.1 rmd160.1 \
|
||||
MLINKS= md5.1 md5sum.1 \
|
||||
md5.1 rmd160.1 \
|
||||
md5.1 rmd160sum.1 \
|
||||
md5.1 sha1.1 \
|
||||
md5.1 sha1sum.1 \
|
||||
md5.1 sha224.1 \
|
||||
md5.1 sha224sum.1 \
|
||||
md5.1 sha256.1 \
|
||||
md5.1 sha256sum.1 \
|
||||
md5.1 sha384.1 \
|
||||
md5.1 sha384sum.1 \
|
||||
md5.1 sha512.1 \
|
||||
md5.1 sha512sum.1 \
|
||||
md5.1 sha512t256.1 \
|
||||
md5.1 sha512t256sum.1 \
|
||||
md5.1 skein256.1 \
|
||||
md5.1 skein256sum.1 \
|
||||
md5.1 skein512.1 \
|
||||
md5.1 skein1024.1
|
||||
md5.1 skein512sum.1 \
|
||||
md5.1 skein1024.1 \
|
||||
md5.1 skein1024sum.1
|
||||
|
||||
LIBADD= md
|
||||
|
||||
|
@ -1,10 +1,12 @@
|
||||
.\" $FreeBSD$
|
||||
.Dd June 19, 2020
|
||||
.Dd May 19, 2021
|
||||
.Dt MD5 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm md5 , sha1 , sha224 , sha256 , sha384 , sha512 , sha512t256 , rmd160 ,
|
||||
.Nm skein256 , skein512 , skein1024
|
||||
.Nm skein256 , skein512 , skein1024 ,
|
||||
.Nm md5sum , sha1sum , sha224sum , sha256sum , sha384sum , sha512sum ,
|
||||
.Nm sha512t256sum , rmd160sum , skein256sum , skein512sum , skein1024sum
|
||||
.Nd calculate a message-digest fingerprint (checksum) for a file
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
@ -26,6 +28,15 @@ output a
|
||||
or
|
||||
.Dq message digest
|
||||
of the input.
|
||||
The
|
||||
.Nm md5sum , sha1sum , sha224sum , sha256sum , sha384sum , sha512sum ,
|
||||
.Nm sha512t256sum , rmd160sum , skein256sum , skein512sum ,
|
||||
and
|
||||
.Nm skein1024sum
|
||||
utilities do the same, but default to the reversed format of
|
||||
the
|
||||
.Fl r
|
||||
flag.
|
||||
It is conjectured that it is computationally infeasible to
|
||||
produce two messages having the same message digest, or to produce any
|
||||
message having a given prespecified target message digest.
|
||||
@ -59,9 +70,18 @@ precede any files named on the command line.
|
||||
The hexadecimal checksum of each file listed on the command line is printed
|
||||
after the options are processed.
|
||||
.Bl -tag -width indent
|
||||
.It Fl b
|
||||
Ignored for compatibility with the coreutils
|
||||
.Nm -sum
|
||||
programs.
|
||||
.It Fl c Ar string
|
||||
Compare the digest of the file against this string.
|
||||
.Pq Note that this option is not yet useful if multiple files are specified.
|
||||
This option causes an error in for the
|
||||
.Nm -sum
|
||||
programs because it check the checksums listed in a file for the coreutils
|
||||
.Nm -sum
|
||||
programs that is not yet implemented.
|
||||
.It Fl s Ar string
|
||||
Print a checksum of the given
|
||||
.Ar string .
|
||||
@ -81,6 +101,9 @@ when combined with the
|
||||
options.
|
||||
.It Fl t
|
||||
Run a built-in time trial.
|
||||
For the
|
||||
.Nm -sum
|
||||
versions, this is a nop for compatibility with coreutils.
|
||||
.It Fl x
|
||||
Run a built-in test script.
|
||||
.El
|
||||
@ -171,6 +194,13 @@ Secure Hash Standard (SHS):
|
||||
.Pp
|
||||
The RIPEMD-160 page:
|
||||
.Pa http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html .
|
||||
.Sh BUGS
|
||||
All of the utilities that end in
|
||||
.Sq sum
|
||||
are intended to be compatible with the GNU coreutils programs.
|
||||
However, the long arguments and the
|
||||
.Fl -check
|
||||
functionality are not provided.
|
||||
.Sh ACKNOWLEDGMENTS
|
||||
This program is placed in the public domain for free general use by
|
||||
RSA Data Security.
|
||||
|
@ -177,13 +177,32 @@ main(int argc, char *argv[])
|
||||
char buf[HEX_DIGEST_LENGTH];
|
||||
size_t len;
|
||||
unsigned digest;
|
||||
const char* progname;
|
||||
char *progname;
|
||||
bool gnu_emu = false;
|
||||
|
||||
if ((progname = strrchr(argv[0], '/')) == NULL)
|
||||
progname = argv[0];
|
||||
else
|
||||
progname++;
|
||||
|
||||
/*
|
||||
* GNU coreutils has a number of programs named *sum. These produce
|
||||
* similar results to the BSD version, but in a different format,
|
||||
* similar to BSD's -r flag. We install links to this program with
|
||||
* ending 'sum' to provide this compatibility. Check here to see if the
|
||||
* name of the program ends in 'sum', set the flag and drop the 'sum' so
|
||||
* the digest lookup works. Also, make -t a nop when running in this mode
|
||||
* since that means 'text file' there (though it's a nop in coreutils
|
||||
* on unix-like systems). The -c flag conflicts, so it's just disabled
|
||||
* in this mode (though in the future it might be implemented).
|
||||
*/
|
||||
len = strlen(progname);
|
||||
if (len > 3 && strcmp(progname + len - 3, "sum") == 0) {
|
||||
progname[len - 3] = '\0';
|
||||
rflag = 1;
|
||||
gnu_emu = true;
|
||||
}
|
||||
|
||||
for (digest = 0; digest < sizeof(Algorithm)/sizeof(*Algorithm); digest++)
|
||||
if (strcasecmp(Algorithm[digest].progname, progname) == 0)
|
||||
break;
|
||||
@ -195,9 +214,13 @@ main(int argc, char *argv[])
|
||||
checkAgainst = NULL;
|
||||
checksFailed = 0;
|
||||
skip = 0;
|
||||
while ((ch = getopt(argc, argv, "c:pqrs:tx")) != -1)
|
||||
while ((ch = getopt(argc, argv, "bc:pqrs:tx")) != -1)
|
||||
switch (ch) {
|
||||
case 'b':
|
||||
break;
|
||||
case 'c':
|
||||
if (gnu_emu)
|
||||
errx(1, "-c check option not supported");
|
||||
checkAgainst = optarg;
|
||||
break;
|
||||
case 'p':
|
||||
@ -214,8 +237,10 @@ main(int argc, char *argv[])
|
||||
string = optarg;
|
||||
break;
|
||||
case 't':
|
||||
MDTimeTrial(&Algorithm[digest]);
|
||||
skip = 1;
|
||||
if (!gnu_emu) {
|
||||
MDTimeTrial(&Algorithm[digest]);
|
||||
skip = 1;
|
||||
} /* else: text mode is a nop */
|
||||
break;
|
||||
case 'x':
|
||||
MDTestSuite(&Algorithm[digest]);
|
||||
@ -348,7 +373,7 @@ MDTimeTrial(const Algorithm_t *alg)
|
||||
printf(" done\n");
|
||||
printf("Digest = %s", p);
|
||||
printf("\nTime = %f seconds\n", seconds);
|
||||
printf("Speed = %f MiB/second\n", (float) TEST_BLOCK_LEN *
|
||||
printf("Speed = %f MiB/second\n", (float) TEST_BLOCK_LEN *
|
||||
(float) TEST_BLOCK_COUNT / seconds / (1 << 20));
|
||||
}
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user