projects
/
oweals
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
don't write beyond buffer
[oweals/openssl.git]
/
crypto
/
bn
/
bn_shift.c
diff --git
a/crypto/bn/bn_shift.c
b/crypto/bn/bn_shift.c
index 944bf1794bc1876de012fc82d82881631011334d..70f785ea185b8841e415d33b385bf96de95535be 100644
(file)
--- a/
crypto/bn/bn_shift.c
+++ b/
crypto/bn/bn_shift.c
@@
-60,9
+60,7
@@
#include "cryptlib.h"
#include "bn_lcl.h"
#include "cryptlib.h"
#include "bn_lcl.h"
-int BN_lshift1(r, a)
-BIGNUM *r;
-BIGNUM *a;
+int BN_lshift1(BIGNUM *r, const BIGNUM *a)
{
register BN_ULONG *ap,*rp,t,c;
int i;
{
register BN_ULONG *ap,*rp,t,c;
int i;
@@
-94,9
+92,7
@@
BIGNUM *a;
return(1);
}
return(1);
}
-int BN_rshift1(r, a)
-BIGNUM *r;
-BIGNUM *a;
+int BN_rshift1(BIGNUM *r, const BIGNUM *a)
{
BN_ULONG *ap,*rp,t,c;
int i;
{
BN_ULONG *ap,*rp,t,c;
int i;
@@
-125,18
+121,15
@@
BIGNUM *a;
return(1);
}
return(1);
}
-int BN_lshift(r, a, n)
-BIGNUM *r;
-BIGNUM *a;
-int n;
+int BN_lshift(BIGNUM *r, const BIGNUM *a, int n)
{
int i,nw,lb,rb;
BN_ULONG *t,*f;
BN_ULONG l;
r->neg=a->neg;
{
int i,nw,lb,rb;
BN_ULONG *t,*f;
BN_ULONG l;
r->neg=a->neg;
- if (bn_wexpand(r,a->top+(n/BN_BITS2)+1) == NULL) return(0);
nw=n/BN_BITS2;
nw=n/BN_BITS2;
+ if (bn_wexpand(r,a->top+nw+1) == NULL) return(0);
lb=n%BN_BITS2;
rb=BN_BITS2-lb;
f=a->d;
lb=n%BN_BITS2;
rb=BN_BITS2-lb;
f=a->d;
@@
-160,10
+153,7
@@
int n;
return(1);
}
return(1);
}
-int BN_rshift(r, a, n)
-BIGNUM *r;
-BIGNUM *a;
-int n;
+int BN_rshift(BIGNUM *r, const BIGNUM *a, int n)
{
int i,j,nw,lb,rb;
BN_ULONG *t,*f;
{
int i,j,nw,lb,rb;
BN_ULONG *t,*f;
@@
-172,7
+162,7
@@
int n;
nw=n/BN_BITS2;
rb=n%BN_BITS2;
lb=BN_BITS2-rb;
nw=n/BN_BITS2;
rb=n%BN_BITS2;
lb=BN_BITS2-rb;
- if (nw > a->top)
+ if (nw > a->top
|| a->top == 0
)
{
BN_zero(r);
return(1);
{
BN_zero(r);
return(1);
@@
-182,6
+172,11
@@
int n;
r->neg=a->neg;
if (bn_wexpand(r,a->top-nw+1) == NULL) return(0);
}
r->neg=a->neg;
if (bn_wexpand(r,a->top-nw+1) == NULL) return(0);
}
+ else
+ {
+ if (n == 0)
+ return 1; /* or the copying loop will go berserk */
+ }
f= &(a->d[nw]);
t=r->d;
f= &(a->d[nw]);
t=r->d;