Document EVP digest operations.
[openssl.git] / doc / crypto / EVP_DigestInit.pod
1 =pod
2
3 =head1 NAME
4
5 EVP_DigestInit, EVP_DigestUpdate, EVP_DigestFinal - EVP digest routines
6
7 =head1 SYNOPSIS
8
9  #include <openssl/evp.h>
10
11  void EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
12  void EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d, unsigned int cnt);
13  void EVP_DigestFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
14
15  #define EVP_MAX_MD_SIZE (16+20) /* The SSLv3 md5+sha1 type */
16
17  int EVP_MD_CTX_copy(EVP_MD_CTX *out,EVP_MD_CTX *in);  
18
19  #define EVP_MD_type(e)                 ((e)->type)
20  #define EVP_MD_pkey_type(e)            ((e)->pkey_type)
21  #define EVP_MD_size(e)                 ((e)->md_size)
22  #define EVP_MD_block_size(e)           ((e)->block_size)
23
24  #define EVP_MD_CTX_size(e)             EVP_MD_size((e)->digest)
25  #define EVP_MD_CTX_block_size(e)       EVP_MD_block_size((e)->digest)
26  #define EVP_MD_CTX_type(e)             ((e)->digest)
27
28  EVP_MD *EVP_md_null(void);
29  EVP_MD *EVP_md2(void);
30  EVP_MD *EVP_md5(void);
31  EVP_MD *EVP_sha(void);
32  EVP_MD *EVP_sha1(void);
33  EVP_MD *EVP_dss(void);
34  EVP_MD *EVP_dss1(void);
35  EVP_MD *EVP_mdc2(void);
36  EVP_MD *EVP_ripemd160(void);
37
38  const EVP_MD *EVP_get_digestbyname(const char *name);
39  #define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a))
40  #define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a))
41
42 =head1 DESCRIPTION
43
44 The EVP digest routines are a high level interface to message digests.
45
46 B<EVP_DigestInit()> initialises a digest context B<ctx> to use a digest
47 B<type>: this will typically be supplied by a function such as
48 B<EVP_sha1()>.
49
50 B<EVP_DigestUpdate()> hashes B<cnt> bytes of data at B<d> into the
51 digest context B<ctx>. This funtion can be called several times on the
52 same B<ctx> to hash additional data.
53
54 B<EVP_DigestFinal()> retrieves the digest value from B<ctx> and places
55 it in B<md>. If the B<s> parameter is not NULL then the number of
56 bytes of data written (i.e. the length of the digest) will be written
57 to the integer at B<s>, at most B<EVP_MAX_MD_SIZE> bytes will be written.
58 After calling B<EVP_DigestFinal> no additional calls to B<EVP_DigestUpdate>
59 can be made, but B<EVP_DigestInit> can be called to initialiase a new
60 digest operation.
61
62 B<EVP_MD_CTX_copy> can be used to copy the message digest state from
63 B<in> to B<out>. This is useful if large amounts of data are to be
64 hashed which only differ in the last few bytes.
65
66 B<EVP_MD_size> and B<EVP_MD_CTX_size> return the size of the message digest
67 when passed an B<EVP_MD> or an B<EVP_MD_CTX> structure, i.e. the size of the
68 hash.
69
70 B<EVP_MD_block_size> and B<EVP_MD_CTX_block_size> return the block size of the
71 message digest when passed an B<EVP_MD> or an B<EVP_MD_CTX> structure.
72
73 B<EVP_MD_type> and B<EVP_MD_CTX_type> return the NID of the OBJECT IDENTIFIER
74 representing the given message digest when passed an B<EVP_MD> structure.
75 For example B<EVP_MD_type(EVP_sha1())> returns B<NID_sha1>. This function is
76 normally used when setting ASN1 OIDs.
77
78 B<EVP_MD_CTX_type> return the B<EVP_MD> structure corresponding to the passed
79 B<EVP_MD_CTX>.
80
81 B<EVP_MD_pkey_type> returns the NID of the public key signing algorithm associated
82 with this digest. For example B<EVP_sha1()> is associated with RSA so this will
83 return B<NID_sha1WithRSAEncryption>. This "link" between digests and signature
84 algorithms may not be retained in future versions of OpenSSL.
85
86 B<EVP_md2>, B<EVP_md5>, B<EVP_sha>, B<EVP_sha1>, B<EVP_mdc2> and B<EVP_ripemd160>
87 return B<EVP_MD> structures for the MD2, MD5, SHA, SHA1, MDC2 and RIPEMD160 digest
88 algorithms respectively. The associated signature algorithm is RSA in each case.
89
90 B<EVP_dss> and B<EVP_dss1> return B<EVP_MD> structures for SHA and SHA1 digest
91 algorithms but using DSS (DSA) for the signature algorithm.
92
93 B<EVP_md_null> is a "null" message digest that does nothing: i.e. the hash it
94 returns is of zero length.
95
96 B<EVP_get_digestbyname>, B<EVP_get_digestbynid> and B<EVP_get_digestbyobj>
97 return an B<EVP_MD> structure when passed a digest name, a digest NID or
98 and ASN1_OBJECT structure respectively. The digest table must be initialised
99 using, for example, B<OpenSSL_add_all_digests()> for these functions to work.
100
101 =head1 RETURN VALUES
102
103 EVP_DigestInit(), EVP_DigestUpdate() and EVP_DigestFinal() do not return values.
104
105 EVP_MD_CTX_copy() returns 1 if successful or 0 for failure.
106
107 EVP_MD_type(), EVP_MD_pkey_type() and EVP_MD_type() return the NID of the
108 corresponding OBJECT IDENTIFIER or NID_undef if none exists.
109
110 EVP_MD_size(), EVP_MD_block_size(), EVP_MD_CTX_size(e), EVP_MD_size(),
111 EVP_MD_CTX_block_size() and EVP_MD_block_size() return the digest or block
112 size in bytes.
113
114 EVP_md_null(), EVP_MD *EVP_md2(), EVP_MD *EVP_md5(), EVP_MD *EVP_sha(),
115 EVP_sha1(), EVP_dss(), EVP_dss1(), EVP_mdc2() and EVP_ripemd160() return
116 pointers to the corresponding EVP_MD structures.
117
118 B<EVP_get_digestbyname>, B<EVP_get_digestbynid> and B<EVP_get_digestbyobj>
119 return either an B<EVP_MD> structure or NULL if an error occurs.
120
121 =head1 NOTES
122
123 The B<EVP> interface to message digests should almost always be used in
124 preference to the low level interfaces. This is because the code then becomes
125 transparent to the digest used and much more flexible.
126
127 SHA1 is the digest of choice for new applications. The other digest algorithms
128 are still in common use.
129
130 =head1 EXAMPLE
131
132 This example digests the data "Test Message\n" and "Hello World\n", using the
133 digest name passed on the command line.
134
135  #include <stdio.h>
136  #include <openssl/evp.h>
137
138  main(int argc, char *argv[])
139  {
140  EVP_MD_CTX mdctx;
141  const EVP_MD *md;
142  char mess1[] = "Test Message\n";
143  char mess2[] = "Hello World\n";
144  unsigned char md_value[EVP_MAX_MD_SIZE];
145  int md_len, i;
146
147  OpenSSL_add_all_digests();
148
149  if(!argv[1]) {
150         printf("Usage: mdtest digestname\n");
151         exit(1);
152  }
153
154  md = EVP_get_digestbyname(argv[1]);
155
156  if(!md) {
157         printf("Unknown message digest %s\n", argv[1]);
158         exit(1);
159  }
160
161  EVP_DigestInit(&mdctx, md);
162  EVP_DigestUpdate(&mdctx, mess1, strlen(mess1));
163  EVP_DigestUpdate(&mdctx, mess2, strlen(mess2));
164  EVP_DigestFinal(&mdctx, md_value, &md_len);
165
166  printf("Digest is: ");
167  for(i = 0; i < md_len; i++) printf("%02x", md_value[i]);
168  printf("\n");
169  }
170
171 =head1 BUGS
172
173 B<EVP_MD_CTX_type> is not a good name because its name wrongly implies it does
174 the same as B<EVP_MD_type> but takes an B<EVP_MD_CTX> parameter instead.
175
176 Several of the functions do not return values: maybe they should. Although the
177 internal digest operations will never fail some future hardware based operations
178 might.
179
180 The link between digests and signing algorithms results in a situation where
181 B<EVP_sha1()> must be used with RSA and B<EVP_dss1()> must be used with DSS
182 even though they are identical digests.
183
184 The size of an B<EVP_MD_CTX> structure is determined at compile time: this results
185 in code that must be recompiled if the size of B<EVP_MD_CTX> increases.
186
187 =head1 SEE ALSO
188
189 =head1 HISTORY
190
191 =cut