refactor without inner scope

This commit is contained in:
Francois Perrad 2019-05-19 14:56:04 +02:00
parent 97bc7ca032
commit d185c1d7bd
2 changed files with 41 additions and 46 deletions

View File

@ -8,6 +8,7 @@ mp_err mp_lshd(mp_int *a, int b)
{
int x;
mp_err res;
mp_digit *top, *bottom;
/* if its less than zero return */
if (b <= 0) {
@ -25,32 +26,29 @@ mp_err mp_lshd(mp_int *a, int b)
}
}
{
mp_digit *top, *bottom;
/* increment the used by the shift amount then copy upwards */
a->used += b;
/* increment the used by the shift amount then copy upwards */
a->used += b;
/* top */
top = a->dp + a->used - 1;
/* top */
top = a->dp + a->used - 1;
/* base */
bottom = (a->dp + a->used - 1) - b;
/* base */
bottom = (a->dp + a->used - 1) - b;
/* much like mp_rshd this is implemented using a sliding window
* except the window goes the otherway around. Copying from
* the bottom to the top. see bn_mp_rshd.c for more info.
*/
for (x = a->used - 1; x >= b; x--) {
*top-- = *bottom--;
}
/* zero the lower digits */
top = a->dp;
for (x = 0; x < b; x++) {
*top++ = 0;
}
/* much like mp_rshd this is implemented using a sliding window
* except the window goes the otherway around. Copying from
* the bottom to the top. see bn_mp_rshd.c for more info.
*/
for (x = a->used - 1; x >= b; x--) {
*top-- = *bottom--;
}
/* zero the lower digits */
top = a->dp;
for (x = 0; x < b; x++) {
*top++ = 0;
}
return MP_OKAY;
}
#endif

View File

@ -7,6 +7,7 @@
void mp_rshd(mp_int *a, int b)
{
int x;
mp_digit *bottom, *top;
/* if b <= 0 then ignore it */
if (b <= 0) {
@ -19,35 +20,31 @@ void mp_rshd(mp_int *a, int b)
return;
}
{
mp_digit *bottom, *top;
/* shift the digits down */
/* shift the digits down */
/* bottom */
bottom = a->dp;
/* bottom */
bottom = a->dp;
/* top [offset into digits] */
top = a->dp + b;
/* top [offset into digits] */
top = a->dp + b;
/* this is implemented as a sliding window where
* the window is b-digits long and digits from
* the top of the window are copied to the bottom
*
* e.g.
/* this is implemented as a sliding window where
* the window is b-digits long and digits from
* the top of the window are copied to the bottom
*
* e.g.
b-2 | b-1 | b0 | b1 | b2 | ... | bb | ---->
/\ | ---->
\-------------------/ ---->
*/
for (x = 0; x < (a->used - b); x++) {
*bottom++ = *top++;
}
b-2 | b-1 | b0 | b1 | b2 | ... | bb | ---->
/\ | ---->
\-------------------/ ---->
*/
for (x = 0; x < (a->used - b); x++) {
*bottom++ = *top++;
}
/* zero the top digits */
for (; x < a->used; x++) {
*bottom++ = 0;
}
/* zero the top digits */
for (; x < a->used; x++) {
*bottom++ = 0;
}
/* remove excess digits */