Renamed variables named 'private' and 'public' to prevent compilation problems with C++
diff --git a/uECC.c b/uECC.c
index 7717533..daa144a 100644
--- a/uECC.c
+++ b/uECC.c
@@ -913,7 +913,7 @@
 }
 
 static uECC_word_t EccPoint_compute_public_key(uECC_word_t *result,
-                                               uECC_word_t *private,
+                                               uECC_word_t *private_key,
                                                uECC_Curve curve) {
     uECC_word_t tmp1[uECC_MAX_WORDS];
     uECC_word_t tmp2[uECC_MAX_WORDS];
@@ -922,7 +922,7 @@
 
     /* Regularize the bitcount for the private key so that attackers cannot use a side channel
        attack to learn the number of leading zeros. */
-    carry = regularize_k(private, tmp1, tmp2, curve);
+    carry = regularize_k(private_key, tmp1, tmp2, curve);
 
     EccPoint_mult(result, curve->G, p2[!carry], 0, curve->num_n_bits + 1, curve);
 
@@ -1005,25 +1005,25 @@
                   uint8_t *private_key,
                   uECC_Curve curve) {
 #if uECC_VLI_NATIVE_LITTLE_ENDIAN
-    uECC_word_t *private = (uECC_word_t *)private_key;
-    uECC_word_t *public = (uECC_word_t *)public_key;
+    uECC_word_t *_private = (uECC_word_t *)private_key;
+    uECC_word_t *_public = (uECC_word_t *)public_key;
 #else
-    uECC_word_t private[uECC_MAX_WORDS];
-    uECC_word_t public[uECC_MAX_WORDS * 2];
+    uECC_word_t _private[uECC_MAX_WORDS];
+    uECC_word_t _public[uECC_MAX_WORDS * 2];
 #endif
     uECC_word_t tries;
 
     for (tries = 0; tries < uECC_RNG_MAX_TRIES; ++tries) {
-        if (!uECC_generate_random_int(private, curve->n, BITS_TO_WORDS(curve->num_n_bits))) {
+        if (!uECC_generate_random_int(_private, curve->n, BITS_TO_WORDS(curve->num_n_bits))) {
             return 0;
         }
 
-        if (EccPoint_compute_public_key(public, private, curve)) {
+        if (EccPoint_compute_public_key(_public, _private, curve)) {
 #if uECC_VLI_NATIVE_LITTLE_ENDIAN == 0
-            uECC_vli_nativeToBytes(private_key, BITS_TO_BYTES(curve->num_n_bits), private);
-            uECC_vli_nativeToBytes(public_key, curve->num_bytes, public);
+            uECC_vli_nativeToBytes(private_key, BITS_TO_BYTES(curve->num_n_bits), _private);
+            uECC_vli_nativeToBytes(public_key, curve->num_bytes, _public);
             uECC_vli_nativeToBytes(
-                public_key + curve->num_bytes, curve->num_bytes, public + curve->num_words);
+                public_key + curve->num_bytes, curve->num_bytes, _public + curve->num_words);
 #endif
             return 1;
         }
@@ -1035,28 +1035,28 @@
                        const uint8_t *private_key,
                        uint8_t *secret,
                        uECC_Curve curve) {
-    uECC_word_t public[uECC_MAX_WORDS * 2];
-    uECC_word_t private[uECC_MAX_WORDS];
+    uECC_word_t _public[uECC_MAX_WORDS * 2];
+    uECC_word_t _private[uECC_MAX_WORDS];
 
     uECC_word_t tmp[uECC_MAX_WORDS];
-    uECC_word_t *p2[2] = {private, tmp};
+    uECC_word_t *p2[2] = {_private, tmp};
     uECC_word_t *initial_Z = 0;
     uECC_word_t carry;
     wordcount_t num_words = curve->num_words;
     wordcount_t num_bytes = curve->num_bytes;
 
 #if uECC_VLI_NATIVE_LITTLE_ENDIAN
-    bcopy((uint8_t *) private, private_key, num_bytes);
-    bcopy((uint8_t *) public, public_key, num_bytes*2);
+    bcopy((uint8_t *) _private, private_key, num_bytes);
+    bcopy((uint8_t *) _public, public_key, num_bytes*2);
 #else
-    uECC_vli_bytesToNative(private, private_key, BITS_TO_BYTES(curve->num_n_bits));
-    uECC_vli_bytesToNative(public, public_key, num_bytes);
-    uECC_vli_bytesToNative(public + num_words, public_key + num_bytes, num_bytes);
+    uECC_vli_bytesToNative(_private, private_key, BITS_TO_BYTES(curve->num_n_bits));
+    uECC_vli_bytesToNative(_public, public_key, num_bytes);
+    uECC_vli_bytesToNative(_public + num_words, public_key + num_bytes, num_bytes);
 #endif
 
     /* Regularize the bitcount for the private key so that attackers cannot use a side channel
        attack to learn the number of leading zeros. */
-    carry = regularize_k(private, private, tmp, curve);
+    carry = regularize_k(_private, _private, tmp, curve);
 
     /* If an RNG function was specified, try to get a random initial Z value to improve
        protection against side-channel attacks. */
@@ -1067,13 +1067,13 @@
         initial_Z = p2[carry];
     }
 
-    EccPoint_mult(public, public, p2[!carry], initial_Z, curve->num_n_bits + 1, curve);
+    EccPoint_mult(_public, _public, p2[!carry], initial_Z, curve->num_n_bits + 1, curve);
 #if uECC_VLI_NATIVE_LITTLE_ENDIAN
-    bcopy((uint8_t *) secret, (uint8_t *) public, num_bytes);
+    bcopy((uint8_t *) secret, (uint8_t *) _public, num_bytes);
 #else
-    uECC_vli_nativeToBytes(secret, num_bytes, public);
+    uECC_vli_nativeToBytes(secret, num_bytes, _public);
 #endif
-    return !EccPoint_isZero(public, curve);
+    return !EccPoint_isZero(_public, curve);
 }
 
 #if uECC_SUPPORT_COMPRESSED_POINT
@@ -1140,50 +1140,50 @@
 
 int uECC_valid_public_key(const uint8_t *public_key, uECC_Curve curve) {
 #if uECC_VLI_NATIVE_LITTLE_ENDIAN
-    uECC_word_t *public = (uECC_word_t *)public_key;
+    uECC_word_t *_public = (uECC_word_t *)public_key;
 #else
-    uECC_word_t public[uECC_MAX_WORDS * 2];
+    uECC_word_t _public[uECC_MAX_WORDS * 2];
 #endif
 
 #if uECC_VLI_NATIVE_LITTLE_ENDIAN == 0
-    uECC_vli_bytesToNative(public, public_key, curve->num_bytes);
+    uECC_vli_bytesToNative(_public, public_key, curve->num_bytes);
     uECC_vli_bytesToNative(
-        public + curve->num_words, public_key + curve->num_bytes, curve->num_bytes);
+        _public + curve->num_words, public_key + curve->num_bytes, curve->num_bytes);
 #endif
-    return uECC_valid_point(public, curve);
+    return uECC_valid_point(_public, curve);
 }
 
 int uECC_compute_public_key(const uint8_t *private_key, uint8_t *public_key, uECC_Curve curve) {
 #if uECC_VLI_NATIVE_LITTLE_ENDIAN
-    uECC_word_t *private = (uECC_word_t *)private_key;
-    uECC_word_t *public = (uECC_word_t *)public_key;
+    uECC_word_t *_private = (uECC_word_t *)private_key;
+    uECC_word_t *_public = (uECC_word_t *)public_key;
 #else
-    uECC_word_t private[uECC_MAX_WORDS];
-    uECC_word_t public[uECC_MAX_WORDS * 2];
+    uECC_word_t _private[uECC_MAX_WORDS];
+    uECC_word_t _public[uECC_MAX_WORDS * 2];
 #endif
 
 #if uECC_VLI_NATIVE_LITTLE_ENDIAN == 0
-    uECC_vli_bytesToNative(private, private_key, BITS_TO_BYTES(curve->num_n_bits));
+    uECC_vli_bytesToNative(_private, private_key, BITS_TO_BYTES(curve->num_n_bits));
 #endif
 
     /* Make sure the private key is in the range [1, n-1]. */
-    if (uECC_vli_isZero(private, BITS_TO_WORDS(curve->num_n_bits))) {
+    if (uECC_vli_isZero(_private, BITS_TO_WORDS(curve->num_n_bits))) {
         return 0;
     }
 
-    if (uECC_vli_cmp(curve->n, private, BITS_TO_WORDS(curve->num_n_bits)) != 1) {
+    if (uECC_vli_cmp(curve->n, _private, BITS_TO_WORDS(curve->num_n_bits)) != 1) {
         return 0;
     }
 
     /* Compute public key. */
-    if (!EccPoint_compute_public_key(public, private, curve)) {
+    if (!EccPoint_compute_public_key(_public, _private, curve)) {
         return 0;
     }
 
 #if uECC_VLI_NATIVE_LITTLE_ENDIAN == 0
-    uECC_vli_nativeToBytes(public_key, curve->num_bytes, public);
+    uECC_vli_nativeToBytes(public_key, curve->num_bytes, _public);
     uECC_vli_nativeToBytes(
-        public_key + curve->num_bytes, curve->num_bytes, public + curve->num_words);
+        public_key + curve->num_bytes, curve->num_bytes, _public + curve->num_words);
 #endif
     return 1;
 }
@@ -1469,9 +1469,9 @@
     bitcount_t num_bits;
     bitcount_t i;
 #if uECC_VLI_NATIVE_LITTLE_ENDIAN
-    uECC_word_t *public = (uECC_word_t *)public_key;
+    uECC_word_t *_public = (uECC_word_t *)public_key;
 #else
-    uECC_word_t public[uECC_MAX_WORDS * 2];
+    uECC_word_t _public[uECC_MAX_WORDS * 2];
 #endif    
     uECC_word_t r[uECC_MAX_WORDS], s[uECC_MAX_WORDS];
     wordcount_t num_words = curve->num_words;
@@ -1485,9 +1485,9 @@
     bcopy((uint8_t *) r, signature, curve->num_bytes);
     bcopy((uint8_t *) s, signature + curve->num_bytes, curve->num_bytes);
 #else
-    uECC_vli_bytesToNative(public, public_key, curve->num_bytes);
+    uECC_vli_bytesToNative(_public, public_key, curve->num_bytes);
     uECC_vli_bytesToNative(
-        public + num_words, public_key + curve->num_bytes, curve->num_bytes);
+        _public + num_words, public_key + curve->num_bytes, curve->num_bytes);
     uECC_vli_bytesToNative(r, signature, curve->num_bytes);
     uECC_vli_bytesToNative(s, signature + curve->num_bytes, curve->num_bytes);
 #endif
@@ -1511,8 +1511,8 @@
     uECC_vli_modMult(u2, r, z, curve->n, num_n_words); /* u2 = r/s */
 
     /* Calculate sum = G + Q. */
-    uECC_vli_set(sum, public, num_words);
-    uECC_vli_set(sum + num_words, public + num_words, num_words);
+    uECC_vli_set(sum, _public, num_words);
+    uECC_vli_set(sum + num_words, _public + num_words, num_words);
     uECC_vli_set(tx, curve->G, num_words);
     uECC_vli_set(ty, curve->G + num_words, num_words);
     uECC_vli_modSub(z, sum, tx, curve->p, num_words); /* z = x2 - x1 */
@@ -1523,7 +1523,7 @@
     /* Use Shamir's trick to calculate u1*G + u2*Q */
     points[0] = 0;
     points[1] = curve->G;
-    points[2] = public;
+    points[2] = _public;
     points[3] = sum;
     num_bits = smax(uECC_vli_numBits(u1, num_n_words),
                     uECC_vli_numBits(u2, num_n_words));