Let's disect this function call:
void sha256(struct sha256 *sha, const void *p, size_t size)
First we realize that the return value is void
which means the function does not return the sha256 of the data. However we see that the first argument struct sha256 *sha
is a pointer to a sha256 struct
with the name sha
. This suggests that the pointer that we pass to the function will afterwards contain the computed hash.
The second argument const void *p
is a constant void pointer. This means that the function does not care about the data type of the data for which it computes the hash and it will not be able to modify the memory to which the pointer points to. This makes sense when we want to compute the hash of some data we don't want this data to be changed. Also computing the hash is a binary operation which is possible on the binary representation of any datatype.
This brings us to the third argument size_t size
which is supposed to be the size of the data the second argument points to. I assume there is somewhere a typedef
statement defining size_t
as an integer. As the second argument is just a pointer to the data struct for which to compute the hash the function needs to know how much memory to process.