Remove NOPROTO definitions and error code comments.
[openssl.git] / crypto / bn / bn_gcd.c
index 9b0bc2b1002e325c49186d5a2641af27dd44ec37..6aac204433fca394b31040487a4d96ef1a7914f1 100644 (file)
@@ -1,5 +1,5 @@
 /* crypto/bn/bn_gcd.c */
-/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
  * This package is an SSL implementation written
 #include "cryptlib.h"
 #include "bn_lcl.h"
 
-#ifndef NOPROTO
 static BIGNUM *euclid(BIGNUM *a, BIGNUM *b);
-#else
-static BIGNUM *euclid();
-#endif
-
-int BN_gcd(r,in_a,in_b,ctx)
-BIGNUM *r,*in_a,*in_b;
-BN_CTX *ctx;
+int BN_gcd(BIGNUM *r, BIGNUM *in_a, BIGNUM *in_b, BN_CTX *ctx)
        {
        BIGNUM *a,*b,*t;
        int ret=0;
 
-       a=ctx->bn[ctx->tos];
-       b=ctx->bn[ctx->tos+1];
+       bn_check_top(in_a);
+       bn_check_top(in_b);
+
+       a= &(ctx->bn[ctx->tos]);
+       b= &(ctx->bn[ctx->tos+1]);
 
        if (BN_copy(a,in_a) == NULL) goto err;
        if (BN_copy(b,in_b) == NULL) goto err;
@@ -89,12 +85,14 @@ err:
        return(ret);
        }
 
-static BIGNUM *euclid(a,b)
-BIGNUM *a,*b;
+static BIGNUM *euclid(BIGNUM *a, BIGNUM *b)
        {
        BIGNUM *t;
        int shifts=0;
 
+       bn_check_top(a);
+       bn_check_top(b);
+
        for (;;)
                {
                if (BN_is_zero(b))
@@ -142,23 +140,26 @@ err:
        }
 
 /* solves ax == 1 (mod n) */
-BIGNUM *BN_mod_inverse(a, n, ctx)
-BIGNUM *a;
-BIGNUM *n;
-BN_CTX *ctx;
+BIGNUM *BN_mod_inverse(BIGNUM *in, BIGNUM *a, BIGNUM *n, BN_CTX *ctx)
        {
        BIGNUM *A,*B,*X,*Y,*M,*D,*R;
-       BIGNUM *ret=NULL,*T;
+       BIGNUM *T,*ret=NULL;
        int sign;
 
-       A=ctx->bn[ctx->tos];
-       B=ctx->bn[ctx->tos+1];
-       X=ctx->bn[ctx->tos+2];
-       D=ctx->bn[ctx->tos+3];
-       M=ctx->bn[ctx->tos+4];
-       Y=ctx->bn[ctx->tos+5];
+       bn_check_top(a);
+       bn_check_top(n);
+
+       A= &(ctx->bn[ctx->tos]);
+       B= &(ctx->bn[ctx->tos+1]);
+       X= &(ctx->bn[ctx->tos+2]);
+       D= &(ctx->bn[ctx->tos+3]);
+       M= &(ctx->bn[ctx->tos+4]);
+       Y= &(ctx->bn[ctx->tos+5]);
        ctx->tos+=6;
-       R=BN_new();
+       if (in == NULL)
+               R=BN_new();
+       else
+               R=in;
        if (R == NULL) goto err;
 
        BN_zero(X);
@@ -175,7 +176,7 @@ BN_CTX *ctx;
                B=M;
                /* T has a struct, M does not */
 
-               if (!BN_mul(T,D,X)) goto err;
+               if (!BN_mul(T,D,X,ctx)) goto err;
                if (!BN_add(T,T,Y)) goto err;
                M=Y;
                Y=X;
@@ -196,7 +197,7 @@ BN_CTX *ctx;
                }
        ret=R;
 err:
-       if ((ret == NULL) && (R != NULL)) BN_free(R);
+       if ((ret == NULL) && (in == NULL)) BN_free(R);
        ctx->tos-=6;
        return(ret);
        }