modular arithmetics
[openssl.git] / crypto / bn / bn_lib.c
index 130a9e2db401468e83ef2747031a4056defeb1f6..0e161d173ebc855d3038fa0c2e3b6e6a00e399d4 100644 (file)
@@ -561,6 +561,35 @@ BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b)
        return(a);
        }
 
        return(a);
        }
 
+void BN_swap(BIGNUM *a, BIGNUM *b)
+       {
+       int flags_old_a, flags_old_b;
+       BN_ULONG *tmp_d;
+       int tmp_top, tmp_dmax, tmp_neg;
+       
+       flags_old_a = a->flags;
+       flags_old_b = b->flags;
+
+       tmp_d = a->d;
+       tmp_top = a->top;
+       tmp_dmax = a->dmax;
+       tmp_neg = a->neg;
+       
+       a->d = b->d;
+       a->top = b->top;
+       a->dmax = b->dmax;
+       a->neg = b->neg;
+       
+       b->d = tmp_d;
+       b->top = tmp_top;
+       b->dmax = tmp_dmax;
+       b->neg = tmp_neg;
+       
+       a->flags = (flags_old_a & BN_FLG_MALLOCED) | (flags_old_b & BN_FLG_STATIC_DATA);
+       b->flags = (flags_old_b & BN_FLG_MALLOCED) | (flags_old_a & BN_FLG_STATIC_DATA);
+       }
+
+
 void BN_clear(BIGNUM *a)
        {
        if (a->d != NULL)
 void BN_clear(BIGNUM *a)
        {
        if (a->d != NULL)