Blame


1 bc7cb1a1 2003-11-23 devnull #include <u.h>
2 bc7cb1a1 2003-11-23 devnull #include <libc.h>
3 bc7cb1a1 2003-11-23 devnull #include <bio.h>
4 bc7cb1a1 2003-11-23 devnull #include <libsec.h>
5 bc7cb1a1 2003-11-23 devnull
6 bc7cb1a1 2003-11-23 devnull static int
7 bc7cb1a1 2003-11-23 devnull digestfmt(Fmt *fmt)
8 bc7cb1a1 2003-11-23 devnull {
9 bc7cb1a1 2003-11-23 devnull char buf[SHA1dlen*2+1];
10 bc7cb1a1 2003-11-23 devnull uchar *p;
11 bc7cb1a1 2003-11-23 devnull int i;
12 bc7cb1a1 2003-11-23 devnull
13 bc7cb1a1 2003-11-23 devnull p = va_arg(fmt->args, uchar*);
14 bc7cb1a1 2003-11-23 devnull for(i=0; i<SHA1dlen; i++)
15 bc7cb1a1 2003-11-23 devnull sprint(buf+2*i, "%.2ux", p[i]);
16 bc7cb1a1 2003-11-23 devnull return fmtstrcpy(fmt, buf);
17 bc7cb1a1 2003-11-23 devnull }
18 bc7cb1a1 2003-11-23 devnull
19 bc7cb1a1 2003-11-23 devnull static void
20 bc7cb1a1 2003-11-23 devnull sum(int fd, char *name)
21 bc7cb1a1 2003-11-23 devnull {
22 bc7cb1a1 2003-11-23 devnull int n;
23 bc7cb1a1 2003-11-23 devnull uchar buf[8192], digest[SHA1dlen];
24 bc7cb1a1 2003-11-23 devnull DigestState *s;
25 bc7cb1a1 2003-11-23 devnull
26 bc7cb1a1 2003-11-23 devnull s = sha1(nil, 0, nil, nil);
27 bc7cb1a1 2003-11-23 devnull while((n = read(fd, buf, sizeof buf)) > 0)
28 bc7cb1a1 2003-11-23 devnull sha1(buf, n, nil, s);
29 bc7cb1a1 2003-11-23 devnull sha1(nil, 0, digest, s);
30 bc7cb1a1 2003-11-23 devnull if(name == nil)
31 bc7cb1a1 2003-11-23 devnull print("%M\n", digest);
32 bc7cb1a1 2003-11-23 devnull else
33 bc7cb1a1 2003-11-23 devnull print("%M\t%s\n", digest, name);
34 bc7cb1a1 2003-11-23 devnull }
35 bc7cb1a1 2003-11-23 devnull
36 bc7cb1a1 2003-11-23 devnull void
37 bc7cb1a1 2003-11-23 devnull main(int argc, char *argv[])
38 bc7cb1a1 2003-11-23 devnull {
39 bc7cb1a1 2003-11-23 devnull int i, fd;
40 bc7cb1a1 2003-11-23 devnull
41 bc7cb1a1 2003-11-23 devnull ARGBEGIN{
42 bc7cb1a1 2003-11-23 devnull default:
43 bc7cb1a1 2003-11-23 devnull fprint(2, "usage: sha1sum [file...]\n");
44 bc7cb1a1 2003-11-23 devnull exits("usage");
45 bc7cb1a1 2003-11-23 devnull }ARGEND
46 bc7cb1a1 2003-11-23 devnull
47 bc7cb1a1 2003-11-23 devnull fmtinstall('M', digestfmt);
48 bc7cb1a1 2003-11-23 devnull
49 bc7cb1a1 2003-11-23 devnull if(argc == 0)
50 bc7cb1a1 2003-11-23 devnull sum(0, nil);
51 bc7cb1a1 2003-11-23 devnull else for(i = 0; i < argc; i++){
52 bc7cb1a1 2003-11-23 devnull fd = open(argv[i], OREAD);
53 bc7cb1a1 2003-11-23 devnull if(fd < 0){
54 bc7cb1a1 2003-11-23 devnull fprint(2, "sha1sum: can't open %s: %r\n", argv[i]);
55 bc7cb1a1 2003-11-23 devnull continue;
56 bc7cb1a1 2003-11-23 devnull }
57 bc7cb1a1 2003-11-23 devnull sum(fd, argv[i]);
58 bc7cb1a1 2003-11-23 devnull close(fd);
59 bc7cb1a1 2003-11-23 devnull }
60 bc7cb1a1 2003-11-23 devnull exits(nil);
61 bc7cb1a1 2003-11-23 devnull }