Signature Computation

There are two fields in a chunk signature: hash and block length. Given a chunk, the hash MUST be the MD4 hash [RFC1320] of the data in the chunk, and the block length MUST be the number of bytes in the chunk. Because the block length is an unsigned 16-bit integer, all chunks MUST be less than or equal to 216-1 bytes in length. Recall that the signatures comprise the data in the signature file.

The following diagram illustrates signature computation.

RDC signature computation

Figure 2: RDC signature computation

Thus, the set of signatures is specified by the following.

Note Subscripts are expressed with parentheses (for example, "boundaryi" would be expressed as "boundary(i)").

 Let there be N chunks (0,1,... N-1) defined on a file of size n
 FOR each chunk consisting of bytes from
   boundary(i) to boundary(i+1)-1    -(Initial Chunks where i < N-1)
   boundary(i) to n                  -(Terminal Chunk where i = N-1)
     IF (Terminal Chunk)
         Signature Hash(i) :=
             MD4 of File[boundary(i)] ... File[n-1]
         Signature block Length(i) := n - boundary(i)
         Signature Hash(i) :=
             MD4 of File[boundary(i)] ... File[boundary(i+1)-1]
         Signature block Length(i) := boundary(i+1) - boundary(i)