static int test_expmodzero()
{
    BIGNUM *zero = BN_new();
    BIGNUM *a = BN_new();
    BIGNUM *r = BN_new();
    int st = 0;

    if (zero == NULL || a == NULL || r == NULL || !BN_rand(a, 1024, 0, 0))
        goto err;
    BN_zero(zero);

    if (!BN_mod_exp(r, a, zero, BN_value_one(), NULL)
            || !BN_is_zero(r)
            || !BN_mod_exp_mont(r, a, zero, BN_value_one(), NULL, NULL)
            || !BN_is_zero(r)
            || !BN_mod_exp_mont_consttime(r, a, zero, BN_value_one(), NULL, NULL)
            || !BN_is_zero(r)
            || !BN_mod_exp_mont_word(r, 42, zero, BN_value_one(), NULL, NULL)
            || !BN_is_zero(r))
        goto err;

    st = 1;
err:
    BN_free(zero);
    BN_free(a);
    BN_free(r);
    return st;
}