Hide BN_CTX structure details.
[openssl.git] / crypto / engine / engine_openssl.c
index 9636f51..b8d9075 100644 (file)
@@ -72,7 +72,7 @@
 /* This is the only function we need to implement as OpenSSL
  * doesn't have a native CRT mod_exp. Perhaps this should be
  * BN_mod_exp_crt and moved into crypto/bn/ ?? ... dunno. */
-static int openssl_mod_exp_crt(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
+static int openssl_mod_exp_crt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
                const BIGNUM *q, const BIGNUM *dmp1, const BIGNUM *dmq1,
                const BIGNUM *iqmp, BN_CTX *ctx);
 
@@ -112,7 +112,7 @@ ENGINE *ENGINE_openssl()
        }
 
 /* Chinese Remainder Theorem, taken and adapted from rsa_eay.c */
-static int openssl_mod_exp_crt(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
+static int openssl_mod_exp_crt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
                        const BIGNUM *q, const BIGNUM *dmp1,
                        const BIGNUM *dmq1, const BIGNUM *iqmp, BN_CTX *ctx)
        {
@@ -129,6 +129,7 @@ static int openssl_mod_exp_crt(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
        BN_init(&r1);
        /* BN_mul() cannot accept const BIGNUMs so I use the BN_CTX
         * to duplicate what I need. <sigh> */
+       BN_CTX_start(bn_ctx);
        if ((temp_bn = BN_CTX_get(bn_ctx)) == NULL) goto err;
        if (!BN_copy(temp_bn, iqmp)) goto err;
  
@@ -166,8 +167,7 @@ static int openssl_mod_exp_crt(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
 err:
        BN_clear_free(&m1);
        BN_clear_free(&r1);
-       if (temp_bn)
-               bn_ctx->tos--;
+       BN_CTX_end(ctx);
        if (!ctx)
                BN_CTX_free(bn_ctx);
        return(ret);