EVP_MD_CTX_CTRL(3) Library Functions Manual EVP_MD_CTX_CTRL(3) 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 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 evp(3), EVP_DigestInit(3), EVP_MD_nid(3) 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. Linux 6.8.2-arch2-1 March 5, 2024 Linux 6.8.2-arch2-1