projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
SPARC assembler pack: fix FIPS linking errors.
[openssl.git]
/
crypto
/
bn
/
bn_recp.c
diff --git
a/crypto/bn/bn_recp.c
b/crypto/bn/bn_recp.c
index 22cbcfc49b7885f5f1a0647c2281b71ccc23a0a6..c086af6d0b58b570447b1be36384e4704c612c89 100644
(file)
--- a/
crypto/bn/bn_recp.c
+++ b/
crypto/bn/bn_recp.c
@@
-56,10
+56,13
@@
* [including the GNU Public Licence.]
*/
* [including the GNU Public Licence.]
*/
+#define OPENSSL_FIPSAPI
+
#include <stdio.h>
#include "cryptlib.h"
#include "bn_lcl.h"
#include <stdio.h>
#include "cryptlib.h"
#include "bn_lcl.h"
+
void BN_RECP_CTX_init(BN_RECP_CTX *recp)
{
BN_init(&(recp->N));
void BN_RECP_CTX_init(BN_RECP_CTX *recp)
{
BN_init(&(recp->N));
@@
-94,7
+97,7
@@
void BN_RECP_CTX_free(BN_RECP_CTX *recp)
int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *d, BN_CTX *ctx)
{
if (!BN_copy(&(recp->N),d)) return 0;
int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *d, BN_CTX *ctx)
{
if (!BN_copy(&(recp->N),d)) return 0;
-
if (!BN_zero(&(recp->Nr))) return 0
;
+
BN_zero(&(recp->Nr))
;
recp->num_bits=BN_num_bits(d);
recp->shift=0;
return(1);
recp->num_bits=BN_num_bits(d);
recp->shift=0;
return(1);
@@
-123,6
+126,7
@@
int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y,
ret = BN_div_recp(NULL,r,ca,recp,ctx);
err:
BN_CTX_end(ctx);
ret = BN_div_recp(NULL,r,ca,recp,ctx);
err:
BN_CTX_end(ctx);
+ bn_check_top(r);
return(ret);
}
return(ret);
}
@@
-147,7
+151,7
@@
int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,
if (BN_ucmp(m,&(recp->N)) < 0)
{
if (BN_ucmp(m,&(recp->N)) < 0)
{
-
if (!BN_zero(d)) return 0
;
+
BN_zero(d)
;
if (!BN_copy(r,m)) return 0;
BN_CTX_end(ctx);
return(1);
if (!BN_copy(r,m)) return 0;
BN_CTX_end(ctx);
return(1);
@@
-190,7
+194,7
@@
int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,
{
if (j++ > 2)
{
{
if (j++ > 2)
{
- BNerr(BN_F_BN_
MOD_MUL_RECIPROCAL
,BN_R_BAD_RECIPROCAL);
+ BNerr(BN_F_BN_
DIV_RECP
,BN_R_BAD_RECIPROCAL);
goto err;
}
if (!BN_usub(r,r,&(recp->N))) goto err;
goto err;
}
if (!BN_usub(r,r,&(recp->N))) goto err;
@@
-203,8
+207,8
@@
int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,
ret=1;
err:
BN_CTX_end(ctx);
ret=1;
err:
BN_CTX_end(ctx);
-
if(dv) bn_fix
_top(dv);
-
if(rem) bn_fix
_top(rem);
+
bn_check
_top(dv);
+
bn_check
_top(rem);
return(ret);
}
return(ret);
}
@@
-216,17
+220,18
@@
err:
int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx)
{
int ret= -1;
int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx)
{
int ret= -1;
- BIGNUM t;
+ BIGNUM
*
t;
- BN_init(&t);
+ BN_CTX_start(ctx);
+ if((t = BN_CTX_get(ctx)) == NULL) goto err;
- if (!BN_zero(&t)) goto err;
- if (!BN_set_bit(&t,len)) goto err;
+ if (!BN_set_bit(t,len)) goto err;
- if (!BN_div(r,NULL,
&
t,m,ctx)) goto err;
+ if (!BN_div(r,NULL,t,m,ctx)) goto err;
ret=len;
err:
ret=len;
err:
- BN_free(&t);
+ bn_check_top(r);
+ BN_CTX_end(ctx);
return(ret);
}
return(ret);
}