aboutsummaryrefslogtreecommitdiffstats
path: root/security/rdigest/pkg-descr
blob: 24faa4026c067fb3161a52c85a220ab046ecd4a7 (plain) (blame)
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
This utility is a wrapper for the md5(3), sha1(3) and rmd160(3)
routines.

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