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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
.Dd $Mdocdate: November 3 2016 $
.Dt MD5 3
.Os
.Sh NAME
.Nm MD2 ,
.Nm MD4 ,
.Nm MD5 ,
.Nm MD2_Init ,
.Nm MD2_Update ,
.Nm MD2_Final ,
.Nm MD4_Init ,
.Nm MD4_Update ,
.Nm MD4_Final ,
.Nm MD5_Init ,
.Nm MD5_Update ,
.Nm MD5_Final
.Nd MD2, MD4, and MD5 hash functions
.Sh SYNOPSIS
.In openssl/md2.h
.Ft unsigned char *
.Fo MD2
.Fa "const unsigned char *d"
.Fa "unsigned long n"
.Fa "unsigned char *md"
.Fc
.Ft int
.Fo MD2_Init
.Fa "MD2_CTX *c"
.Fc
.Ft int
.Fo MD2_Update
.Fa "MD2_CTX *c"
.Fa "const unsigned char *data"
.Fa "unsigned long len"
.Fc
.Ft int
.Fo MD2_Final
.Fa "unsigned char *md"
.Fa "MD2_CTX *c"
.Fc
.In openssl/md4.h
.Ft unsigned char *
.Fo MD4
.Fa "const unsigned char *d"
.Fa "unsigned long n"
.Fa "unsigned char *md"
.Fc
.Ft int
.Fo MD4_Init
.Fa "MD4_CTX *c"
.Fc
.Ft int
.Fo MD4_Update
.Fa "MD4_CTX *c"
.Fa "const void *data"
.Fa "unsigned long len"
.Fc
.Ft int
.Fo MD4_Final
.Fa "unsigned char *md"
.Fa "MD4_CTX *c"
.Fc
.In openssl/md5.h
.Ft unsigned char *
.Fo MD5
.Fa "const unsigned char *d"
.Fa "unsigned long n"
.Fa "unsigned char *md"
.Fc
.Ft int
.Fo MD5_Init
.Fa "MD5_CTX *c"
.Fc
.Ft int
.Fo MD5_Update
.Fa "MD5_CTX *c"
.Fa "const void *data"
.Fa "unsigned long len"
.Fc
.Ft int
.Fo MD5_Final
.Fa "unsigned char *md"
.Fa "MD5_CTX *c"
.Fc
.Sh DESCRIPTION
MD2, MD4, and MD5 are cryptographic hash functions with a 128 bit
output.
.Pp
.Fn MD2 ,
.Fn MD4 ,
and
.Fn MD5
compute the MD2, MD4, and MD5 message digest of the
.Fa n
bytes at
.Fa d
and place it in
.Fa md ,
which must have space for
.Dv MD2_DIGEST_LENGTH No ==
.Dv MD4_DIGEST_LENGTH No ==
.Dv MD5_DIGEST_LENGTH No == 16
bytes of output.
If
.Fa md
is
.Dv NULL ,
the digest is placed in a static array.
.Pp
The following functions may be used if the message is not completely
stored in memory:
.Pp
.Fn MD2_Init
initializes a
.Vt MD2_CTX
structure.
.Pp
.Fn MD2_Update
can be called repeatedly with chunks of the message to be hashed
.Pq Fa len No bytes at Fa data .
.Pp
.Fn MD2_Final
places the message digest in
.Fa md ,
which must have space for
.Dv MD2_DIGEST_LENGTH No == 16
bytes of output, and erases the
.Vt MD2_CTX .
.Pp
.Fn MD4_Init ,
.Fn MD4_Update ,
.Fn MD4_Final ,
.Fn MD5_Init ,
.Fn MD5_Update ,
and
.Fn MD5_Final
are analogous using an
.Vt MD4_CTX
and
.Vt MD5_CTX
structure.
.Pp
Applications should use the higher level functions
.Xr EVP_DigestInit 3
etc. instead of calling these hash functions directly.
.Sh RETURN VALUES
.Fn MD2 ,
.Fn MD4 ,
and
.Fn MD5
return pointers to the hash value.
.Pp
.Fn MD2_Init ,
.Fn MD2_Update ,
.Fn MD2_Final ,
.Fn MD4_Init ,
.Fn MD4_Update ,
.Fn MD4_Final ,
.Fn MD5_Init ,
.Fn MD5_Update ,
and
.Fn MD5_Final
return 1 for success or 0 otherwise.
.Sh SEE ALSO
.Xr EVP_DigestInit 3
.Sh STANDARDS
RFC 1319, RFC 1320, RFC 1321
.Sh HISTORY
.Fn MD2 ,
.Fn MD2_Init ,
.Fn MD2_Update ,
.Fn MD2_Final ,
.Fn MD5 ,
.Fn MD5_Init ,
.Fn MD5_Update ,
and
.Fn MD5_Final
are available in all versions of SSLeay and OpenSSL.
.Pp
.Fn MD4 ,
.Fn MD4_Init ,
and
.Fn MD4_Update
are available in OpenSSL 0.9.6 and above.
|