summaryrefslogtreecommitdiff
path: root/pkgtools/rdigest/DESCR
blob: fec28fe43cac654c456ccc465a77cf0058a2700c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
This utility is a wrapper for the md5(3), sha1(3) and rmd160(3)
routines.

The utility is linked statically, so that it can be used without any
shared libraries installed on the system.

It is remarkably similar to the digest package, except that it
can recursively checksum directory trees.

While a simple checksum on a tar file is usually satisfactory, once
said archive has been extracted, it is virtually impossible to
repackage the extracted tree in a form that can yield a repeatable
checksum.  To be specific, changes in timestamps and ownership, and
changes in file ordering within directories can affect the checksum of
the archive, while not really impacting the actual code at all.

The algorithm used to checksum a directory in this implementation is
as follows:

	cd into directory
	initialize MASTER_HASH
	walk directory tree, sorting all entries
	foreach entry
		if it is a directory:
			skip it if it is named "RCS", "CVS", or "SCCS"
			initialize SLAVE_HASH
			add the string "d " into SLAVE_HASH
			add the pathname of the directory into SLAVE_HASH
			finish SLAVE_HASH
			fold the hexified SLAVE_HASH result into MASTER_HASH
		if it is a file:
			initialize SLAVE_HASH
			add the string "f " into SLAVE_HASH
			add the pathname of the file into SLAVE_HASH
			finish SLAVE_HASH
			fold the hexified SLAVE_HASH result into MASTER_HASH
			initialize SLAVE_HASH
			add the contents of the file into SLAVE_HASH
			finish SLAVE_HASH
			fold the hexified SLAVE_HASH result into MASTER_HASH
		if it is a symbolic link
			initialize SLAVE_HASH
			add the string "l " into SLAVE_HASH
			add the pathname of the link into SLAVE_HASH
			finish SLAVE_HASH
			fold the hexified SLAVE_HASH result into MASTER_HASH
			initialize SLAVE_HASH
			add the contents of the link into SLAVE_HASH
			finish SLAVE_HASH
			fold the hexified SLAVE_HASH result into MASTER_HASH