Blame


1 cfa37a7b 2004-04-10 devnull .TH SECHASH 3
2 cfa37a7b 2004-04-10 devnull .SH NAME
3 cfa37a7b 2004-04-10 devnull md4, md5, sha1, hmac_md5, hmac_sha1, md5pickle, md5unpickle, sha1pickle, sha1unpickle \- cryptographically secure hashes
4 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
5 cfa37a7b 2004-04-10 devnull .B #include <u.h>
6 cfa37a7b 2004-04-10 devnull .br
7 cfa37a7b 2004-04-10 devnull .B #include <libc.h>
8 cfa37a7b 2004-04-10 devnull .br
9 cfa37a7b 2004-04-10 devnull .B #include <mp.h>
10 cfa37a7b 2004-04-10 devnull .br
11 cfa37a7b 2004-04-10 devnull .B #include <libsec.h>
12 cfa37a7b 2004-04-10 devnull .PP
13 cfa37a7b 2004-04-10 devnull .B
14 cfa37a7b 2004-04-10 devnull DigestState* md4(uchar *data, ulong dlen, uchar *digest,
15 cfa37a7b 2004-04-10 devnull .B
16 c8b6342d 2005-01-13 devnull DigestState *state)
17 cfa37a7b 2004-04-10 devnull .PP
18 cfa37a7b 2004-04-10 devnull .B
19 cfa37a7b 2004-04-10 devnull DigestState* md5(uchar *data, ulong dlen, uchar *digest,
20 cfa37a7b 2004-04-10 devnull .B
21 c8b6342d 2005-01-13 devnull DigestState *state)
22 cfa37a7b 2004-04-10 devnull .PP
23 cfa37a7b 2004-04-10 devnull .B
24 cfa37a7b 2004-04-10 devnull char* md5pickle(MD5state *state)
25 cfa37a7b 2004-04-10 devnull .PP
26 cfa37a7b 2004-04-10 devnull .B
27 c8b6342d 2005-01-13 devnull MD5state* md5unpickle(char *p);
28 cfa37a7b 2004-04-10 devnull .PP
29 cfa37a7b 2004-04-10 devnull .B
30 cfa37a7b 2004-04-10 devnull DigestState* sha1(uchar *data, ulong dlen, uchar *digest,
31 cfa37a7b 2004-04-10 devnull .B
32 c8b6342d 2005-01-13 devnull DigestState *state)
33 cfa37a7b 2004-04-10 devnull .PP
34 cfa37a7b 2004-04-10 devnull .B
35 cfa37a7b 2004-04-10 devnull char* sha1pickle(MD5state *state)
36 cfa37a7b 2004-04-10 devnull .PP
37 cfa37a7b 2004-04-10 devnull .B
38 c8b6342d 2005-01-13 devnull MD5state* sha1unpickle(char *p);
39 cfa37a7b 2004-04-10 devnull .PP
40 cfa37a7b 2004-04-10 devnull .B
41 cfa37a7b 2004-04-10 devnull DigestState* hmac_md5(uchar *data, ulong dlen,
42 cfa37a7b 2004-04-10 devnull .br
43 cfa37a7b 2004-04-10 devnull .B
44 c8b6342d 2005-01-13 devnull uchar *key, ulong klen,
45 cfa37a7b 2004-04-10 devnull .br
46 cfa37a7b 2004-04-10 devnull .B
47 c8b6342d 2005-01-13 devnull uchar *digest, DigestState *state)
48 cfa37a7b 2004-04-10 devnull .PP
49 cfa37a7b 2004-04-10 devnull .B
50 cfa37a7b 2004-04-10 devnull DigestState* hmac_sha1(uchar *data, ulong dlen,
51 cfa37a7b 2004-04-10 devnull .br
52 cfa37a7b 2004-04-10 devnull .B
53 c8b6342d 2005-01-13 devnull uchar *key, ulong klen,
54 cfa37a7b 2004-04-10 devnull .br
55 cfa37a7b 2004-04-10 devnull .B
56 c8b6342d 2005-01-13 devnull uchar *digest, DigestState *state)
57 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
58 cfa37a7b 2004-04-10 devnull .PP
59 c8b6342d 2005-01-13 devnull These functions implement
60 c8b6342d 2005-01-13 devnull the cryptographic hash functions MD4, MD5, and SHA1. The output of the
61 cfa37a7b 2004-04-10 devnull hash is called a
62 cfa37a7b 2004-04-10 devnull .IR digest .
63 cfa37a7b 2004-04-10 devnull A hash is secure if, given the hashed data and the digest,
64 cfa37a7b 2004-04-10 devnull it is difficult to predict the change to the digest resulting
65 cfa37a7b 2004-04-10 devnull from some change to the data without rehashing
66 cfa37a7b 2004-04-10 devnull the whole data. Therefore, if a secret is part of the hashed
67 cfa37a7b 2004-04-10 devnull data, the digest can be used as an integrity check of the data by anyone
68 cfa37a7b 2004-04-10 devnull possessing the secret.
69 cfa37a7b 2004-04-10 devnull .PP
70 cfa37a7b 2004-04-10 devnull The routines
71 cfa37a7b 2004-04-10 devnull .IR md4 ,
72 cfa37a7b 2004-04-10 devnull .IR md5 ,
73 cfa37a7b 2004-04-10 devnull .IR sha1 ,
74 cfa37a7b 2004-04-10 devnull .IR hmac_md5 ,
75 cfa37a7b 2004-04-10 devnull and
76 cfa37a7b 2004-04-10 devnull .I hmac_sha1
77 cfa37a7b 2004-04-10 devnull differ only in the length of the resulting digest
78 cfa37a7b 2004-04-10 devnull and in the security of the hash. Usage for each is the same.
79 cfa37a7b 2004-04-10 devnull The first call to the routine should have
80 cfa37a7b 2004-04-10 devnull .B nil
81 cfa37a7b 2004-04-10 devnull as the
82 cfa37a7b 2004-04-10 devnull .I state
83 cfa37a7b 2004-04-10 devnull parameter. This call returns a state which can be used to chain
84 cfa37a7b 2004-04-10 devnull subsequent calls.
85 cfa37a7b 2004-04-10 devnull The last call should have digest non-\fBnil\fR.
86 cfa37a7b 2004-04-10 devnull .I Digest
87 cfa37a7b 2004-04-10 devnull must point to a buffer of at least the size of the digest produced.
88 cfa37a7b 2004-04-10 devnull This last call will free the state and copy the result into
89 cfa37a7b 2004-04-10 devnull .IR digest .
90 cfa37a7b 2004-04-10 devnull For example, to hash a single buffer using
91 cfa37a7b 2004-04-10 devnull .IR md5 :
92 cfa37a7b 2004-04-10 devnull .EX
93 cfa37a7b 2004-04-10 devnull
94 cfa37a7b 2004-04-10 devnull uchar digest[MD5dlen];
95 cfa37a7b 2004-04-10 devnull
96 cfa37a7b 2004-04-10 devnull md5(data, len, digest, nil);
97 cfa37a7b 2004-04-10 devnull .EE
98 cfa37a7b 2004-04-10 devnull .PP
99 cfa37a7b 2004-04-10 devnull To chain a number of buffers together,
100 cfa37a7b 2004-04-10 devnull bounded on each end by some secret:
101 cfa37a7b 2004-04-10 devnull .EX
102 cfa37a7b 2004-04-10 devnull
103 cfa37a7b 2004-04-10 devnull char buf[256];
104 cfa37a7b 2004-04-10 devnull uchar digest[MD5dlen];
105 cfa37a7b 2004-04-10 devnull DigestState *s;
106 cfa37a7b 2004-04-10 devnull
107 cfa37a7b 2004-04-10 devnull s = md5("my password", 11, nil, nil);
108 cfa37a7b 2004-04-10 devnull while((n = read(fd, buf, 256)) > 0)
109 cfa37a7b 2004-04-10 devnull md5(buf, n, nil, s);
110 cfa37a7b 2004-04-10 devnull md5("drowssap ym", 11, digest, s);
111 cfa37a7b 2004-04-10 devnull .EE
112 cfa37a7b 2004-04-10 devnull .PP
113 cfa37a7b 2004-04-10 devnull The constants
114 cfa37a7b 2004-04-10 devnull .IR MD4dlen ,
115 cfa37a7b 2004-04-10 devnull .IR MD5dlen ,
116 cfa37a7b 2004-04-10 devnull and
117 cfa37a7b 2004-04-10 devnull .I SHA1dlen
118 cfa37a7b 2004-04-10 devnull define the lengths of the digests.
119 cfa37a7b 2004-04-10 devnull .PP
120 cfa37a7b 2004-04-10 devnull .I Hmac_md5
121 cfa37a7b 2004-04-10 devnull and
122 cfa37a7b 2004-04-10 devnull .I hmac_sha1
123 cfa37a7b 2004-04-10 devnull are used slightly differently. These hash algorithms are keyed and require
124 cfa37a7b 2004-04-10 devnull a key to be specified on every call.
125 cfa37a7b 2004-04-10 devnull The digest lengths for these hashes are
126 cfa37a7b 2004-04-10 devnull .I MD5dlen
127 cfa37a7b 2004-04-10 devnull and
128 cfa37a7b 2004-04-10 devnull .I SHA1dlen
129 cfa37a7b 2004-04-10 devnull respectively.
130 cfa37a7b 2004-04-10 devnull .PP
131 cfa37a7b 2004-04-10 devnull The functions
132 cfa37a7b 2004-04-10 devnull .I md5pickle
133 cfa37a7b 2004-04-10 devnull and
134 cfa37a7b 2004-04-10 devnull .I sha1pickle
135 cfa37a7b 2004-04-10 devnull marshal the state of a digest for transmission.
136 cfa37a7b 2004-04-10 devnull .I Md5unpickle
137 cfa37a7b 2004-04-10 devnull and
138 cfa37a7b 2004-04-10 devnull .I sha1unpickle
139 cfa37a7b 2004-04-10 devnull unmarshal a pickled digest.
140 cfa37a7b 2004-04-10 devnull All four routines return a pointer to a newly
141 d32deab1 2020-08-16 rsc .MR malloc (3) 'd
142 cfa37a7b 2004-04-10 devnull object.
143 cfa37a7b 2004-04-10 devnull .SH SOURCE
144 c3674de4 2005-01-11 devnull .B \*9/src/libsec
145 cfa37a7b 2004-04-10 devnull .SH SEE ALSO
146 d32deab1 2020-08-16 rsc .MR aes (3) ,
147 d32deab1 2020-08-16 rsc .MR blowfish (3) ,
148 d32deab1 2020-08-16 rsc .MR des (3) ,
149 d32deab1 2020-08-16 rsc .MR elgamal (3) ,
150 d32deab1 2020-08-16 rsc .MR rc4 (3) ,
151 d32deab1 2020-08-16 rsc .MR rsa (3)