Release 1.8.0
[libgcrypt.git] / mpi / mpi-mul.c
index 317a3c5..4f4d709 100644 (file)
@@ -31,7 +31,7 @@
 
 
 void
-gcry_mpi_mul_ui( gcry_mpi_t prod, gcry_mpi_t mult, unsigned long small_mult )
+_gcry_mpi_mul_ui (gcry_mpi_t prod, gcry_mpi_t mult, unsigned long small_mult)
 {
     mpi_size_t size, prod_size;
     mpi_ptr_t  prod_ptr;
@@ -61,7 +61,7 @@ gcry_mpi_mul_ui( gcry_mpi_t prod, gcry_mpi_t mult, unsigned long small_mult )
 
 
 void
-_gcry_mpi_mul_2expgcry_mpi_t w, gcry_mpi_t u, unsigned long cnt)
+_gcry_mpi_mul_2exp (gcry_mpi_t w, gcry_mpi_t u, unsigned long cnt)
 {
     mpi_size_t usize, wsize, limb_cnt;
     mpi_ptr_t wp;
@@ -107,14 +107,7 @@ _gcry_mpi_mul_2exp( gcry_mpi_t w, gcry_mpi_t u, unsigned long cnt)
 
 
 void
-gcry_mpi_mul_2exp( gcry_mpi_t w, gcry_mpi_t u, unsigned long cnt)
-{
-  _gcry_mpi_mul_2exp (w, u, cnt);
-}
-
-
-void
-gcry_mpi_mul( gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v)
+_gcry_mpi_mul (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v)
 {
     mpi_size_t usize, vsize, wsize;
     mpi_ptr_t up, vp, wp;
@@ -122,7 +115,7 @@ gcry_mpi_mul( gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v)
     int usign, vsign, usecure, vsecure, sign_product;
     int assign_wp=0;
     mpi_ptr_t tmp_limb=NULL;
-
+    unsigned int tmp_limb_nlimbs = 0;
 
     if( u->nlimbs < v->nlimbs ) { /* Swap U and V. */
        usize = v->nlimbs;
@@ -151,7 +144,7 @@ gcry_mpi_mul( gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v)
     wsize = usize + vsize;
     if ( !mpi_is_secure (w) && (mpi_is_secure (u) || mpi_is_secure (v)) ) {
         /* w is not allocated in secure space but u or v is.  To make sure
-         * that no temporray results are stored in w, we temporary use 
+         * that no temporray results are stored in w, we temporary use
          * a newly allocated limb space for w */
         wp = mpi_alloc_limb_space( wsize, 1 );
         assign_wp = 2; /* mark it as 2 so that we can later copy it back to
@@ -170,6 +163,7 @@ gcry_mpi_mul( gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v)
     else { /* Make U and V not overlap with W. */
        if( wp == up ) {
            /* W and U are identical.  Allocate temporary space for U.  */
+            tmp_limb_nlimbs = usize;
            up = tmp_limb = mpi_alloc_limb_space( usize, usecure  );
            /* Is V identical too?  Keep it identical with U.  */
            if( wp == vp )
@@ -179,6 +173,7 @@ gcry_mpi_mul( gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v)
        }
        else if( wp == vp ) {
            /* W and V are identical.  Allocate temporary space for V.  */
+            tmp_limb_nlimbs = vsize;
            vp = tmp_limb = mpi_alloc_limb_space( vsize, vsecure );
            /* Copy to the temporary space.  */
            MPN_COPY( vp, wp, vsize );
@@ -197,7 +192,7 @@ gcry_mpi_mul( gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v)
             /* copy the temp wp from secure memory back to normal memory */
            mpi_ptr_t tmp_wp = mpi_alloc_limb_space (wsize, 0);
            MPN_COPY (tmp_wp, wp, wsize);
-            mpi_free_limb_space (wp);
+            _gcry_mpi_free_limb_space (wp, 0);
             wp = tmp_wp;
         }
        _gcry_mpi_assign_limb_space( w, wp, wsize );
@@ -205,14 +200,13 @@ gcry_mpi_mul( gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v)
     w->nlimbs = wsize;
     w->sign = sign_product;
     if( tmp_limb )
-       mpi_free_limb_space( tmp_limb );
+       _gcry_mpi_free_limb_space (tmp_limb, tmp_limb_nlimbs);
 }
 
 
 void
-gcry_mpi_mulm( gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, gcry_mpi_t m)
+_gcry_mpi_mulm (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, gcry_mpi_t m)
 {
-    gcry_mpi_mul(w, u, v);
-    _gcry_mpi_fdiv_r( w, w, m );
+  mpi_mul (w, u, v);
+  _gcry_mpi_tdiv_r (w, w, m);
 }
-