ctr_add: replace dead with working code.
[tfcrypt.git] / tfdef.h
diff --git a/tfdef.h b/tfdef.h
index 5450271f12dc9f83989d5e87ecedd0e52d34b656..463e5fb7c0f4d83be1549ef8bdaa7b0666c8658c 100644 (file)
--- a/tfdef.h
+++ b/tfdef.h
@@ -87,31 +87,26 @@ static inline void data_to_words(void *p, size_t l)
 #endif
 }
 
-static inline void ctr_inc(TF_UNIT_TYPE *x, size_t l)
+static inline void ctr_inc(TF_UNIT_TYPE *x, size_t xl)
 {
-       size_t i;
+       size_t z;
 
-       for (i = 0; i < l; i++) {
-               x[i] = ((x[i] + (TF_UNIT_TYPE)1) & ((TF_UNIT_TYPE)~0));
-               if (x[i]) break;
+       for (z = 0; z < xl; z++) {
+               x[z] = ((x[z] + (TF_UNIT_TYPE)1) & ((TF_UNIT_TYPE)~0));
+               if (x[z]) break;
        }
 }
 
-static inline void ctr_add(TF_UNIT_TYPE *x, const TF_UNIT_TYPE *y, size_t l)
+static inline void ctr_add(TF_UNIT_TYPE *x, size_t xl, const TF_UNIT_TYPE *y, size_t yl)
 {
-       size_t i, f = 0;
+       size_t z, cf;
        TF_UNIT_TYPE t;
 
-       for (i = 0; i < l; i++) {
-               t = x[i];
-               x[i] += y[i]; x[i] &= ((TF_UNIT_TYPE)~0);
-               if (x[i] < t) {
-_again:                        f++;
-                       t = x[f-i];
-                       x[f-i]++;
-                       if (x[f-i] < t) goto _again;
-                       else f = 0;
-               }
+       for (z = 0, cf = 0; z < xl; z++) {
+               t = x[z] + (z >= yl ? (TF_UNIT_TYPE)0 : y[z]) + cf;
+               if (cf) cf = (x[z] >= t ? 1 : 0);
+               else cf = (x[z] > t ? 1 : 0);
+               x[z] = t;
        }
 }