1*e71b7053SJung-uk Kim=pod 2*e71b7053SJung-uk Kim 3*e71b7053SJung-uk Kim=head1 NAME 4*e71b7053SJung-uk Kim 5*e71b7053SJung-uk KimEVP_MD_CTX_new, EVP_MD_CTX_reset, EVP_MD_CTX_free, EVP_MD_CTX_copy_ex, 6*e71b7053SJung-uk KimEVP_MD_CTX_ctrl, EVP_MD_CTX_set_flags, EVP_MD_CTX_clear_flags, 7*e71b7053SJung-uk KimEVP_MD_CTX_test_flags, EVP_DigestInit_ex, EVP_DigestInit, EVP_DigestUpdate, 8*e71b7053SJung-uk KimEVP_DigestFinal_ex, EVP_DigestFinalXOF, EVP_DigestFinal, 9*e71b7053SJung-uk KimEVP_MD_CTX_copy, EVP_MD_type, EVP_MD_pkey_type, EVP_MD_size, 10*e71b7053SJung-uk KimEVP_MD_block_size, EVP_MD_CTX_md, EVP_MD_CTX_size, 11*e71b7053SJung-uk KimEVP_MD_CTX_block_size, EVP_MD_CTX_type, EVP_MD_CTX_md_data, 12*e71b7053SJung-uk KimEVP_md_null, 13*e71b7053SJung-uk KimEVP_get_digestbyname, EVP_get_digestbynid, 14*e71b7053SJung-uk KimEVP_get_digestbyobj, 15*e71b7053SJung-uk KimEVP_MD_CTX_set_pkey_ctx - EVP digest routines 16*e71b7053SJung-uk Kim 17*e71b7053SJung-uk Kim=head1 SYNOPSIS 18*e71b7053SJung-uk Kim 19*e71b7053SJung-uk Kim #include <openssl/evp.h> 20*e71b7053SJung-uk Kim 21*e71b7053SJung-uk Kim EVP_MD_CTX *EVP_MD_CTX_new(void); 22*e71b7053SJung-uk Kim int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); 23*e71b7053SJung-uk Kim void EVP_MD_CTX_free(EVP_MD_CTX *ctx); 24*e71b7053SJung-uk Kim void EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void* p2); 25*e71b7053SJung-uk Kim void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); 26*e71b7053SJung-uk Kim void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); 27*e71b7053SJung-uk Kim int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); 28*e71b7053SJung-uk Kim 29*e71b7053SJung-uk Kim int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); 30*e71b7053SJung-uk Kim int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt); 31*e71b7053SJung-uk Kim int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); 32*e71b7053SJung-uk Kim int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, size_t len); 33*e71b7053SJung-uk Kim 34*e71b7053SJung-uk Kim int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); 35*e71b7053SJung-uk Kim 36*e71b7053SJung-uk Kim int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); 37*e71b7053SJung-uk Kim int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); 38*e71b7053SJung-uk Kim 39*e71b7053SJung-uk Kim int EVP_MD_CTX_copy(EVP_MD_CTX *out, EVP_MD_CTX *in); 40*e71b7053SJung-uk Kim 41*e71b7053SJung-uk Kim int EVP_MD_type(const EVP_MD *md); 42*e71b7053SJung-uk Kim int EVP_MD_pkey_type(const EVP_MD *md); 43*e71b7053SJung-uk Kim int EVP_MD_size(const EVP_MD *md); 44*e71b7053SJung-uk Kim int EVP_MD_block_size(const EVP_MD *md); 45*e71b7053SJung-uk Kim 46*e71b7053SJung-uk Kim const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); 47*e71b7053SJung-uk Kim int EVP_MD_CTX_size(const EVP_MD *ctx); 48*e71b7053SJung-uk Kim int EVP_MD_CTX_block_size(const EVP_MD *ctx); 49*e71b7053SJung-uk Kim int EVP_MD_CTX_type(const EVP_MD *ctx); 50*e71b7053SJung-uk Kim void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx); 51*e71b7053SJung-uk Kim 52*e71b7053SJung-uk Kim const EVP_MD *EVP_md_null(void); 53*e71b7053SJung-uk Kim 54*e71b7053SJung-uk Kim const EVP_MD *EVP_get_digestbyname(const char *name); 55*e71b7053SJung-uk Kim const EVP_MD *EVP_get_digestbynid(int type); 56*e71b7053SJung-uk Kim const EVP_MD *EVP_get_digestbyobj(const ASN1_OBJECT *o); 57*e71b7053SJung-uk Kim 58*e71b7053SJung-uk Kim void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); 59*e71b7053SJung-uk Kim 60*e71b7053SJung-uk Kim=head1 DESCRIPTION 61*e71b7053SJung-uk Kim 62*e71b7053SJung-uk KimThe EVP digest routines are a high level interface to message digests, 63*e71b7053SJung-uk Kimand should be used instead of the cipher-specific functions. 64*e71b7053SJung-uk Kim 65*e71b7053SJung-uk Kim=over 4 66*e71b7053SJung-uk Kim 67*e71b7053SJung-uk Kim=item EVP_MD_CTX_new() 68*e71b7053SJung-uk Kim 69*e71b7053SJung-uk KimAllocates and returns a digest context. 70*e71b7053SJung-uk Kim 71*e71b7053SJung-uk Kim=item EVP_MD_CTX_reset() 72*e71b7053SJung-uk Kim 73*e71b7053SJung-uk KimResets the digest context B<ctx>. This can be used to reuse an already 74*e71b7053SJung-uk Kimexisting context. 75*e71b7053SJung-uk Kim 76*e71b7053SJung-uk Kim=item EVP_MD_CTX_free() 77*e71b7053SJung-uk Kim 78*e71b7053SJung-uk KimCleans up digest context B<ctx> and frees up the space allocated to it. 79*e71b7053SJung-uk Kim 80*e71b7053SJung-uk Kim=item EVP_MD_CTX_ctrl() 81*e71b7053SJung-uk Kim 82*e71b7053SJung-uk KimPerforms digest-specific control actions on context B<ctx>. 83*e71b7053SJung-uk Kim 84*e71b7053SJung-uk Kim=item EVP_MD_CTX_set_flags(), EVP_MD_CTX_clear_flags(), EVP_MD_CTX_test_flags() 85*e71b7053SJung-uk Kim 86*e71b7053SJung-uk KimSets, clears and tests B<ctx> flags. See L</FLAGS> below for more information. 87*e71b7053SJung-uk Kim 88*e71b7053SJung-uk Kim=item EVP_DigestInit_ex() 89*e71b7053SJung-uk Kim 90*e71b7053SJung-uk KimSets up digest context B<ctx> to use a digest B<type> from ENGINE B<impl>. 91*e71b7053SJung-uk KimB<type> will typically be supplied by a function such as EVP_sha1(). If 92*e71b7053SJung-uk KimB<impl> is NULL then the default implementation of digest B<type> is used. 93*e71b7053SJung-uk Kim 94*e71b7053SJung-uk Kim=item EVP_DigestUpdate() 95*e71b7053SJung-uk Kim 96*e71b7053SJung-uk KimHashes B<cnt> bytes of data at B<d> into the digest context B<ctx>. This 97*e71b7053SJung-uk Kimfunction can be called several times on the same B<ctx> to hash additional 98*e71b7053SJung-uk Kimdata. 99*e71b7053SJung-uk Kim 100*e71b7053SJung-uk Kim=item EVP_DigestFinal_ex() 101*e71b7053SJung-uk Kim 102*e71b7053SJung-uk KimRetrieves the digest value from B<ctx> and places it in B<md>. If the B<s> 103*e71b7053SJung-uk Kimparameter is not NULL then the number of bytes of data written (i.e. the 104*e71b7053SJung-uk Kimlength of the digest) will be written to the integer at B<s>, at most 105*e71b7053SJung-uk KimB<EVP_MAX_MD_SIZE> bytes will be written. After calling EVP_DigestFinal_ex() 106*e71b7053SJung-uk Kimno additional calls to EVP_DigestUpdate() can be made, but 107*e71b7053SJung-uk KimEVP_DigestInit_ex() can be called to initialize a new digest operation. 108*e71b7053SJung-uk Kim 109*e71b7053SJung-uk Kim=item EVP_DigestFinalXOF() 110*e71b7053SJung-uk Kim 111*e71b7053SJung-uk KimInterfaces to extendable-output functions, XOFs, such as SHAKE128 and SHAKE256. 112*e71b7053SJung-uk KimIt retrieves the digest value from B<ctx> and places it in B<len>-sized <B>md. 113*e71b7053SJung-uk KimAfter calling this function no additional calls to EVP_DigestUpdate() can be 114*e71b7053SJung-uk Kimmade, but EVP_DigestInit_ex() can be called to initialize a new operation. 115*e71b7053SJung-uk Kim 116*e71b7053SJung-uk Kim=item EVP_MD_CTX_copy_ex() 117*e71b7053SJung-uk Kim 118*e71b7053SJung-uk KimCan be used to copy the message digest state from B<in> to B<out>. This is 119*e71b7053SJung-uk Kimuseful if large amounts of data are to be hashed which only differ in the last 120*e71b7053SJung-uk Kimfew bytes. 121*e71b7053SJung-uk Kim 122*e71b7053SJung-uk Kim=item EVP_DigestInit() 123*e71b7053SJung-uk Kim 124*e71b7053SJung-uk KimBehaves in the same way as EVP_DigestInit_ex() except it always uses the 125*e71b7053SJung-uk Kimdefault digest implementation. 126*e71b7053SJung-uk Kim 127*e71b7053SJung-uk Kim=item EVP_DigestFinal() 128*e71b7053SJung-uk Kim 129*e71b7053SJung-uk KimSimilar to EVP_DigestFinal_ex() except the digest context B<ctx> is 130*e71b7053SJung-uk Kimautomatically cleaned up. 131*e71b7053SJung-uk Kim 132*e71b7053SJung-uk Kim=item EVP_MD_CTX_copy() 133*e71b7053SJung-uk Kim 134*e71b7053SJung-uk KimSimilar to EVP_MD_CTX_copy_ex() except the destination B<out> does not have to 135*e71b7053SJung-uk Kimbe initialized. 136*e71b7053SJung-uk Kim 137*e71b7053SJung-uk Kim=item EVP_MD_size(), 138*e71b7053SJung-uk KimEVP_MD_CTX_size() 139*e71b7053SJung-uk Kim 140*e71b7053SJung-uk KimReturn the size of the message digest when passed an B<EVP_MD> or an 141*e71b7053SJung-uk KimB<EVP_MD_CTX> structure, i.e. the size of the hash. 142*e71b7053SJung-uk Kim 143*e71b7053SJung-uk Kim=item EVP_MD_block_size(), 144*e71b7053SJung-uk KimEVP_MD_CTX_block_size() 145*e71b7053SJung-uk Kim 146*e71b7053SJung-uk KimReturn the block size of the message digest when passed an B<EVP_MD> or an 147*e71b7053SJung-uk KimB<EVP_MD_CTX> structure. 148*e71b7053SJung-uk Kim 149*e71b7053SJung-uk Kim=item EVP_MD_type(), 150*e71b7053SJung-uk KimEVP_MD_CTX_type() 151*e71b7053SJung-uk Kim 152*e71b7053SJung-uk KimReturn the NID of the OBJECT IDENTIFIER representing the given message digest 153*e71b7053SJung-uk Kimwhen passed an B<EVP_MD> structure. For example, C<EVP_MD_type(EVP_sha1())> 154*e71b7053SJung-uk Kimreturns B<NID_sha1>. This function is normally used when setting ASN1 OIDs. 155*e71b7053SJung-uk Kim 156*e71b7053SJung-uk Kim=item EVP_MD_CTX_md_data() 157*e71b7053SJung-uk Kim 158*e71b7053SJung-uk KimReturn the digest method private data for the passed B<EVP_MD_CTX>. 159*e71b7053SJung-uk KimThe space is allocated by OpenSSL and has the size originally set with 160*e71b7053SJung-uk KimEVP_MD_meth_set_app_datasize(). 161*e71b7053SJung-uk Kim 162*e71b7053SJung-uk Kim=item EVP_MD_CTX_md() 163*e71b7053SJung-uk Kim 164*e71b7053SJung-uk KimReturns the B<EVP_MD> structure corresponding to the passed B<EVP_MD_CTX>. 165*e71b7053SJung-uk Kim 166*e71b7053SJung-uk Kim=item EVP_MD_pkey_type() 167*e71b7053SJung-uk Kim 168*e71b7053SJung-uk KimReturns the NID of the public key signing algorithm associated with this 169*e71b7053SJung-uk Kimdigest. For example EVP_sha1() is associated with RSA so this will return 170*e71b7053SJung-uk KimB<NID_sha1WithRSAEncryption>. Since digests and signature algorithms are no 171*e71b7053SJung-uk Kimlonger linked this function is only retained for compatibility reasons. 172*e71b7053SJung-uk Kim 173*e71b7053SJung-uk Kim=item EVP_md_null() 174*e71b7053SJung-uk Kim 175*e71b7053SJung-uk KimA "null" message digest that does nothing: i.e. the hash it returns is of zero 176*e71b7053SJung-uk Kimlength. 177*e71b7053SJung-uk Kim 178*e71b7053SJung-uk Kim=item EVP_get_digestbyname(), 179*e71b7053SJung-uk KimEVP_get_digestbynid(), 180*e71b7053SJung-uk KimEVP_get_digestbyobj() 181*e71b7053SJung-uk Kim 182*e71b7053SJung-uk KimReturns an B<EVP_MD> structure when passed a digest name, a digest B<NID> or an 183*e71b7053SJung-uk KimB<ASN1_OBJECT> structure respectively. 184*e71b7053SJung-uk Kim 185*e71b7053SJung-uk Kim=item EVP_MD_CTX_set_pkey_ctx() 186*e71b7053SJung-uk Kim 187*e71b7053SJung-uk KimAssigns an B<EVP_PKEY_CTX> to B<EVP_MD_CTX>. This is usually used to provide 188*e71b7053SJung-uk Kima customzied B<EVP_PKEY_CTX> to L<EVP_DigestSignInit(3)> or 189*e71b7053SJung-uk KimL<EVP_DigestVerifyInit(3)>. The B<pctx> passed to this function should be freed 190*e71b7053SJung-uk Kimby the caller. A NULL B<pctx> pointer is also allowed to clear the B<EVP_PKEY_CTX> 191*e71b7053SJung-uk Kimassigned to B<ctx>. In such case, freeing the cleared B<EVP_PKEY_CTX> or not 192*e71b7053SJung-uk Kimdepends on how the B<EVP_PKEY_CTX> is created. 193*e71b7053SJung-uk Kim 194*e71b7053SJung-uk Kim=back 195*e71b7053SJung-uk Kim 196*e71b7053SJung-uk Kim=head1 FLAGS 197*e71b7053SJung-uk Kim 198*e71b7053SJung-uk KimEVP_MD_CTX_set_flags(), EVP_MD_CTX_clear_flags() and EVP_MD_CTX_test_flags() 199*e71b7053SJung-uk Kimcan be used the manipulate and test these B<EVP_MD_CTX> flags: 200*e71b7053SJung-uk Kim 201*e71b7053SJung-uk Kim=over 4 202*e71b7053SJung-uk Kim 203*e71b7053SJung-uk Kim=item EVP_MD_CTX_FLAG_ONESHOT 204*e71b7053SJung-uk Kim 205*e71b7053SJung-uk KimThis flag instructs the digest to optimize for one update only, if possible. 206*e71b7053SJung-uk Kim 207*e71b7053SJung-uk Kim=for comment EVP_MD_CTX_FLAG_CLEANED is internal, don't mention it 208*e71b7053SJung-uk Kim 209*e71b7053SJung-uk Kim=for comment EVP_MD_CTX_FLAG_REUSE is internal, don't mention it 210*e71b7053SJung-uk Kim 211*e71b7053SJung-uk Kim=for comment We currently avoid documenting flags that are only bit holder: 212*e71b7053SJung-uk KimEVP_MD_CTX_FLAG_NON_FIPS_ALLOW, EVP_MD_CTX_FLAGS_PAD_* 213*e71b7053SJung-uk Kim 214*e71b7053SJung-uk Kim=item EVP_MD_CTX_FLAG_NO_INIT 215*e71b7053SJung-uk Kim 216*e71b7053SJung-uk KimThis flag instructs EVP_DigestInit() and similar not to initialise the 217*e71b7053SJung-uk Kimimplementation specific data. 218*e71b7053SJung-uk Kim 219*e71b7053SJung-uk Kim=item EVP_MD_CTX_FLAG_FINALISE 220*e71b7053SJung-uk Kim 221*e71b7053SJung-uk KimSome functions such as EVP_DigestSign only finalise copies of internal 222*e71b7053SJung-uk Kimcontexts so additional data can be included after the finalisation call. 223*e71b7053SJung-uk KimThis is inefficient if this functionality is not required, and can be 224*e71b7053SJung-uk Kimdisabled with this flag. 225*e71b7053SJung-uk Kim 226*e71b7053SJung-uk Kim=back 227*e71b7053SJung-uk Kim 228*e71b7053SJung-uk Kim=head1 RETURN VALUES 229*e71b7053SJung-uk Kim 230*e71b7053SJung-uk Kim=over 4 231*e71b7053SJung-uk Kim 232*e71b7053SJung-uk Kim=item EVP_DigestInit_ex(), 233*e71b7053SJung-uk KimEVP_DigestUpdate(), 234*e71b7053SJung-uk KimEVP_DigestFinal_ex() 235*e71b7053SJung-uk Kim 236*e71b7053SJung-uk KimReturns 1 for 237*e71b7053SJung-uk Kimsuccess and 0 for failure. 238*e71b7053SJung-uk Kim 239*e71b7053SJung-uk Kim=item EVP_MD_CTX_ctrl() 240*e71b7053SJung-uk Kim 241*e71b7053SJung-uk KimReturns 1 if successful or 0 for failure. 242*e71b7053SJung-uk Kim 243*e71b7053SJung-uk Kim=item EVP_MD_CTX_copy_ex() 244*e71b7053SJung-uk Kim 245*e71b7053SJung-uk KimReturns 1 if successful or 0 for failure. 246*e71b7053SJung-uk Kim 247*e71b7053SJung-uk Kim=item EVP_MD_type(), 248*e71b7053SJung-uk KimEVP_MD_pkey_type(), 249*e71b7053SJung-uk KimEVP_MD_type() 250*e71b7053SJung-uk Kim 251*e71b7053SJung-uk KimReturns the NID of the corresponding OBJECT IDENTIFIER or NID_undef if none 252*e71b7053SJung-uk Kimexists. 253*e71b7053SJung-uk Kim 254*e71b7053SJung-uk Kim=item EVP_MD_size(), 255*e71b7053SJung-uk KimEVP_MD_block_size(), 256*e71b7053SJung-uk KimEVP_MD_CTX_size(), 257*e71b7053SJung-uk KimEVP_MD_CTX_block_size() 258*e71b7053SJung-uk Kim 259*e71b7053SJung-uk KimReturns the digest or block size in bytes. 260*e71b7053SJung-uk Kim 261*e71b7053SJung-uk Kim=item EVP_md_null() 262*e71b7053SJung-uk Kim 263*e71b7053SJung-uk KimReturns a pointer to the B<EVP_MD> structure of the "null" message digest. 264*e71b7053SJung-uk Kim 265*e71b7053SJung-uk Kim=item EVP_get_digestbyname(), 266*e71b7053SJung-uk KimEVP_get_digestbynid(), 267*e71b7053SJung-uk KimEVP_get_digestbyobj() 268*e71b7053SJung-uk Kim 269*e71b7053SJung-uk KimReturns either an B<EVP_MD> structure or NULL if an error occurs. 270*e71b7053SJung-uk Kim 271*e71b7053SJung-uk Kim=item EVP_MD_CTX_set_pkey_ctx() 272*e71b7053SJung-uk Kim 273*e71b7053SJung-uk KimThis function has no return value. 274*e71b7053SJung-uk Kim 275*e71b7053SJung-uk Kim=back 276*e71b7053SJung-uk Kim 277*e71b7053SJung-uk Kim=head1 NOTES 278*e71b7053SJung-uk Kim 279*e71b7053SJung-uk KimThe B<EVP> interface to message digests should almost always be used in 280*e71b7053SJung-uk Kimpreference to the low level interfaces. This is because the code then becomes 281*e71b7053SJung-uk Kimtransparent to the digest used and much more flexible. 282*e71b7053SJung-uk Kim 283*e71b7053SJung-uk KimNew applications should use the SHA-2 (such as L<EVP_sha256(3)>) or the SHA-3 284*e71b7053SJung-uk Kimdigest algorithms (such as L<EVP_sha3_512(3)>). The other digest algorithms 285*e71b7053SJung-uk Kimare still in common use. 286*e71b7053SJung-uk Kim 287*e71b7053SJung-uk KimFor most applications the B<impl> parameter to EVP_DigestInit_ex() will be 288*e71b7053SJung-uk Kimset to NULL to use the default digest implementation. 289*e71b7053SJung-uk Kim 290*e71b7053SJung-uk KimThe functions EVP_DigestInit(), EVP_DigestFinal() and EVP_MD_CTX_copy() are 291*e71b7053SJung-uk Kimobsolete but are retained to maintain compatibility with existing code. New 292*e71b7053SJung-uk Kimapplications should use EVP_DigestInit_ex(), EVP_DigestFinal_ex() and 293*e71b7053SJung-uk KimEVP_MD_CTX_copy_ex() because they can efficiently reuse a digest context 294*e71b7053SJung-uk Kiminstead of initializing and cleaning it up on each call and allow non default 295*e71b7053SJung-uk Kimimplementations of digests to be specified. 296*e71b7053SJung-uk Kim 297*e71b7053SJung-uk KimIf digest contexts are not cleaned up after use, 298*e71b7053SJung-uk Kimmemory leaks will occur. 299*e71b7053SJung-uk Kim 300*e71b7053SJung-uk KimEVP_MD_CTX_size(), EVP_MD_CTX_block_size(), EVP_MD_CTX_type(), 301*e71b7053SJung-uk KimEVP_get_digestbynid() and EVP_get_digestbyobj() are defined as 302*e71b7053SJung-uk Kimmacros. 303*e71b7053SJung-uk Kim 304*e71b7053SJung-uk KimEVP_MD_CTX_ctrl() sends commands to message digests for additional configuration 305*e71b7053SJung-uk Kimor control. 306*e71b7053SJung-uk Kim 307*e71b7053SJung-uk Kim=head1 EXAMPLE 308*e71b7053SJung-uk Kim 309*e71b7053SJung-uk KimThis example digests the data "Test Message\n" and "Hello World\n", using the 310*e71b7053SJung-uk Kimdigest name passed on the command line. 311*e71b7053SJung-uk Kim 312*e71b7053SJung-uk Kim #include <stdio.h> 313*e71b7053SJung-uk Kim #include <openssl/evp.h> 314*e71b7053SJung-uk Kim 315*e71b7053SJung-uk Kim main(int argc, char *argv[]) 316*e71b7053SJung-uk Kim { 317*e71b7053SJung-uk Kim EVP_MD_CTX *mdctx; 318*e71b7053SJung-uk Kim const EVP_MD *md; 319*e71b7053SJung-uk Kim char mess1[] = "Test Message\n"; 320*e71b7053SJung-uk Kim char mess2[] = "Hello World\n"; 321*e71b7053SJung-uk Kim unsigned char md_value[EVP_MAX_MD_SIZE]; 322*e71b7053SJung-uk Kim int md_len, i; 323*e71b7053SJung-uk Kim 324*e71b7053SJung-uk Kim if (argv[1] == NULL) { 325*e71b7053SJung-uk Kim printf("Usage: mdtest digestname\n"); 326*e71b7053SJung-uk Kim exit(1); 327*e71b7053SJung-uk Kim } 328*e71b7053SJung-uk Kim 329*e71b7053SJung-uk Kim md = EVP_get_digestbyname(argv[1]); 330*e71b7053SJung-uk Kim if (md == NULL) { 331*e71b7053SJung-uk Kim printf("Unknown message digest %s\n", argv[1]); 332*e71b7053SJung-uk Kim exit(1); 333*e71b7053SJung-uk Kim } 334*e71b7053SJung-uk Kim 335*e71b7053SJung-uk Kim mdctx = EVP_MD_CTX_new(); 336*e71b7053SJung-uk Kim EVP_DigestInit_ex(mdctx, md, NULL); 337*e71b7053SJung-uk Kim EVP_DigestUpdate(mdctx, mess1, strlen(mess1)); 338*e71b7053SJung-uk Kim EVP_DigestUpdate(mdctx, mess2, strlen(mess2)); 339*e71b7053SJung-uk Kim EVP_DigestFinal_ex(mdctx, md_value, &md_len); 340*e71b7053SJung-uk Kim EVP_MD_CTX_free(mdctx); 341*e71b7053SJung-uk Kim 342*e71b7053SJung-uk Kim printf("Digest is: "); 343*e71b7053SJung-uk Kim for (i = 0; i < md_len; i++) 344*e71b7053SJung-uk Kim printf("%02x", md_value[i]); 345*e71b7053SJung-uk Kim printf("\n"); 346*e71b7053SJung-uk Kim 347*e71b7053SJung-uk Kim exit(0); 348*e71b7053SJung-uk Kim } 349*e71b7053SJung-uk Kim 350*e71b7053SJung-uk Kim=head1 SEE ALSO 351*e71b7053SJung-uk Kim 352*e71b7053SJung-uk KimL<dgst(1)>, 353*e71b7053SJung-uk KimL<evp(7)> 354*e71b7053SJung-uk Kim 355*e71b7053SJung-uk KimThe full list of digest algorithms are provided below. 356*e71b7053SJung-uk Kim 357*e71b7053SJung-uk KimL<EVP_blake2b512(3)>, 358*e71b7053SJung-uk KimL<EVP_md2(3)>, 359*e71b7053SJung-uk KimL<EVP_md4(3)>, 360*e71b7053SJung-uk KimL<EVP_md5(3)>, 361*e71b7053SJung-uk KimL<EVP_mdc2(3)>, 362*e71b7053SJung-uk KimL<EVP_ripemd160(3)>, 363*e71b7053SJung-uk KimL<EVP_sha1(3)>, 364*e71b7053SJung-uk KimL<EVP_sha224(3)>, 365*e71b7053SJung-uk KimL<EVP_sha3_224(3)>, 366*e71b7053SJung-uk KimL<EVP_sm3(3)>, 367*e71b7053SJung-uk KimL<EVP_whirlpool(3)> 368*e71b7053SJung-uk Kim 369*e71b7053SJung-uk Kim=head1 HISTORY 370*e71b7053SJung-uk Kim 371*e71b7053SJung-uk KimEVP_MD_CTX_create() and EVP_MD_CTX_destroy() were renamed to 372*e71b7053SJung-uk KimEVP_MD_CTX_new() and EVP_MD_CTX_free() in OpenSSL 1.1.0. 373*e71b7053SJung-uk Kim 374*e71b7053SJung-uk KimThe link between digests and signing algorithms was fixed in OpenSSL 1.0 and 375*e71b7053SJung-uk Kimlater, so now EVP_sha1() can be used with RSA and DSA. 376*e71b7053SJung-uk Kim 377*e71b7053SJung-uk KimEVP_dss1() was removed in OpenSSL 1.1.0. 378*e71b7053SJung-uk Kim 379*e71b7053SJung-uk KimEVP_MD_CTX_set_pkey_ctx() was added in 1.1.1. 380*e71b7053SJung-uk Kim 381*e71b7053SJung-uk Kim=head1 COPYRIGHT 382*e71b7053SJung-uk Kim 383*e71b7053SJung-uk KimCopyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. 384*e71b7053SJung-uk Kim 385*e71b7053SJung-uk KimLicensed under the OpenSSL license (the "License"). You may not use 386*e71b7053SJung-uk Kimthis file except in compliance with the License. You can obtain a copy 387*e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at 388*e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>. 389*e71b7053SJung-uk Kim 390*e71b7053SJung-uk Kim=cut 391