NAME
EVP_MD_CTX_ctrl
,
EVP_MD_CTX_set_flags
,
EVP_MD_CTX_clear_flags
,
EVP_MD_CTX_test_flags
,
EVP_MD_CTX_pkey_ctx
,
EVP_MD_CTX_set_pkey_ctx
,
EVP_MD_CTX_md_data
—
configure EVP message digest
contexts
SYNOPSIS
#include
<openssl/evp.h>
int
EVP_MD_CTX_ctrl
(EVP_MD_CTX *ctx,
int command, int p1,
void* p2);
void
EVP_MD_CTX_set_flags
(EVP_MD_CTX
*ctx, int flags);
void
EVP_MD_CTX_clear_flags
(EVP_MD_CTX
*ctx, int flags);
int
EVP_MD_CTX_test_flags
(const EVP_MD_CTX
*ctx, int flags);
EVP_PKEY_CTX *
EVP_MD_CTX_pkey_ctx
(const EVP_MD_CTX
*ctx);
void
EVP_MD_CTX_set_pkey_ctx
(EVP_MD_CTX
*ctx, EVP_PKEY_CTX *pctx);
void *
EVP_MD_CTX_md_data
(const EVP_MD_CTX
*ctx);
DESCRIPTION
EVP_MD_CTX_ctrl
()
performs the digest-specific control command with the
command-specific arguments p1 and
p2 on ctx, which needs to
already be set up with
EVP_DigestInit_ex(3) before calling this function. Other
restrictions may apply depending on the control
command and digest implementation.
If the command is
EVP_MD_CTRL_MICALG
, p1 is
ignored and p2 is an output argument of the type
char **p2. A string specifying the digest Message
Integrity Check algorithm is allocated and a pointer to this string is
returned in *p2. It is the responsibility of the
caller to free(3) *p2 when it is no longer needed. This
command is used by
SMIME_write_ASN1(3) when creating S/MIME multipart/signed
messages as specified in RFC 3851.
EVP_MD_CTX_set_flags
()
sets and
EVP_MD_CTX_clear_flags
()
clears all the flag bits in ctx that are set in the
flags argument.
EVP_MD_CTX_test_flags
()
tests which of the flag bits that are set in the flags
argument are also set in ctx. Possible flag bits
are:
EVP_MD_CTX_FLAG_NO_INIT
- Instruct EVP_DigestInit_ex(3) and functions calling it not to initialise the internal data that is specific to the digest method and its implementation.
EVP_MD_CTX_FLAG_ONESHOT
- Instruct the digest to optimize for one update only, if possible. For digest algorithms built into the library, this flag usually has no effect.
EVP_MD_CTX_pkey_ctx
()
returns the EVP_PKEY_CTX assigned to
ctx. The returned pointer should not be freed by the
caller.
EVP_MD_CTX_set_pkey_ctx
()
assigns pctx to ctx. This is
normally used to provide a customized EVP_PKEY_CTX to
EVP_DigestSignInit(3) or
EVP_DigestVerifyInit(3). The caller retains ownership of the
pctx passed to this function and is responsible for
freeing it when it is no longer needed.
If the ctx
already contains a EVP_PKEY_CTX when this function is
called, that old EVP_PKEY_CTX is freed if it was
created internally, but if it was also installed with
EVP_MD_CTX_set_pkey_ctx
(),
the pointer to the old EVP_PKEY_CTX is merely replaced
by the new pointer and ownership of the old
EVP_PKEY_CTX remains with the previous caller.
Passing a NULL
pointer for the
pctx argument is also allowed. In that case, any
EVP_PKEY_CTX already assigned to
ctx is dissociated from it as described above, but no
new EVP_PKEY_CTX is assigned.
EVP_MD_CTX_md_data
()
returns the digest method private data of ctx. The
space is allocated with a size determined at compile time. The size is not
exposed by an API.
RETURN VALUES
EVP_MD_CTX_ctrl
() returns 1 for success or
0 for failure.
EVP_MD_CTX_test_flags
() returns the
bitwise OR of the flags argument and the flags set in
ctx.
EVP_MD_CTX_pkey_ctx
() and
EVP_MD_CTX_md_data
() return pointers to storage
owned by ctx.
SEE ALSO
HISTORY
EVP_MD_CTX_set_flags
(),
EVP_MD_CTX_clear_flags
(), and
EVP_MD_CTX_test_flags
(), first appeared in OpenSSL
0.9.7 and have been available since OpenBSD 3.2.
EVP_MD_CTX_ctrl
() first appeared in
OpenSSL 1.1.0 and has been available since OpenBSD
5.7.
EVP_MD_CTX_pkey_ctx
() and
EVP_MD_CTX_md_data
() first appeared in OpenSSL 1.1.0
and EVP_MD_CTX_set_pkey_ctx
() in OpenSSL 1.1.1.
These functions have been available since OpenBSD
7.1.