update rather ancient EVP digest documentation
This commit is contained in:
parent
7fdccda37d
commit
14fa016b2b
@ -6,7 +6,8 @@ EVP_MD_CTX_init, EVP_MD_CTX_create, EVP_DigestInit_ex, EVP_DigestUpdate,
|
|||||||
EVP_DigestFinal_ex, EVP_MD_CTX_cleanup, EVP_MD_CTX_destroy, EVP_MAX_MD_SIZE,
|
EVP_DigestFinal_ex, EVP_MD_CTX_cleanup, EVP_MD_CTX_destroy, EVP_MAX_MD_SIZE,
|
||||||
EVP_MD_CTX_copy_ex, EVP_MD_CTX_copy, EVP_MD_type, EVP_MD_pkey_type, EVP_MD_size,
|
EVP_MD_CTX_copy_ex, EVP_MD_CTX_copy, EVP_MD_type, EVP_MD_pkey_type, EVP_MD_size,
|
||||||
EVP_MD_block_size, EVP_MD_CTX_md, EVP_MD_CTX_size, EVP_MD_CTX_block_size, EVP_MD_CTX_type,
|
EVP_MD_block_size, EVP_MD_CTX_md, EVP_MD_CTX_size, EVP_MD_CTX_block_size, EVP_MD_CTX_type,
|
||||||
EVP_md_null, EVP_md2, EVP_md5, EVP_sha, EVP_sha1, EVP_dss, EVP_dss1, EVP_mdc2,
|
EVP_md_null, EVP_md2, EVP_md5, EVP_sha, EVP_sha1, EVP_sha224, EVP_sha256,
|
||||||
|
EVP_sha384, EVP_sha512, EVP_dss, EVP_dss1, EVP_mdc2,
|
||||||
EVP_ripemd160, EVP_get_digestbyname, EVP_get_digestbynid, EVP_get_digestbyobj -
|
EVP_ripemd160, EVP_get_digestbyname, EVP_get_digestbynid, EVP_get_digestbyobj -
|
||||||
EVP digest routines
|
EVP digest routines
|
||||||
|
|
||||||
@ -33,16 +34,15 @@ EVP digest routines
|
|||||||
|
|
||||||
int EVP_MD_CTX_copy(EVP_MD_CTX *out,EVP_MD_CTX *in);
|
int EVP_MD_CTX_copy(EVP_MD_CTX *out,EVP_MD_CTX *in);
|
||||||
|
|
||||||
#define EVP_MAX_MD_SIZE (16+20) /* The SSLv3 md5+sha1 type */
|
#define EVP_MAX_MD_SIZE 64 /* SHA512 */
|
||||||
|
|
||||||
|
int EVP_MD_type(const EVP_MD *md);
|
||||||
|
int EVP_MD_pkey_type(const EVP_MD *md);
|
||||||
|
int EVP_MD_size(const EVP_MD *md);
|
||||||
|
int EVP_MD_block_size(const EVP_MD *md);
|
||||||
|
|
||||||
#define EVP_MD_type(e) ((e)->type)
|
const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx);
|
||||||
#define EVP_MD_pkey_type(e) ((e)->pkey_type)
|
#define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e))
|
||||||
#define EVP_MD_size(e) ((e)->md_size)
|
|
||||||
#define EVP_MD_block_size(e) ((e)->block_size)
|
|
||||||
|
|
||||||
#define EVP_MD_CTX_md(e) (e)->digest)
|
|
||||||
#define EVP_MD_CTX_size(e) EVP_MD_size((e)->digest)
|
|
||||||
#define EVP_MD_CTX_block_size(e) EVP_MD_block_size((e)->digest)
|
#define EVP_MD_CTX_block_size(e) EVP_MD_block_size((e)->digest)
|
||||||
#define EVP_MD_CTX_type(e) EVP_MD_type((e)->digest)
|
#define EVP_MD_CTX_type(e) EVP_MD_type((e)->digest)
|
||||||
|
|
||||||
@ -56,6 +56,11 @@ EVP digest routines
|
|||||||
const EVP_MD *EVP_mdc2(void);
|
const EVP_MD *EVP_mdc2(void);
|
||||||
const EVP_MD *EVP_ripemd160(void);
|
const EVP_MD *EVP_ripemd160(void);
|
||||||
|
|
||||||
|
const EVP_MD *EVP_sha224(void);
|
||||||
|
const EVP_MD *EVP_sha256(void);
|
||||||
|
const EVP_MD *EVP_sha384(void);
|
||||||
|
const EVP_MD *EVP_sha512(void);
|
||||||
|
|
||||||
const EVP_MD *EVP_get_digestbyname(const char *name);
|
const EVP_MD *EVP_get_digestbyname(const char *name);
|
||||||
#define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a))
|
#define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a))
|
||||||
#define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a))
|
#define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a))
|
||||||
@ -124,12 +129,14 @@ B<EVP_MD_CTX>.
|
|||||||
|
|
||||||
EVP_MD_pkey_type() returns the NID of the public key signing algorithm associated
|
EVP_MD_pkey_type() returns the NID of the public key signing algorithm associated
|
||||||
with this digest. For example EVP_sha1() is associated with RSA so this will
|
with this digest. For example EVP_sha1() is associated with RSA so this will
|
||||||
return B<NID_sha1WithRSAEncryption>. This "link" between digests and signature
|
return B<NID_sha1WithRSAEncryption>. Since digests and signature algorithms
|
||||||
algorithms may not be retained in future versions of OpenSSL.
|
are no longer linked this function is only retained for compatibility
|
||||||
|
reasons.
|
||||||
|
|
||||||
EVP_md2(), EVP_md5(), EVP_sha(), EVP_sha1(), EVP_mdc2() and EVP_ripemd160()
|
EVP_md2(), EVP_md5(), EVP_sha(), EVP_sha1(), EVP_sha224(), EVP_sha256(),
|
||||||
return B<EVP_MD> structures for the MD2, MD5, SHA, SHA1, MDC2 and RIPEMD160 digest
|
EVP_sha384(), EVP_sha512(), EVP_mdc2() and EVP_ripemd160() return B<EVP_MD>
|
||||||
algorithms respectively. The associated signature algorithm is RSA in each case.
|
structures for the MD2, MD5, SHA, SHA1, SHA224, SHA256, SHA384, SHA512, MDC2
|
||||||
|
and RIPEMD160 digest algorithms respectively.
|
||||||
|
|
||||||
EVP_dss() and EVP_dss1() return B<EVP_MD> structures for SHA and SHA1 digest
|
EVP_dss() and EVP_dss1() return B<EVP_MD> structures for SHA and SHA1 digest
|
||||||
algorithms but using DSS (DSA) for the signature algorithm. Note: there is
|
algorithms but using DSS (DSA) for the signature algorithm. Note: there is
|
||||||
@ -171,8 +178,8 @@ The B<EVP> interface to message digests should almost always be used in
|
|||||||
preference to the low level interfaces. This is because the code then becomes
|
preference to the low level interfaces. This is because the code then becomes
|
||||||
transparent to the digest used and much more flexible.
|
transparent to the digest used and much more flexible.
|
||||||
|
|
||||||
SHA1 is the digest of choice for new applications. The other digest algorithms
|
New applications should use the SHA2 digest algorithms such as SHA256.
|
||||||
are still in common use.
|
The other digest algorithms are still in common use.
|
||||||
|
|
||||||
For most applications the B<impl> parameter to EVP_DigestInit_ex() will be
|
For most applications the B<impl> parameter to EVP_DigestInit_ex() will be
|
||||||
set to NULL to use the default digest implementation.
|
set to NULL to use the default digest implementation.
|
||||||
@ -187,6 +194,19 @@ implementations of digests to be specified.
|
|||||||
In OpenSSL 0.9.7 and later if digest contexts are not cleaned up after use
|
In OpenSSL 0.9.7 and later if digest contexts are not cleaned up after use
|
||||||
memory leaks will occur.
|
memory leaks will occur.
|
||||||
|
|
||||||
|
Stack allocation of EVP_MD_CTX structures is common, for example:
|
||||||
|
|
||||||
|
EVP_MD_CTX mctx;
|
||||||
|
EVP_MD_CTX_init(&mctx);
|
||||||
|
|
||||||
|
This will cause binary compatibility issues if the size of EVP_MD_CTX
|
||||||
|
structure changes (this will only happen with a major release of OpenSSL).
|
||||||
|
Applications wishing to avoid this should use EVP_MD_CTX_create() instead:
|
||||||
|
|
||||||
|
EVP_MD_CTX *mctx;
|
||||||
|
mctx = EVP_MD_CTX_create();
|
||||||
|
|
||||||
|
|
||||||
=head1 EXAMPLE
|
=head1 EXAMPLE
|
||||||
|
|
||||||
This example digests the data "Test Message\n" and "Hello World\n", using the
|
This example digests the data "Test Message\n" and "Hello World\n", using the
|
||||||
@ -197,7 +217,7 @@ digest name passed on the command line.
|
|||||||
|
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
EVP_MD_CTX mdctx;
|
EVP_MD_CTX *mdctx;
|
||||||
const EVP_MD *md;
|
const EVP_MD *md;
|
||||||
char mess1[] = "Test Message\n";
|
char mess1[] = "Test Message\n";
|
||||||
char mess2[] = "Hello World\n";
|
char mess2[] = "Hello World\n";
|
||||||
@ -218,12 +238,12 @@ digest name passed on the command line.
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
EVP_MD_CTX_init(&mdctx);
|
mdctx = EVP_MD_CTX_create();
|
||||||
EVP_DigestInit_ex(&mdctx, md, NULL);
|
EVP_DigestInit_ex(mdctx, md, NULL);
|
||||||
EVP_DigestUpdate(&mdctx, mess1, strlen(mess1));
|
EVP_DigestUpdate(mdctx, mess1, strlen(mess1));
|
||||||
EVP_DigestUpdate(&mdctx, mess2, strlen(mess2));
|
EVP_DigestUpdate(mdctx, mess2, strlen(mess2));
|
||||||
EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
|
EVP_DigestFinal_ex(mdctx, md_value, &md_len);
|
||||||
EVP_MD_CTX_cleanup(&mdctx);
|
EVP_MD_CTX_destroy(mdctx);
|
||||||
|
|
||||||
printf("Digest is: ");
|
printf("Digest is: ");
|
||||||
for(i = 0; i < md_len; i++) printf("%02x", md_value[i]);
|
for(i = 0; i < md_len; i++) printf("%02x", md_value[i]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user