4 sha1, sha2_224, sha2_256, sha2_384, sha2_512,
7 hmac_sha1, hmac_sha2_224, hmac_sha2_256, hmac_sha2_384, hmac_sha2_512,
8 md5pickle, md5unpickle,
9 sha1pickle, sha1unpickle \- cryptographically secure hashes
11 .nr Wd \w'\fLDS* \fP'u
12 .nr In \w'\fLDS* \fP'u
13 .ta \n(Wdu \w'\fLSHA1state* \fP'u +\n(Wdu +\n(Wdu +\n(Wdu +\n(Wdu
29 #define DS DigestState /* only to abbreviate SYNOPSIS */
33 DS* md4(uchar *data, ulong dlen, uchar *digest, DS *state)
35 DS* md5(uchar *data, ulong dlen, uchar *digest, DS *state)
38 char* md5pickle(MD5state *state)
41 MD5state* md5unpickle(char *p);
43 DS* sha1(uchar *data, ulong dlen, uchar *digest, DS *state)
46 char* sha1pickle(SHA1state *state)
49 SHA1state* sha1unpickle(char *p);
51 DS* sha2_224(uchar *data, ulong dlen, uchar *digest, DS *state)
53 DS* sha2_256(uchar *data, ulong dlen, uchar *digest, DS *state)
55 DS* sha2_384(uchar *data, ulong dlen, uchar *digest, DS *state)
57 DS* sha2_512(uchar *data, ulong dlen, uchar *digest, DS *state)
59 DS* ripemd160(uchar *data, ulong dlen, uchar *digest, DS *state)
61 DS* poly1305(uchar *p, ulong len, uchar *key, ulong klen, uchar *digest, DS *state)
63 DS* hmac_x(uchar *p, ulong len, uchar *key, ulong klen, uchar *digest, DS *s, DS*(*x)(uchar*, ulong, uchar*, DS*), int xlen)
65 DS* hmac_md5(uchar *data, ulong dlen, uchar *key, ulong klen, uchar *digest, DS *state)
67 DS* hmac_sha1(uchar *data, ulong dlen, uchar *key, ulong klen, uchar *digest, DS *state)
69 DS* hmac_sha2_224(uchar *data, ulong dlen, uchar *key, ulong klen, uchar *digest, DS *state)
71 DS* hmac_sha2_256(uchar *data, ulong dlen, uchar *key, ulong klen, uchar *digest, DS *state)
73 DS* hmac_sha2_384(uchar *data, ulong dlen, uchar *key, ulong klen, uchar *digest, DS *state)
75 DS* hmac_sha2_512(uchar *data, ulong dlen, uchar *key, ulong klen, uchar *digest, DS *state)
78 We support several secure hash functions. The output of a
81 A hash is secure if, given the hashed data and the digest,
82 it is difficult to predict the change to the digest resulting
83 from some change to the data without rehashing
84 the whole data. Therefore, if a secret is part of the hashed
85 data, the digest can be used as an integrity check of the data by anyone
86 possessing the secret.
105 differ only in the length of the resulting digest
106 and in the security of the hash.
110 are the SHA-2 functions; the number after the final underscore
111 is the number of bits in the resulting digest.
112 Usage for each is the same.
113 The first call to the routine should have
117 parameter. This call returns a state which can be used to chain
119 The last call should have digest
122 must point to a buffer of at least the size of the digest produced.
123 This last call will free the state and copy the result into
136 define the lengths of the digests.
145 are used slightly differently. These hash algorithms are keyed and require
146 a key to be specified on every call.
147 The digest lengths for these hashes are the obvious ones from
148 the above list of length constants.
149 These routines all call
153 is not intended for general use.
156 is a one-time authenticator designed by D. J. Bernstein. It takes a 32-byte
157 one-time key and a message and produces a 16-byte tag.
163 marshal the state of a digest for transmission.
167 unmarshal a pickled digest.
168 All four routines return a pointer to a newly
172 To hash a single buffer using
176 uchar digest[MD5dlen];
178 md5(data, len, digest, nil);
181 To chain a number of buffers together,
182 bounded on each end by some secret:
186 uchar digest[MD5dlen];
189 s = md5("my password", 11, nil, nil);
190 while((n = read(fd, buf, 256)) > 0)
192 md5("drowssap ym", 11, digest, s);