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