@@ -36,60 +36,58 @@ mp_err s_mp_invmod_slow(const mp_int *a, const mp_int *b, mp_int *c)
36
36
mp_set (& A , 1uL );
37
37
mp_set (& D , 1uL );
38
38
39
- top :
40
- /* 4. while u is even do */
41
- while (mp_iseven (& u )) {
42
- /* 4.1 u = u/2 */
43
- if ((err = mp_div_2 (& u , & u )) != MP_OKAY ) goto LBL_ERR ;
44
-
45
- /* 4.2 if A or B is odd then */
46
- if (mp_isodd (& A ) || mp_isodd (& B )) {
47
- /* A = (A+y)/2, B = (B-x)/2 */
48
- if ((err = mp_add (& A , & y , & A )) != MP_OKAY ) goto LBL_ERR ;
49
- if ((err = mp_sub (& B , & x , & B )) != MP_OKAY ) goto LBL_ERR ;
39
+ do {
40
+ /* 4. while u is even do */
41
+ while (mp_iseven (& u )) {
42
+ /* 4.1 u = u/2 */
43
+ if ((err = mp_div_2 (& u , & u )) != MP_OKAY ) goto LBL_ERR ;
44
+
45
+ /* 4.2 if A or B is odd then */
46
+ if (mp_isodd (& A ) || mp_isodd (& B )) {
47
+ /* A = (A+y)/2, B = (B-x)/2 */
48
+ if ((err = mp_add (& A , & y , & A )) != MP_OKAY ) goto LBL_ERR ;
49
+ if ((err = mp_sub (& B , & x , & B )) != MP_OKAY ) goto LBL_ERR ;
50
+ }
51
+ /* A = A/2, B = B/2 */
52
+ if ((err = mp_div_2 (& A , & A )) != MP_OKAY ) goto LBL_ERR ;
53
+ if ((err = mp_div_2 (& B , & B )) != MP_OKAY ) goto LBL_ERR ;
50
54
}
51
- /* A = A/2, B = B/2 */
52
- if ((err = mp_div_2 (& A , & A )) != MP_OKAY ) goto LBL_ERR ;
53
- if ((err = mp_div_2 (& B , & B )) != MP_OKAY ) goto LBL_ERR ;
54
- }
55
-
56
- /* 5. while v is even do */
57
- while (mp_iseven (& v )) {
58
- /* 5.1 v = v/2 */
59
- if ((err = mp_div_2 (& v , & v )) != MP_OKAY ) goto LBL_ERR ;
60
55
61
- /* 5.2 if C or D is odd then */
62
- if (mp_isodd (& C ) || mp_isodd (& D )) {
63
- /* C = (C+y)/2, D = (D-x)/2 */
64
- if ((err = mp_add (& C , & y , & C )) != MP_OKAY ) goto LBL_ERR ;
65
- if ((err = mp_sub (& D , & x , & D )) != MP_OKAY ) goto LBL_ERR ;
56
+ /* 5. while v is even do */
57
+ while (mp_iseven (& v )) {
58
+ /* 5.1 v = v/2 */
59
+ if ((err = mp_div_2 (& v , & v )) != MP_OKAY ) goto LBL_ERR ;
60
+
61
+ /* 5.2 if C or D is odd then */
62
+ if (mp_isodd (& C ) || mp_isodd (& D )) {
63
+ /* C = (C+y)/2, D = (D-x)/2 */
64
+ if ((err = mp_add (& C , & y , & C )) != MP_OKAY ) goto LBL_ERR ;
65
+ if ((err = mp_sub (& D , & x , & D )) != MP_OKAY ) goto LBL_ERR ;
66
+ }
67
+ /* C = C/2, D = D/2 */
68
+ if ((err = mp_div_2 (& C , & C )) != MP_OKAY ) goto LBL_ERR ;
69
+ if ((err = mp_div_2 (& D , & D )) != MP_OKAY ) goto LBL_ERR ;
66
70
}
67
- /* C = C/2, D = D/2 */
68
- if ((err = mp_div_2 (& C , & C )) != MP_OKAY ) goto LBL_ERR ;
69
- if ((err = mp_div_2 (& D , & D )) != MP_OKAY ) goto LBL_ERR ;
70
- }
71
71
72
- /* 6. if u >= v then */
73
- if (mp_cmp (& u , & v ) != MP_LT ) {
74
- /* u = u - v, A = A - C, B = B - D */
75
- if ((err = mp_sub (& u , & v , & u )) != MP_OKAY ) goto LBL_ERR ;
72
+ /* 6. if u >= v then */
73
+ if (mp_cmp (& u , & v ) != MP_LT ) {
74
+ /* u = u - v, A = A - C, B = B - D */
75
+ if ((err = mp_sub (& u , & v , & u )) != MP_OKAY ) goto LBL_ERR ;
76
76
77
- if ((err = mp_sub (& A , & C , & A )) != MP_OKAY ) goto LBL_ERR ;
77
+ if ((err = mp_sub (& A , & C , & A )) != MP_OKAY ) goto LBL_ERR ;
78
78
79
- if ((err = mp_sub (& B , & D , & B )) != MP_OKAY ) goto LBL_ERR ;
80
- } else {
81
- /* v - v - u, C = C - A, D = D - B */
82
- if ((err = mp_sub (& v , & u , & v )) != MP_OKAY ) goto LBL_ERR ;
79
+ if ((err = mp_sub (& B , & D , & B )) != MP_OKAY ) goto LBL_ERR ;
80
+ } else {
81
+ /* v - v - u, C = C - A, D = D - B */
82
+ if ((err = mp_sub (& v , & u , & v )) != MP_OKAY ) goto LBL_ERR ;
83
83
84
- if ((err = mp_sub (& C , & A , & C )) != MP_OKAY ) goto LBL_ERR ;
84
+ if ((err = mp_sub (& C , & A , & C )) != MP_OKAY ) goto LBL_ERR ;
85
85
86
- if ((err = mp_sub (& D , & B , & D )) != MP_OKAY ) goto LBL_ERR ;
87
- }
86
+ if ((err = mp_sub (& D , & B , & D )) != MP_OKAY ) goto LBL_ERR ;
87
+ }
88
88
89
- /* if not zero goto step 4 */
90
- if (!mp_iszero (& u )) {
91
- goto top ;
92
- }
89
+ /* if not zero goto step 4 */
90
+ } while (!mp_iszero (& u ));
93
91
94
92
/* now a = C, b = D, gcd == g*v */
95
93
@@ -111,7 +109,7 @@ mp_err s_mp_invmod_slow(const mp_int *a, const mp_int *b, mp_int *c)
111
109
112
110
/* C is now the inverse */
113
111
mp_exch (& C , c );
114
- err = MP_OKAY ;
112
+
115
113
LBL_ERR :
116
114
mp_clear_multi (& x , & y , & u , & v , & A , & B , & C , & D , NULL );
117
115
return err ;
0 commit comments