Make bits2int reduce mod n (#53)
diff --git a/uECC.c b/uECC.c
index e8ecaf2..c7d759a 100644
--- a/uECC.c
+++ b/uECC.c
@@ -407,7 +407,7 @@
                                   const uECC_word_t *mod,
                                   wordcount_t num_words) {
     uECC_word_t carry = uECC_vli_add(result, left, right, num_words);
-    if (carry || uECC_vli_cmp_unsafe(result, mod, num_words) >= 0) {
+    if (carry || uECC_vli_cmp_unsafe(mod, result, num_words) != 1) {
         /* result > mod (result = mod + remainder), so subtract mod to get remainder. */
         uECC_vli_sub(result, result, mod, num_words);
     }
@@ -1023,19 +1023,24 @@
     if (bits_size > num_n_bytes) {
         bits_size = num_n_bytes;
     }
+    uECC_vli_clear(native, num_n_words);
     uECC_vli_bytesToNative(native, bits, bits_size, curve);
     if (bits_size * 8 <= (unsigned)curve->num_n_bits) {
         return;
     }
     int shift = bits_size * 8 - curve->num_n_bits;
     uECC_word_t carry = 0;
-    uECC_word_t *end = native;
-    native += num_n_words;
-    while (native-- > end) {
-        uECC_word_t temp = *native;
-        *native = (temp >> shift) | carry;
+    uECC_word_t *ptr = native + num_n_words;
+    while (ptr-- > native) {
+        uECC_word_t temp = *ptr;
+        *ptr = (temp >> shift) | carry;
         carry = temp << (uECC_WORD_BITS - shift);
     }
+
+    /* Reduce mod curve_n */
+    if (uECC_vli_cmp_unsafe(curve->n, native, num_n_words) != 1) {
+        uECC_vli_sub(native, native, curve->n, num_n_words);
+    }
 }
 
 static int uECC_sign_with_k(const uint8_t *private_key,