projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix modes.h so that indent doesn't complain
[openssl.git]
/
crypto
/
bn
/
bn_shift.c
diff --git
a/crypto/bn/bn_shift.c
b/crypto/bn/bn_shift.c
index 70f785ea185b8841e415d33b385bf96de95535be..a6fca2c424f0c7e77110d66fe740500ce4563af1 100644
(file)
--- a/
crypto/bn/bn_shift.c
+++ b/
crypto/bn/bn_shift.c
@@
-65,6
+65,9
@@
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;
+ bn_check_top(r);
+ bn_check_top(a);
+
if (r != a)
{
r->neg=a->neg;
if (r != a)
{
r->neg=a->neg;
@@
-89,35
+92,43
@@
int BN_lshift1(BIGNUM *r, const BIGNUM *a)
*rp=1;
r->top++;
}
*rp=1;
r->top++;
}
+ bn_check_top(r);
return(1);
}
int BN_rshift1(BIGNUM *r, const BIGNUM *a)
{
BN_ULONG *ap,*rp,t,c;
return(1);
}
int BN_rshift1(BIGNUM *r, const BIGNUM *a)
{
BN_ULONG *ap,*rp,t,c;
- int i;
+ int i,j;
+
+ bn_check_top(r);
+ bn_check_top(a);
if (BN_is_zero(a))
{
BN_zero(r);
return(1);
}
if (BN_is_zero(a))
{
BN_zero(r);
return(1);
}
+ i = a->top;
+ ap= a->d;
+ j = i-(ap[i-1]==1);
if (a != r)
{
if (a != r)
{
- if (bn_wexpand(r,a->top) == NULL) return(0);
- r->top=a->top;
+ if (bn_wexpand(r,j) == NULL) return(0);
r->neg=a->neg;
}
r->neg=a->neg;
}
- ap=a->d;
rp=r->d;
rp=r->d;
- c=0;
- for (i=a->top-1; i>=0; i--)
+ t=ap[--i];
+ c=(t&1)?BN_TBIT:0;
+ if (t>>=1) rp[i]=t;
+ while (i>0)
{
{
- t=ap[i];
+ t=ap[
--
i];
rp[i]=((t>>1)&BN_MASK2)|c;
c=(t&1)?BN_TBIT:0;
}
rp[i]=((t>>1)&BN_MASK2)|c;
c=(t&1)?BN_TBIT:0;
}
- bn_fix_top(r);
+ r->top=j;
+ bn_check_top(r);
return(1);
}
return(1);
}
@@
-127,6
+138,9
@@
int BN_lshift(BIGNUM *r, const BIGNUM *a, int n)
BN_ULONG *t,*f;
BN_ULONG l;
BN_ULONG *t,*f;
BN_ULONG l;
+ bn_check_top(r);
+ bn_check_top(a);
+
r->neg=a->neg;
nw=n/BN_BITS2;
if (bn_wexpand(r,a->top+nw+1) == NULL) return(0);
r->neg=a->neg;
nw=n/BN_BITS2;
if (bn_wexpand(r,a->top+nw+1) == NULL) return(0);
@@
-149,7
+163,8
@@
int BN_lshift(BIGNUM *r, const BIGNUM *a, int n)
/* for (i=0; i<nw; i++)
t[i]=0;*/
r->top=a->top+nw+1;
/* for (i=0; i<nw; i++)
t[i]=0;*/
r->top=a->top+nw+1;
- bn_fix_top(r);
+ bn_correct_top(r);
+ bn_check_top(r);
return(1);
}
return(1);
}
@@
-159,18
+174,22
@@
int BN_rshift(BIGNUM *r, const BIGNUM *a, int n)
BN_ULONG *t,*f;
BN_ULONG l,tmp;
BN_ULONG *t,*f;
BN_ULONG l,tmp;
+ bn_check_top(r);
+ bn_check_top(a);
+
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 || a->top == 0)
+ if (nw >
=
a->top || a->top == 0)
{
BN_zero(r);
return(1);
}
{
BN_zero(r);
return(1);
}
+ i = (BN_num_bits(a)-n+(BN_BITS2-1))/BN_BITS2;
if (r != a)
{
r->neg=a->neg;
if (r != a)
{
r->neg=a->neg;
- if (bn_wexpand(r,
a->top-nw+1
) == NULL) return(0);
+ if (bn_wexpand(r,
i
) == NULL) return(0);
}
else
{
}
else
{
@@
-181,25
+200,24
@@
int BN_rshift(BIGNUM *r, const BIGNUM *a, int n)
f= &(a->d[nw]);
t=r->d;
j=a->top-nw;
f= &(a->d[nw]);
t=r->d;
j=a->top-nw;
- r->top=
j
;
+ r->top=
i
;
if (rb == 0)
{
if (rb == 0)
{
- for (i=j
+1; i >
0; i--)
+ for (i=j
; i !=
0; i--)
*(t++)= *(f++);
}
else
{
l= *(f++);
*(t++)= *(f++);
}
else
{
l= *(f++);
- for (i=
1; i<j; i++
)
+ for (i=
j-1; i != 0; i--
)
{
tmp =(l>>rb)&BN_MASK2;
l= *(f++);
*(t++) =(tmp|(l<<lb))&BN_MASK2;
}
{
tmp =(l>>rb)&BN_MASK2;
l= *(f++);
*(t++) =(tmp|(l<<lb))&BN_MASK2;
}
-
*(t++) =(l>>rb)&BN_MASK2
;
+
if ((l = (l>>rb)&BN_MASK2)) *(t) = l
;
}
}
- *t=0;
- bn_fix_top(r);
+ bn_check_top(r);
return(1);
}
return(1);
}