On 14.2.2025 3.25, NIIBE Yutaka via Gcrypt-devel wrote:
Hello,

This change introduces a function _gcry_mpih_add_1_lli for one limb
addition with least leak.

diff --git a/mpi/mpi-inline.h b/mpi/mpi-inline.h
index 090e8a94..6954affb 100644
--- a/mpi/mpi-inline.h
+++ b/mpi/mpi-inline.h
@@ -68,6 +68,28 @@ _gcry_mpih_add_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
  }
+/* Do same calculation as _gcry_mpih_add_1 does (under the condition
+   of RES_PTR == S1_PTR), Least Leak Intended.  */
+static inline mpi_limb_t
+_gcry_mpih_add_1_lli (mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_limb_t s2_limb)
+{
+  mpi_limb_t x;
+  mpi_limb_t cy;
+
+  x = *s1_ptr;
+  s2_limb += x;
+  *s1_ptr++ = s2_limb;
+  cy = (s2_limb < x);
+  while ( --s1_size )
+    {
+      x = *s1_ptr + cy;
+      *s1_ptr++ = x;
+      cy = mpih_limb_is_zero (x) & mpih_limb_is_not_zero (cy);
+    }
+
+  return cy;

I think this function could use 'add_ssaaaa' macro to handle addition with
carry.

Something like this (completely untested):

  cy = s2_limb;
  while ( s1_size )
    {
      x = *s1_ptr;
      add_ssaaaa(cy, x, 0, cy, 0, x);
      *s1_ptr++ = x;
      s1_size--;
    }
  return cy;

-Jussi

_______________________________________________
Gcrypt-devel mailing list
Gcrypt-devel@gnupg.org
https://lists.gnupg.org/mailman/listinfo/gcrypt-devel

Reply via email to