xref: /onnv-gate/usr/src/common/openssl/doc/crypto/EVP_DigestInit.pod (revision 2175:b0b2f052a486)
1*2175Sjp161948=pod
2*2175Sjp161948
3*2175Sjp161948=head1 NAME
4*2175Sjp161948
5*2175Sjp161948EVP_MD_CTX_init, EVP_MD_CTX_create, EVP_DigestInit_ex, EVP_DigestUpdate,
6*2175Sjp161948EVP_DigestFinal_ex, EVP_MD_CTX_cleanup, EVP_MD_CTX_destroy, EVP_MAX_MD_SIZE,
7*2175Sjp161948EVP_MD_CTX_copy_ex, EVP_MD_CTX_copy, EVP_MD_type, EVP_MD_pkey_type, EVP_MD_size,
8*2175Sjp161948EVP_MD_block_size, EVP_MD_CTX_md, EVP_MD_CTX_size, EVP_MD_CTX_block_size, EVP_MD_CTX_type,
9*2175Sjp161948EVP_md_null, EVP_md2, EVP_md5, EVP_sha, EVP_sha1, EVP_dss, EVP_dss1, EVP_mdc2,
10*2175Sjp161948EVP_ripemd160, EVP_get_digestbyname, EVP_get_digestbynid, EVP_get_digestbyobj -
11*2175Sjp161948EVP digest routines
12*2175Sjp161948
13*2175Sjp161948=head1 SYNOPSIS
14*2175Sjp161948
15*2175Sjp161948 #include <openssl/evp.h>
16*2175Sjp161948
17*2175Sjp161948 void EVP_MD_CTX_init(EVP_MD_CTX *ctx);
18*2175Sjp161948 EVP_MD_CTX *EVP_MD_CTX_create(void);
19*2175Sjp161948
20*2175Sjp161948 int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
21*2175Sjp161948 int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt);
22*2175Sjp161948 int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md,
23*2175Sjp161948        unsigned int *s);
24*2175Sjp161948
25*2175Sjp161948 int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx);
26*2175Sjp161948 void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);
27*2175Sjp161948
28*2175Sjp161948 int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out,const EVP_MD_CTX *in);
29*2175Sjp161948
30*2175Sjp161948 int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
31*2175Sjp161948 int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md,
32*2175Sjp161948        unsigned int *s);
33*2175Sjp161948
34*2175Sjp161948 int EVP_MD_CTX_copy(EVP_MD_CTX *out,EVP_MD_CTX *in);
35*2175Sjp161948
36*2175Sjp161948 #define EVP_MAX_MD_SIZE (16+20) /* The SSLv3 md5+sha1 type */
37*2175Sjp161948
38*2175Sjp161948
39*2175Sjp161948 #define EVP_MD_type(e)			((e)->type)
40*2175Sjp161948 #define EVP_MD_pkey_type(e)		((e)->pkey_type)
41*2175Sjp161948 #define EVP_MD_size(e)			((e)->md_size)
42*2175Sjp161948 #define EVP_MD_block_size(e)		((e)->block_size)
43*2175Sjp161948
44*2175Sjp161948 #define EVP_MD_CTX_md(e)		(e)->digest)
45*2175Sjp161948 #define EVP_MD_CTX_size(e)		EVP_MD_size((e)->digest)
46*2175Sjp161948 #define EVP_MD_CTX_block_size(e)	EVP_MD_block_size((e)->digest)
47*2175Sjp161948 #define EVP_MD_CTX_type(e)		EVP_MD_type((e)->digest)
48*2175Sjp161948
49*2175Sjp161948 const EVP_MD *EVP_md_null(void);
50*2175Sjp161948 const EVP_MD *EVP_md2(void);
51*2175Sjp161948 const EVP_MD *EVP_md5(void);
52*2175Sjp161948 const EVP_MD *EVP_sha(void);
53*2175Sjp161948 const EVP_MD *EVP_sha1(void);
54*2175Sjp161948 const EVP_MD *EVP_dss(void);
55*2175Sjp161948 const EVP_MD *EVP_dss1(void);
56*2175Sjp161948 const EVP_MD *EVP_mdc2(void);
57*2175Sjp161948 const EVP_MD *EVP_ripemd160(void);
58*2175Sjp161948
59*2175Sjp161948 const EVP_MD *EVP_get_digestbyname(const char *name);
60*2175Sjp161948 #define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a))
61*2175Sjp161948 #define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a))
62*2175Sjp161948
63*2175Sjp161948=head1 DESCRIPTION
64*2175Sjp161948
65*2175Sjp161948The EVP digest routines are a high level interface to message digests.
66*2175Sjp161948
67*2175Sjp161948EVP_MD_CTX_init() initializes digest contet B<ctx>.
68*2175Sjp161948
69*2175Sjp161948EVP_MD_CTX_create() allocates, initializes and returns a digest contet.
70*2175Sjp161948
71*2175Sjp161948EVP_DigestInit_ex() sets up digest context B<ctx> to use a digest
72*2175Sjp161948B<type> from ENGINE B<impl>. B<ctx> must be initialized before calling this
73*2175Sjp161948function. B<type> will typically be supplied by a functionsuch as EVP_sha1().
74*2175Sjp161948If B<impl> is NULL then the default implementation of digest B<type> is used.
75*2175Sjp161948
76*2175Sjp161948EVP_DigestUpdate() hashes B<cnt> bytes of data at B<d> into the
77*2175Sjp161948digest context B<ctx>. This function can be called several times on the
78*2175Sjp161948same B<ctx> to hash additional data.
79*2175Sjp161948
80*2175Sjp161948EVP_DigestFinal_ex() retrieves the digest value from B<ctx> and places
81*2175Sjp161948it in B<md>. If the B<s> parameter is not NULL then the number of
82*2175Sjp161948bytes of data written (i.e. the length of the digest) will be written
83*2175Sjp161948to the integer at B<s>, at most B<EVP_MAX_MD_SIZE> bytes will be written.
84*2175Sjp161948After calling EVP_DigestFinal_ex() no additional calls to EVP_DigestUpdate()
85*2175Sjp161948can be made, but EVP_DigestInit_ex() can be called to initialize a new
86*2175Sjp161948digest operation.
87*2175Sjp161948
88*2175Sjp161948EVP_MD_CTX_cleanup() cleans up digest context B<ctx>, it should be called
89*2175Sjp161948after a digest context is no longer needed.
90*2175Sjp161948
91*2175Sjp161948EVP_MD_CTX_destroy() cleans up digest context B<ctx> and frees up the
92*2175Sjp161948space allocated to it, it should be called only on a context created
93*2175Sjp161948using EVP_MD_CTX_create().
94*2175Sjp161948
95*2175Sjp161948EVP_MD_CTX_copy_ex() can be used to copy the message digest state from
96*2175Sjp161948B<in> to B<out>. This is useful if large amounts of data are to be
97*2175Sjp161948hashed which only differ in the last few bytes. B<out> must be initialized
98*2175Sjp161948before calling this function.
99*2175Sjp161948
100*2175Sjp161948EVP_DigestInit() behaves in the same way as EVP_DigestInit_ex() except
101*2175Sjp161948the passed context B<ctx> does not have to be initialized, and it always
102*2175Sjp161948uses the default digest implementation.
103*2175Sjp161948
104*2175Sjp161948EVP_DigestFinal() is similar to EVP_DigestFinal_ex() except the digest
105*2175Sjp161948contet B<ctx> is automatically cleaned up.
106*2175Sjp161948
107*2175Sjp161948EVP_MD_CTX_copy() is similar to EVP_MD_CTX_copy_ex() except the destination
108*2175Sjp161948B<out> does not have to be initialized.
109*2175Sjp161948
110*2175Sjp161948EVP_MD_size() and EVP_MD_CTX_size() return the size of the message digest
111*2175Sjp161948when passed an B<EVP_MD> or an B<EVP_MD_CTX> structure, i.e. the size of the
112*2175Sjp161948hash.
113*2175Sjp161948
114*2175Sjp161948EVP_MD_block_size() and EVP_MD_CTX_block_size() return the block size of the
115*2175Sjp161948message digest when passed an B<EVP_MD> or an B<EVP_MD_CTX> structure.
116*2175Sjp161948
117*2175Sjp161948EVP_MD_type() and EVP_MD_CTX_type() return the NID of the OBJECT IDENTIFIER
118*2175Sjp161948representing the given message digest when passed an B<EVP_MD> structure.
119*2175Sjp161948For example EVP_MD_type(EVP_sha1()) returns B<NID_sha1>. This function is
120*2175Sjp161948normally used when setting ASN1 OIDs.
121*2175Sjp161948
122*2175Sjp161948EVP_MD_CTX_md() returns the B<EVP_MD> structure corresponding to the passed
123*2175Sjp161948B<EVP_MD_CTX>.
124*2175Sjp161948
125*2175Sjp161948EVP_MD_pkey_type() returns the NID of the public key signing algorithm associated
126*2175Sjp161948with this digest. For example EVP_sha1() is associated with RSA so this will
127*2175Sjp161948return B<NID_sha1WithRSAEncryption>. This "link" between digests and signature
128*2175Sjp161948algorithms may not be retained in future versions of OpenSSL.
129*2175Sjp161948
130*2175Sjp161948EVP_md2(), EVP_md5(), EVP_sha(), EVP_sha1(), EVP_mdc2() and EVP_ripemd160()
131*2175Sjp161948return B<EVP_MD> structures for the MD2, MD5, SHA, SHA1, MDC2 and RIPEMD160 digest
132*2175Sjp161948algorithms respectively. The associated signature algorithm is RSA in each case.
133*2175Sjp161948
134*2175Sjp161948EVP_dss() and EVP_dss1() return B<EVP_MD> structures for SHA and SHA1 digest
135*2175Sjp161948algorithms but using DSS (DSA) for the signature algorithm.
136*2175Sjp161948
137*2175Sjp161948EVP_md_null() is a "null" message digest that does nothing: i.e. the hash it
138*2175Sjp161948returns is of zero length.
139*2175Sjp161948
140*2175Sjp161948EVP_get_digestbyname(), EVP_get_digestbynid() and EVP_get_digestbyobj()
141*2175Sjp161948return an B<EVP_MD> structure when passed a digest name, a digest NID or
142*2175Sjp161948an ASN1_OBJECT structure respectively. The digest table must be initialized
143*2175Sjp161948using, for example, OpenSSL_add_all_digests() for these functions to work.
144*2175Sjp161948
145*2175Sjp161948=head1 RETURN VALUES
146*2175Sjp161948
147*2175Sjp161948EVP_DigestInit_ex(), EVP_DigestUpdate() and EVP_DigestFinal_ex() return 1 for
148*2175Sjp161948success and 0 for failure.
149*2175Sjp161948
150*2175Sjp161948EVP_MD_CTX_copy_ex() returns 1 if successful or 0 for failure.
151*2175Sjp161948
152*2175Sjp161948EVP_MD_type(), EVP_MD_pkey_type() and EVP_MD_type() return the NID of the
153*2175Sjp161948corresponding OBJECT IDENTIFIER or NID_undef if none exists.
154*2175Sjp161948
155*2175Sjp161948EVP_MD_size(), EVP_MD_block_size(), EVP_MD_CTX_size(e), EVP_MD_size(),
156*2175Sjp161948EVP_MD_CTX_block_size()	and EVP_MD_block_size() return the digest or block
157*2175Sjp161948size in bytes.
158*2175Sjp161948
159*2175Sjp161948EVP_md_null(), EVP_md2(), EVP_md5(), EVP_sha(), EVP_sha1(), EVP_dss(),
160*2175Sjp161948EVP_dss1(), EVP_mdc2() and EVP_ripemd160() return pointers to the
161*2175Sjp161948corresponding EVP_MD structures.
162*2175Sjp161948
163*2175Sjp161948EVP_get_digestbyname(), EVP_get_digestbynid() and EVP_get_digestbyobj()
164*2175Sjp161948return either an B<EVP_MD> structure or NULL if an error occurs.
165*2175Sjp161948
166*2175Sjp161948=head1 NOTES
167*2175Sjp161948
168*2175Sjp161948The B<EVP> interface to message digests should almost always be used in
169*2175Sjp161948preference to the low level interfaces. This is because the code then becomes
170*2175Sjp161948transparent to the digest used and much more flexible.
171*2175Sjp161948
172*2175Sjp161948SHA1 is the digest of choice for new applications. The other digest algorithms
173*2175Sjp161948are still in common use.
174*2175Sjp161948
175*2175Sjp161948For most applications the B<impl> parameter to EVP_DigestInit_ex() will be
176*2175Sjp161948set to NULL to use the default digest implementation.
177*2175Sjp161948
178*2175Sjp161948The functions EVP_DigestInit(), EVP_DigestFinal() and EVP_MD_CTX_copy() are
179*2175Sjp161948obsolete but are retained to maintain compatibility with existing code. New
180*2175Sjp161948applications should use EVP_DigestInit_ex(), EVP_DigestFinal_ex() and
181*2175Sjp161948EVP_MD_CTX_copy_ex() because they can efficiently reuse a digest context
182*2175Sjp161948instead of initializing and cleaning it up on each call and allow non default
183*2175Sjp161948implementations of digests to be specified.
184*2175Sjp161948
185*2175Sjp161948In OpenSSL 0.9.7 and later if digest contexts are not cleaned up after use
186*2175Sjp161948memory leaks will occur.
187*2175Sjp161948
188*2175Sjp161948=head1 EXAMPLE
189*2175Sjp161948
190*2175Sjp161948This example digests the data "Test Message\n" and "Hello World\n", using the
191*2175Sjp161948digest name passed on the command line.
192*2175Sjp161948
193*2175Sjp161948 #include <stdio.h>
194*2175Sjp161948 #include <openssl/evp.h>
195*2175Sjp161948
196*2175Sjp161948 main(int argc, char *argv[])
197*2175Sjp161948 {
198*2175Sjp161948 EVP_MD_CTX mdctx;
199*2175Sjp161948 const EVP_MD *md;
200*2175Sjp161948 char mess1[] = "Test Message\n";
201*2175Sjp161948 char mess2[] = "Hello World\n";
202*2175Sjp161948 unsigned char md_value[EVP_MAX_MD_SIZE];
203*2175Sjp161948 int md_len, i;
204*2175Sjp161948
205*2175Sjp161948 OpenSSL_add_all_digests();
206*2175Sjp161948
207*2175Sjp161948 if(!argv[1]) {
208*2175Sjp161948 	printf("Usage: mdtest digestname\n");
209*2175Sjp161948	exit(1);
210*2175Sjp161948 }
211*2175Sjp161948
212*2175Sjp161948 md = EVP_get_digestbyname(argv[1]);
213*2175Sjp161948
214*2175Sjp161948 if(!md) {
215*2175Sjp161948 	printf("Unknown message digest %s\n", argv[1]);
216*2175Sjp161948	exit(1);
217*2175Sjp161948 }
218*2175Sjp161948
219*2175Sjp161948 EVP_MD_CTX_init(&mdctx);
220*2175Sjp161948 EVP_DigestInit_ex(&mdctx, md, NULL);
221*2175Sjp161948 EVP_DigestUpdate(&mdctx, mess1, strlen(mess1));
222*2175Sjp161948 EVP_DigestUpdate(&mdctx, mess2, strlen(mess2));
223*2175Sjp161948 EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
224*2175Sjp161948 EVP_MD_CTX_cleanup(&mdctx);
225*2175Sjp161948
226*2175Sjp161948 printf("Digest is: ");
227*2175Sjp161948 for(i = 0; i < md_len; i++) printf("%02x", md_value[i]);
228*2175Sjp161948 printf("\n");
229*2175Sjp161948 }
230*2175Sjp161948
231*2175Sjp161948=head1 BUGS
232*2175Sjp161948
233*2175Sjp161948The link between digests and signing algorithms results in a situation where
234*2175Sjp161948EVP_sha1() must be used with RSA and EVP_dss1() must be used with DSS
235*2175Sjp161948even though they are identical digests.
236*2175Sjp161948
237*2175Sjp161948=head1 SEE ALSO
238*2175Sjp161948
239*2175Sjp161948L<evp(3)|evp(3)>, L<hmac(3)|hmac(3)>, L<md2(3)|md2(3)>,
240*2175Sjp161948L<md5(3)|md5(3)>, L<mdc2(3)|mdc2(3)>, L<ripemd(3)|ripemd(3)>,
241*2175Sjp161948L<sha(3)|sha(3)>, L<dgst(1)|dgst(1)>
242*2175Sjp161948
243*2175Sjp161948=head1 HISTORY
244*2175Sjp161948
245*2175Sjp161948EVP_DigestInit(), EVP_DigestUpdate() and EVP_DigestFinal() are
246*2175Sjp161948available in all versions of SSLeay and OpenSSL.
247*2175Sjp161948
248*2175Sjp161948EVP_MD_CTX_init(), EVP_MD_CTX_create(), EVP_MD_CTX_copy_ex(),
249*2175Sjp161948EVP_MD_CTX_cleanup(), EVP_MD_CTX_destroy(), EVP_DigestInit_ex()
250*2175Sjp161948and EVP_DigestFinal_ex() were added in OpenSSL 0.9.7.
251*2175Sjp161948
252*2175Sjp161948EVP_md_null(), EVP_md2(), EVP_md5(), EVP_sha(), EVP_sha1(),
253*2175Sjp161948EVP_dss(), EVP_dss1(), EVP_mdc2() and EVP_ripemd160() were
254*2175Sjp161948changed to return truely const EVP_MD * in OpenSSL 0.9.7.
255*2175Sjp161948
256*2175Sjp161948=cut
257