bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Bug#325205: please provide sha256sum, sha384sum and sha512sum


From: Jim Meyering
Subject: Re: Bug#325205: please provide sha256sum, sha384sum and sha512sum
Date: Sat, 27 Aug 2005 18:55:50 +0200

David Madore <address@hidden> wrote:
> Yes, I am willing to do that.

Great.
I'll send you the copyright forms.

>> My requesting a `clean' patch means we're pretty picky,
>> and that the more of the following you can do, the better.
>
> Can I ask you to take a look at the attached patch?  It is not yet
> satisfactory (at least, it needs to be forwardported to the CVS
> version, as I worked against 5.2.1 because I wanted to install this
> ASAP on my Debian boxen), but maybe we can start from this to discuss
> what needs to be done.  It implements sha224, sha256, sha384 and
> sha512.
>
> [Note: need to "chmod +x tests/sha???sum/basic-1" after applying.]
>
> Here are a few things which need to be said about it, and which may be
> concerns:
>
> - sha224 and sha256 (in lib/sha256.c) present no particular
> difficulties.  However, as concerns sha384 and sha512 we have the
> following problem: the algorithm uses 64-bit words.  The attached
> patch (in lib/sha512.c) tries to find a 64-bit unsigned integer type
> basically by copying the code from md5/sha1 and adding a test for
> unsigned long long (and it barfs if it can't find one): however, this
> is probably not portable enough for your goals.  It should be possible

Actually, it may not be a big deal at all.
If there is a reasonable porting target that lacks a 64-bit integral
type, people will report it and we can address the problem then.

Regarding this comment,
  +/* The following contortions are an attempt to use the C preprocessor
  +   to determine an unsigned integral type that is 64 bits wide.  An
  +   alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
  +   doing that would require that the configure script compile and *run*
  +   the resulting executable.  Locally running cross-compiled executables
  +   is usually not possible.  */
FWIW, we *can* use compile-only tests to check for type sizes.
We should be able to write a 64-bit analog of m4/uint32_t.m4.
There may already be such a macro.
But for now, you're welcome to go ahead with what you have.
Besides, it'll take at least a couple of weeks to do the copyright
paper exchange.

BTW, it's ok to use #error, now.

> to write an implementation of sha384 and sha512 using only 32-bit
> words, but that would be extremely tedious, so I might be willing to
> do it, but not immediately.

That doesn't seem worthwhile.

> In the meantime, I guess one needs to
> have some configure test determine whether 64-bit words are available
> and, if not, warn the user and skip compiling sha384 and sha512.  Only
> I don't know how to do that, so I'll need some help here.
>
> - Speaking of word sizes, there's a potential alignment problem in the
> common code in src/md5sum.c, which does not seem to check whether the
> result buffer is 32-bit aligned (let alone 64-bit).  This should be
> trivial to fix, if that's an issue: but someone should decide whether
> the fix goes in the library routines (remove alignment constraint) or
> in the md5sum common code.

As far as alignment, I haven't heard of any problems, but maybe
that's just luck, since that buffer is the first automatic
variable declared in main.  You're welcome to fix it in src/md5sum.c.

> - sha1sum does not seem to be documented in texinfo (at least not in
> 5.2.1), so, since I was lazily copying everything I could from sha1, I
> didn't come up with a texinfo doc for sha224 etc.  I'm willing to try
> to document sha1sum along with the rest (but I've never written
> texinfo, I hope that's not a problem).

Thanks!  We still do need texinfo documentation for sha1sum.

> - With respect to the following remark of yours:
>
>> By the way, your e.g., src/sha256sum.c file should look like this:
>>
>>   #include "checksum.h"
>>   int algorithm = ALG_SHA256;
...
> So I'd like to advocate doing things differently, as in my attached
> patch: do away with src/md5.c, src/sha1sum.c and src/checksum.h, and
> simply compile src/md5sum.c six times, with a different compile-time
> flag each time, to provide the six utilities.  This works fine in
> automake, it means recompiling the same source six times but the
> resulting utilities are smaller and do not contain any needless code.
> How does that sound?

That sounds fine, of course.
Obviously I didn't really want 6 copies of such code in each binary :)
The point was to continue to keep everything well factored, as you've done.

> - Lastly, as concerns tests, I used the FIPS-supplied test vectors,
> except that I did not include the "one million a's" test, because I
> don't know how to do this properly with Fetish (we don't really want
> to write a file with one millon a's in it just to test the utility: it
> would be much better to pipe the data, but I don't know the framework
> for that).

These days, I wouldn't worry about creating a 1MB file.
You could use the Fetish (now, in cvs, called Coreutils.pm) framework
with 'a'.1000000 as the input.  Or use the tests/sample template and do
something like this to get the checksum:

  printf %1000000s ' '|sed 's/ /a/' |sha256sum > out




reply via email to

[Prev in Thread] Current Thread [Next in Thread]