X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fbn%2Fbn_recp.c;h=e1919e3ce68586a863603bc5a57a09c90022ec08;hp=c1b0e230ea270193be9633a14c35e548dfec85e3;hb=9b141126d4b6f0636bc047e81b846c193ae26611;hpb=7e708ebee066d0308a335579b546326220dc8317;ds=sidebyside diff --git a/crypto/bn/bn_recp.c b/crypto/bn/bn_recp.c index c1b0e230ea..e1919e3ce6 100644 --- a/crypto/bn/bn_recp.c +++ b/crypto/bn/bn_recp.c @@ -106,7 +106,8 @@ int BN_mod_mul_reciprocal(BIGNUM *r, BIGNUM *x, BIGNUM *y, BN_RECP_CTX *recp, int ret=0; BIGNUM *a; - a= &(ctx->bn[ctx->tos++]); + BN_CTX_start(ctx); + if ((a = BN_CTX_get(ctx)) == NULL) goto err; if (y != NULL) { if (x == y) @@ -120,33 +121,34 @@ int BN_mod_mul_reciprocal(BIGNUM *r, BIGNUM *x, BIGNUM *y, BN_RECP_CTX *recp, BN_div_recp(NULL,r,a,recp,ctx); ret=1; err: - ctx->tos--; + BN_CTX_end(ctx); return(ret); } int BN_div_recp(BIGNUM *dv, BIGNUM *rem, BIGNUM *m, BN_RECP_CTX *recp, BN_CTX *ctx) { - int i,j,tos,ret=0,ex; + int i,j,ret=0,ex; BIGNUM *a,*b,*d,*r; - tos=ctx->tos; - a= &(ctx->bn[ctx->tos++]); - b= &(ctx->bn[ctx->tos++]); + BN_CTX_start(ctx); + a=BN_CTX_get(ctx); + b=BN_CTX_get(ctx); if (dv != NULL) d=dv; else - d= &(ctx->bn[ctx->tos++]); + d=BN_CTX_get(ctx); if (rem != NULL) r=rem; else - r= &(ctx->bn[ctx->tos++]); + r=BN_CTX_get(ctx); + if (a == NULL || b == NULL || d == NULL || r == NULL) goto err; if (BN_ucmp(m,&(recp->N)) < 0) { BN_zero(d); BN_copy(r,m); - ctx->tos=tos; + BN_CTX_end(ctx); return(1); } @@ -200,7 +202,7 @@ int BN_div_recp(BIGNUM *dv, BIGNUM *rem, BIGNUM *m, BN_RECP_CTX *recp, d->neg=m->neg^recp->N.neg; ret=1; err: - ctx->tos=tos; + BN_CTX_end(ctx); return(ret); }