/*!
    \ingroup openSSL
    
    \brief This function performs the following math “r = (a^p) % m”.
    
    \return SSL_SUCCESS On successfully performing math operation.
    \return SSL_FAILURE If an error case was encountered.
    
    \param r structure to hold result.
    \param a value to be raised by a power.
    \param p power to raise a by.
    \param m modulus to use.
    \param ctx currently not used with wolfSSL can be NULL.
    
    _Example_
    \code
    WOLFSSL_BIGNUM r,a,p,m;
    int ret;
    // set big number values
    ret  = wolfSSL_BN_mod_exp(r, a, p, m, NULL);
    // check ret value
    \endcode
    
    \sa wolfSSL_BN_new
    \sa wolfSSL_BN_free
*/
WOLFSSL_API int wolfSSL_BN_mod_exp(WOLFSSL_BIGNUM *r, const WOLFSSL_BIGNUM *a,
        const WOLFSSL_BIGNUM *p, const WOLFSSL_BIGNUM *m, WOLFSSL_BN_CTX *ctx);
