add sha224sum and sha384sum
Signed-off-by: Mattias Andrée <maandree@kth.se>
This commit is contained in:
parent
6adb9b8ccd
commit
ae1da536bb
6
Makefile
6
Makefile
|
@ -11,7 +11,9 @@ HDR =\
|
||||||
md5.h\
|
md5.h\
|
||||||
queue.h\
|
queue.h\
|
||||||
sha1.h\
|
sha1.h\
|
||||||
|
sha224.h\
|
||||||
sha256.h\
|
sha256.h\
|
||||||
|
sha384.h\
|
||||||
sha512.h\
|
sha512.h\
|
||||||
text.h\
|
text.h\
|
||||||
utf.h\
|
utf.h\
|
||||||
|
@ -62,7 +64,9 @@ LIBUTILSRC =\
|
||||||
libutil/recurse.c\
|
libutil/recurse.c\
|
||||||
libutil/rm.c\
|
libutil/rm.c\
|
||||||
libutil/sha1.c\
|
libutil/sha1.c\
|
||||||
|
libutil/sha224.c\
|
||||||
libutil/sha256.c\
|
libutil/sha256.c\
|
||||||
|
libutil/sha384.c\
|
||||||
libutil/sha512.c\
|
libutil/sha512.c\
|
||||||
libutil/strcasestr.c\
|
libutil/strcasestr.c\
|
||||||
libutil/strlcat.c\
|
libutil/strlcat.c\
|
||||||
|
@ -133,7 +137,9 @@ BIN =\
|
||||||
seq\
|
seq\
|
||||||
setsid\
|
setsid\
|
||||||
sha1sum\
|
sha1sum\
|
||||||
|
sha224sum\
|
||||||
sha256sum\
|
sha256sum\
|
||||||
|
sha384sum\
|
||||||
sha512sum\
|
sha512sum\
|
||||||
sleep\
|
sleep\
|
||||||
sort\
|
sort\
|
||||||
|
|
2
README
2
README
|
@ -72,7 +72,9 @@ The following tools are implemented:
|
||||||
=*|x seq .
|
=*|x seq .
|
||||||
=*|x setsid .
|
=*|x setsid .
|
||||||
=*|x sha1sum .
|
=*|x sha1sum .
|
||||||
|
=* x sha224sum .
|
||||||
=*|x sha256sum .
|
=*|x sha256sum .
|
||||||
|
=* x sha238sum .
|
||||||
=*|x sha512sum .
|
=*|x sha512sum .
|
||||||
=*|o sleep .
|
=*|o sleep .
|
||||||
#*|o sort .
|
#*|o sort .
|
||||||
|
|
26
libutil/sha224.c
Normal file
26
libutil/sha224.c
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/* public domain sha224 implementation based on fips180-3 */
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "../sha224.h"
|
||||||
|
|
||||||
|
extern void sha256_sum_n(void *, uint8_t *, int n);
|
||||||
|
|
||||||
|
void
|
||||||
|
sha224_init(void *ctx)
|
||||||
|
{
|
||||||
|
struct sha224 *s = ctx;
|
||||||
|
s->len = 0;
|
||||||
|
s->h[0] = 0xc1059ed8;
|
||||||
|
s->h[1] = 0x367cd507;
|
||||||
|
s->h[2] = 0x3070dd17;
|
||||||
|
s->h[3] = 0xf70e5939;
|
||||||
|
s->h[4] = 0xffc00b31;
|
||||||
|
s->h[5] = 0x68581511;
|
||||||
|
s->h[6] = 0x64f98fa7;
|
||||||
|
s->h[7] = 0xbefa4fa4;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
sha224_sum(void *ctx, uint8_t md[SHA224_DIGEST_LENGTH])
|
||||||
|
{
|
||||||
|
sha256_sum_n(ctx, md, 8);
|
||||||
|
}
|
|
@ -110,13 +110,13 @@ sha256_init(void *ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sha256_sum(void *ctx, uint8_t md[SHA256_DIGEST_LENGTH])
|
sha256_sum_n(void *ctx, uint8_t *md, int n)
|
||||||
{
|
{
|
||||||
struct sha256 *s = ctx;
|
struct sha256 *s = ctx;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
pad(s);
|
pad(s);
|
||||||
for (i = 0; i < 8; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
md[4*i] = s->h[i] >> 24;
|
md[4*i] = s->h[i] >> 24;
|
||||||
md[4*i+1] = s->h[i] >> 16;
|
md[4*i+1] = s->h[i] >> 16;
|
||||||
md[4*i+2] = s->h[i] >> 8;
|
md[4*i+2] = s->h[i] >> 8;
|
||||||
|
@ -124,6 +124,12 @@ sha256_sum(void *ctx, uint8_t md[SHA256_DIGEST_LENGTH])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
sha256_sum(void *ctx, uint8_t md[SHA256_DIGEST_LENGTH])
|
||||||
|
{
|
||||||
|
sha256_sum_n(ctx, md, 8);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sha256_update(void *ctx, const void *m, unsigned long len)
|
sha256_update(void *ctx, const void *m, unsigned long len)
|
||||||
{
|
{
|
||||||
|
|
26
libutil/sha384.c
Normal file
26
libutil/sha384.c
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/* public domain sha384 implementation based on fips180-3 */
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "../sha384.h"
|
||||||
|
|
||||||
|
extern void sha512_sum_n(void *, uint8_t *, int n);
|
||||||
|
|
||||||
|
void
|
||||||
|
sha384_init(void *ctx)
|
||||||
|
{
|
||||||
|
struct sha384 *s = ctx;
|
||||||
|
s->len = 0;
|
||||||
|
s->h[0] = 0xcbbb9d5dc1059ed8ULL;
|
||||||
|
s->h[1] = 0x629a292a367cd507ULL;
|
||||||
|
s->h[2] = 0x9159015a3070dd17ULL;
|
||||||
|
s->h[3] = 0x152fecd8f70e5939ULL;
|
||||||
|
s->h[4] = 0x67332667ffc00b31ULL;
|
||||||
|
s->h[5] = 0x8eb44a8768581511ULL;
|
||||||
|
s->h[6] = 0xdb0c2e0d64f98fa7ULL;
|
||||||
|
s->h[7] = 0x47b5481dbefa4fa4ULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
sha384_sum(void *ctx, uint8_t md[SHA384_DIGEST_LENGTH])
|
||||||
|
{
|
||||||
|
sha512_sum_n(ctx, md, 6);
|
||||||
|
}
|
|
@ -127,13 +127,13 @@ sha512_init(void *ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sha512_sum(void *ctx, uint8_t md[SHA512_DIGEST_LENGTH])
|
sha512_sum_n(void *ctx, uint8_t *md, int n)
|
||||||
{
|
{
|
||||||
struct sha512 *s = ctx;
|
struct sha512 *s = ctx;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
pad(s);
|
pad(s);
|
||||||
for (i = 0; i < 8; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
md[8*i] = s->h[i] >> 56;
|
md[8*i] = s->h[i] >> 56;
|
||||||
md[8*i+1] = s->h[i] >> 48;
|
md[8*i+1] = s->h[i] >> 48;
|
||||||
md[8*i+2] = s->h[i] >> 40;
|
md[8*i+2] = s->h[i] >> 40;
|
||||||
|
@ -145,6 +145,12 @@ sha512_sum(void *ctx, uint8_t md[SHA512_DIGEST_LENGTH])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
sha512_sum(void *ctx, uint8_t md[SHA512_DIGEST_LENGTH])
|
||||||
|
{
|
||||||
|
sha512_sum_n(ctx, md, 8);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sha512_update(void *ctx, const void *m, unsigned long len)
|
sha512_update(void *ctx, const void *m, unsigned long len)
|
||||||
{
|
{
|
||||||
|
|
16
sha224.h
Normal file
16
sha224.h
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
/* public domain sha224 implementation based on fips180-3 */
|
||||||
|
|
||||||
|
#include "sha256.h"
|
||||||
|
|
||||||
|
#define sha224 sha256 /*struct*/
|
||||||
|
|
||||||
|
enum { SHA224_DIGEST_LENGTH = 28 };
|
||||||
|
|
||||||
|
/* reset state */
|
||||||
|
void sha224_init(void *ctx);
|
||||||
|
/* process message */
|
||||||
|
#define sha224_update sha256_update
|
||||||
|
/* get message digest */
|
||||||
|
/* state is ruined after sum, keep a copy if multiple sum is needed */
|
||||||
|
/* part of the message might be left in s, zero it if secrecy is needed */
|
||||||
|
void sha224_sum(void *ctx, uint8_t md[SHA224_DIGEST_LENGTH]);
|
32
sha224sum.1
Normal file
32
sha224sum.1
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
.Dd 2016-02-24
|
||||||
|
.Dt SHA224SUM 1
|
||||||
|
.Os sbase
|
||||||
|
.Sh NAME
|
||||||
|
.Nm sha224sum
|
||||||
|
.Nd compute or check SHA-224 message digests
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.Nm
|
||||||
|
.Op Fl c
|
||||||
|
.Op Ar file ...
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
.Nm
|
||||||
|
writes SHA-224 (224-bit) checksums of each
|
||||||
|
.Ar file
|
||||||
|
to stdout.
|
||||||
|
If no
|
||||||
|
.Ar file
|
||||||
|
is given
|
||||||
|
.Nm
|
||||||
|
reads from stdin.
|
||||||
|
.Sh OPTIONS
|
||||||
|
.Bl -tag -width Ds
|
||||||
|
.It Fl c
|
||||||
|
Read list of SHA-224 checksums from each
|
||||||
|
.Ar file
|
||||||
|
and check them.
|
||||||
|
If no
|
||||||
|
.Ar file
|
||||||
|
is given
|
||||||
|
.Nm
|
||||||
|
reads from stdin.
|
||||||
|
.El
|
41
sha224sum.c
Normal file
41
sha224sum.c
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "crypt.h"
|
||||||
|
#include "sha224.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
static struct sha224 s;
|
||||||
|
struct crypt_ops sha224_ops = {
|
||||||
|
sha224_init,
|
||||||
|
sha224_update,
|
||||||
|
sha224_sum,
|
||||||
|
&s,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
eprintf("usage: %s [-c] [file ...]\n", argv0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int ret = 0, (*cryptfunc)(int, char **, struct crypt_ops *, uint8_t *, size_t) = cryptmain;
|
||||||
|
uint8_t md[SHA224_DIGEST_LENGTH];
|
||||||
|
|
||||||
|
ARGBEGIN {
|
||||||
|
case 'c':
|
||||||
|
cryptfunc = cryptcheck;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
} ARGEND
|
||||||
|
|
||||||
|
ret |= cryptfunc(argc, argv, &sha224_ops, md, sizeof(md));
|
||||||
|
ret |= fshut(stdin, "<stdin>") | fshut(stdout, "<stdout>");
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
16
sha384.h
Normal file
16
sha384.h
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
/* public domain sha512 implementation based on fips180-3 */
|
||||||
|
|
||||||
|
#include "sha512.h"
|
||||||
|
|
||||||
|
#define sha384 sha512 /*struct*/
|
||||||
|
|
||||||
|
enum { SHA384_DIGEST_LENGTH = 48 };
|
||||||
|
|
||||||
|
/* reset state */
|
||||||
|
void sha384_init(void *ctx);
|
||||||
|
/* process message */
|
||||||
|
#define sha384_update sha512_update
|
||||||
|
/* get message digest */
|
||||||
|
/* state is ruined after sum, keep a copy if multiple sum is needed */
|
||||||
|
/* part of the message might be left in s, zero it if secrecy is needed */
|
||||||
|
void sha384_sum(void *ctx, uint8_t md[SHA384_DIGEST_LENGTH]);
|
32
sha384sum.1
Normal file
32
sha384sum.1
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
.Dd 2016-02-24
|
||||||
|
.Dt SHA384SUM 1
|
||||||
|
.Os sbase
|
||||||
|
.Sh NAME
|
||||||
|
.Nm sha384sum
|
||||||
|
.Nd compute or check SHA-384 message digests
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.Nm
|
||||||
|
.Op Fl c
|
||||||
|
.Op Ar file ...
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
.Nm
|
||||||
|
writes SHA-384 (384-bit) checksums of each
|
||||||
|
.Ar file
|
||||||
|
to stdout.
|
||||||
|
If no
|
||||||
|
.Ar file
|
||||||
|
is given
|
||||||
|
.Nm
|
||||||
|
reads from stdin.
|
||||||
|
.Sh OPTIONS
|
||||||
|
.Bl -tag -width Ds
|
||||||
|
.It Fl c
|
||||||
|
Read list of SHA-384 checksums from each
|
||||||
|
.Ar file
|
||||||
|
and check them.
|
||||||
|
If no
|
||||||
|
.Ar file
|
||||||
|
is given
|
||||||
|
.Nm
|
||||||
|
reads from stdin.
|
||||||
|
.El
|
41
sha384sum.c
Normal file
41
sha384sum.c
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "crypt.h"
|
||||||
|
#include "sha384.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
static struct sha384 s;
|
||||||
|
struct crypt_ops sha384_ops = {
|
||||||
|
sha384_init,
|
||||||
|
sha384_update,
|
||||||
|
sha384_sum,
|
||||||
|
&s,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
eprintf("usage: %s [-c] [file ...]\n", argv0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int ret = 0, (*cryptfunc)(int, char **, struct crypt_ops *, uint8_t *, size_t) = cryptmain;
|
||||||
|
uint8_t md[SHA384_DIGEST_LENGTH];
|
||||||
|
|
||||||
|
ARGBEGIN {
|
||||||
|
case 'c':
|
||||||
|
cryptfunc = cryptcheck;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
} ARGEND
|
||||||
|
|
||||||
|
ret |= cryptfunc(argc, argv, &sha384_ops, md, sizeof(md));
|
||||||
|
ret |= fshut(stdin, "<stdin>") | fshut(stdout, "<stdout>");
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user