Integrate ec_err.[co].
[oweals/openssl.git] / crypto / bn / bn_gcd.c
index d361ada8b2183be3465698ee78737e3872493692..d5caf5136f1248007dc6bb6f215665351cc055a9 100644 (file)
@@ -240,7 +240,7 @@ BIGNUM *BN_mod_inverse(BIGNUM *in,
        /* From  B = a mod |n|,  A = |n|  it follows that
         *
         *      0 <= B < A,
-        *           X*a  ==  B   (mod |n|),
+        *      sign*X*a  ==  B   (mod |n|),
         *     -sign*Y*a  ==  A   (mod |n|).
         */
 
@@ -250,7 +250,7 @@ BIGNUM *BN_mod_inverse(BIGNUM *in,
 
                /*
                 *      0 < B < A,
-                * (*)       X*a  ==  B   (mod |n|),
+                * (*)  sign*X*a  ==  B   (mod |n|),
                 *     -sign*Y*a  ==  A   (mod |n|)
                 */
 
@@ -314,15 +314,15 @@ BIGNUM *BN_mod_inverse(BIGNUM *in,
                 * i.e.
                 *      -sign*Y*a - D*A  ==  B    (mod |n|).
                 * Similarly, (*) translates into
-                *      X*a  ==  A          (mod |n|).
+                *       sign*X*a  ==  A          (mod |n|).
                 *
                 * Thus,
-                *      -sign*Y*a - D*X*a  ==  B  (mod |n|),
+                *  -sign*Y*a - D*sign*X*a  ==  B  (mod |n|),
                 * i.e.
-                *      -sign*(Y + D*X)*a  ==  B  (mod |n|).
+                *       -sign*(Y + D*X)*a  ==  B  (mod |n|).
                 *
                 * So if we set  (X, Y, sign) := (Y + D*X, X, -sign),  we arrive back at
-                *            X*a  ==  B   (mod |n|),
+                *       sign*X*a  ==  B   (mod |n|),
                 *      -sign*Y*a  ==  A   (mod |n|).
                 * Note that  X  and  Y  stay non-negative all the time.
                 */
@@ -361,7 +361,7 @@ BIGNUM *BN_mod_inverse(BIGNUM *in,
                }
 
        /*
-        * The while loop ends when
+        * The while loop (Euclid's algorithm) ends when
         *      A == gcd(a,n);
         * we have
         *      -sign*Y*a  ==  A  (mod |n|),
@@ -379,9 +379,13 @@ BIGNUM *BN_mod_inverse(BIGNUM *in,
                {
                /* Y*a == 1  (mod |n|) */
                if (BN_ucmp(Y,n) < 0)
+                       {
                        if (!BN_copy(R,Y)) goto err;
+                       }
                else
+                       {
                        if (!BN_nnmod(R,Y,n,ctx)) goto err;
+                       }
                }
        else
                {
@@ -394,4 +398,3 @@ err:
        BN_CTX_end(ctx);
        return(ret);
        }
-