diff --git a/networking/tls.h b/networking/tls.h
index 154e9b2..215e92b 100644
--- a/networking/tls.h
+++ b/networking/tls.h
@@ -111,9 +111,9 @@
 #define CURVE25519_KEYSIZE 32
 
 void curve_x25519_compute_pubkey_and_premaster(
-		uint8_t *pubkey, uint8_t *premaster,
+		uint8_t *pubkey32, uint8_t *premaster32,
 		const uint8_t *peerkey32) FAST_FUNC;
 
 void curve_P256_compute_pubkey_and_premaster(
-		uint8_t *pubkey, uint8_t *premaster,
-		const uint8_t *peerkey32) FAST_FUNC;
+		uint8_t *pubkey2x32, uint8_t *premaster32,
+		const uint8_t *peerkey2x32) FAST_FUNC;
diff --git a/networking/tls_sp_c32.c b/networking/tls_sp_c32.c
index e7667de..b4e14de 100644
--- a/networking/tls_sp_c32.c
+++ b/networking/tls_sp_c32.c
@@ -57,7 +57,6 @@
 
 /* Implementation by Sean Parkinson. */
 
-/* Point structure to use. */
 typedef struct sp_point {
 	sp_digit x[2 * 10];
 	sp_digit y[2 * 10];
@@ -165,8 +164,6 @@
 
 /* Compare a with b in constant time.
  *
- * a  A single precision integer.
- * b  A single precision integer.
  * return -ve, 0 or +ve if a is less than, equal to or greater than b
  * respectively.
  */
@@ -181,8 +178,6 @@
 
 /* Compare two numbers to determine if they are equal.
  *
- * a  First number to compare.
- * b  Second number to compare.
  * return 1 when equal and 0 otherwise.
  */
 static int sp_256_cmp_equal_10(const sp_digit* a, const sp_digit* b)
@@ -198,10 +193,7 @@
 #endif
 }
 
-/* Normalize the values in each word to 26.
- *
- * a  Array of sp_digit to normalize.
- */
+/* Normalize the values in each word to 26 bits. */
 static void sp_256_norm_10(sp_digit* a)
 {
     int i;
@@ -211,12 +203,7 @@
     }
 }
 
-/* Add b to a into r. (r = a + b)
- *
- * r  A single precision integer.
- * a  A single precision integer.
- * b  A single precision integer.
- */
+/* Add b to a into r. (r = a + b) */
 static void sp_256_add_10(sp_digit* r, const sp_digit* a, const sp_digit* b)
 {
     int i;
@@ -226,11 +213,6 @@
 
 /* Conditionally add a and b using the mask m.
  * m is -1 to add and 0 when not.
- *
- * r  A single precision number representing conditional add result.
- * a  A single precision number to add with.
- * b  A single precision number to add.
- * m  Mask value to apply.
  */
 static void sp_256_cond_add_10(sp_digit* r, const sp_digit* a,
         const sp_digit* b, const sp_digit m)
@@ -242,11 +224,6 @@
 
 /* Conditionally subtract b from a using the mask m.
  * m is -1 to subtract and 0 when not.
- *
- * r  A single precision number representing condition subtract result.
- * a  A single precision number to subtract from.
- * b  A single precision number to subtract.
- * m  Mask value to apply.
  */
 static void sp_256_cond_sub_10(sp_digit* r, const sp_digit* a,
         const sp_digit* b, const sp_digit m)
@@ -256,23 +233,7 @@
         r[i] = a[i] - (b[i] & m);
 }
 
-/* Add 1 to a. (a = a + 1)
- *
- * r  A single precision integer.
- * a  A single precision integer.
- */
-static void sp_256_add_one_10(sp_digit* a)
-{
-    a[0]++;
-    sp_256_norm_10(a);
-}
-
-/* Shift number left one bit.
- * Bottom bit is lost.
- *
- * r  Result of shift.
- * a  Number to shift.
- */
+/* Shift number left one bit. Bottom bit is lost. */
 static void sp_256_rshift1_10(sp_digit* r, sp_digit* a)
 {
     int i;
@@ -381,14 +342,8 @@
     r[9] = (sp_digit)(t[7] >> 10);
 }
 
-/* Mul a by scalar b and add into r. (r += a * b)
- *
- * r  A single precision integer.
- * a  A single precision integer.
- * b  A scalar.
- */
-static void sp_256_mul_add_10(sp_digit* r, const sp_digit* a,
-        const sp_digit b)
+/* Mul a by scalar b and add into r. (r += a * b) */
+static void sp_256_mul_add_10(sp_digit* r, const sp_digit* a, sp_digit b)
 {
     int64_t tb = b;
     int64_t t = 0;
@@ -402,12 +357,7 @@
     r[10] += t;
 }
 
-/* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m)
- *
- * r  Result of division by 2.
- * a  Number to divide.
- * m  Modulus (prime).
- */
+/* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m) */
 static void sp_256_div2_10(sp_digit* r, const sp_digit* a, const sp_digit* m)
 {
     sp_256_cond_add_10(r, a, m, 0 - (a[0] & 1));
@@ -415,11 +365,7 @@
     sp_256_rshift1_10(r, r);
 }
 
-/* Shift the result in the high 256 bits down to the bottom.
- *
- * r  A single precision number.
- * a  A single precision number.
- */
+/* Shift the result in the high 256 bits down to the bottom. */
 static void sp_256_mont_shift_10(sp_digit* r, const sp_digit* a)
 {
     int i;
@@ -438,13 +384,7 @@
     memset(&r[10], 0, sizeof(*r) * 10);
 }
 
-/* Add two Montgomery form numbers (r = a + b % m).
- *
- * r   Result of addition.
- * a   First number to add in Montogmery form.
- * b   Second number to add in Montogmery form.
- * m   Modulus (prime).
- */
+/* Add two Montgomery form numbers (r = a + b % m) */
 static void sp_256_mont_add_10(sp_digit* r, const sp_digit* a, const sp_digit* b,
         const sp_digit* m)
 {
@@ -454,12 +394,7 @@
     sp_256_norm_10(r);
 }
 
-/* Double a Montgomery form number (r = a + a % m).
- *
- * r   Result of doubling.
- * a   Number to double in Montogmery form.
- * m   Modulus (prime).
- */
+/* Double a Montgomery form number (r = a + a % m) */
 static void sp_256_mont_dbl_10(sp_digit* r, const sp_digit* a, const sp_digit* m)
 {
     sp_256_add_10(r, a, a);
@@ -468,12 +403,7 @@
     sp_256_norm_10(r);
 }
 
-/* Triple a Montgomery form number (r = a + a + a % m).
- *
- * r   Result of Tripling.
- * a   Number to triple in Montogmery form.
- * m   Modulus (prime).
- */
+/* Triple a Montgomery form number (r = a + a + a % m) */
 static void sp_256_mont_tpl_10(sp_digit* r, const sp_digit* a, const sp_digit* m)
 {
     sp_256_add_10(r, a, a);
@@ -486,27 +416,15 @@
     sp_256_norm_10(r);
 }
 
-/* Sub b from a into r. (r = a - b)
- *
- * r  A single precision integer.
- * a  A single precision integer.
- * b  A single precision integer.
- */
-static void sp_256_sub_10(sp_digit* r, const sp_digit* a,
-        const sp_digit* b)
+/* Sub b from a into r. (r = a - b) */
+static void sp_256_sub_10(sp_digit* r, const sp_digit* a, const sp_digit* b)
 {
     int i;
     for (i = 0; i < 10; i++)
         r[i] = a[i] - b[i];
 }
 
-/* Subtract two Montgomery form numbers (r = a - b % m).
- *
- * r   Result of subtration.
- * a   Number to subtract from in Montogmery form.
- * b   Number to subtract with in Montogmery form.
- * m   Modulus (prime).
- */
+/* Subtract two Montgomery form numbers (r = a - b % m) */
 static void sp_256_mont_sub_10(sp_digit* r, const sp_digit* a, const sp_digit* b,
         const sp_digit* m)
 {
@@ -554,12 +472,7 @@
     sp_256_norm_10(a);
 }
 
-/* Multiply a and b into r. (r = a * b)
- *
- * r  A single precision integer.
- * a  A single precision integer.
- * b  A single precision integer.
- */
+/* Multiply a and b into r. (r = a * b) */
 static void sp_256_mul_10(sp_digit* r, const sp_digit* a, const sp_digit* b)
 {
     int i, j, k;
@@ -600,11 +513,7 @@
     sp_256_mont_reduce_10(r, m, mp);
 }
 
-/* Square a and put result in r. (r = a * a)
- *
- * r  A single precision integer.
- * a  A single precision integer.
- */
+/* Square a and put result in r. (r = a * a) */
 static void sp_256_sqr_10(sp_digit* r, const sp_digit* a)
 {
     int i, j, k;
@@ -937,8 +846,8 @@
     else
         memcpy(r, t[0], sizeof(sp_point));
 
-    memset(tmp, 0, sizeof(tmp));
-    memset(td, 0, sizeof(td));
+    memset(tmp, 0, sizeof(tmp)); //paranoia
+    memset(td, 0, sizeof(td)); //paranoia
 }
 
 /* Multiply the base point of P256 by the scalar and return the result.
@@ -956,20 +865,20 @@
  * The number is 0 padded to maximum size on output.
  *
  * priv    Scalar to multiply the point by.
- * peerkey2x32   Point to multiply.
- * out     Buffer to hold X ordinate.
+ * pub2x32 Point to multiply.
+ * out32   Buffer to hold X ordinate.
  */
-static void sp_ecc_secret_gen_256(sp_digit priv[10], const uint8_t *peerkey2x32, uint8_t* out32)
+static void sp_ecc_secret_gen_256(sp_digit priv[10], const uint8_t *pub2x32, uint8_t* out32)
 {
     sp_point point[1];
 
 #if FIXED_PEER_PUBKEY
-    memset((void*)peerkey32, 0x55, 64);
+    memset((void*)pub2x32, 0x55, 64);
 #endif
-    dump_hex("peerkey32 %s\n", peerkey2x32, 32);
-    dump_hex("          %s\n", peerkey2x32 + 32, 32);
+    dump_hex("peerkey %s\n", pub2x32, 32); /* in TLS, this is peer's public key */
+    dump_hex("        %s\n", pub2x32 + 32, 32);
 
-    sp_256_point_from_bin2x32(point, peerkey2x32);
+    sp_256_point_from_bin2x32(point, pub2x32);
     dump_hex("point->x %s\n", point->x, sizeof(point->x));
     dump_hex("point->y %s\n", point->y, sizeof(point->y));
 
@@ -979,14 +888,18 @@
     dump_hex("out32: %s\n", out32, 32);
 }
 
-/* Generates a scalar that is in the range 1..order-1.
- *
- * rng  Random number generator.
- * k    Scalar value.
- */
+/* Generates a scalar that is in the range 1..order-1. */
+#define SIMPLIFY 1
+/* Add 1 to a. (a = a + 1) */
+#if !SIMPLIFY
+static void sp_256_add_one_10(sp_digit* a)
+{
+    a[0]++;
+    sp_256_norm_10(a);
+}
+#endif
 static void sp_256_ecc_gen_k_10(sp_digit k[10])
 {
-#define SIMPLIFY 1
 #if !SIMPLIFY
 	/* The order of the curve P256 minus 2. */
 	static const sp_digit p256_order2[10] = {
@@ -1007,7 +920,7 @@
 			break;
 #else
 		/* non-loopy version (and not needing p256_order2[]):
-		 * if most-significant word seems that it can be larger
+		 * if most-significant word seems that k can be larger
 		 * than p256_order2, fix it up:
 		 */
 		if (k[9] >= 0x03fffff)
@@ -1015,21 +928,22 @@
 		break;
 #endif
 	}
+#if !SIMPLIFY
 	sp_256_add_one_10(k);
+#else
+	if (k[0] == 0)
+		k[0] = 1;
+#endif
 #undef SIMPLIFY
 }
 
-/* Makes a random EC key pair.
- *
- * priv   Generated private value.
- * pubkey Generated public point.
- */
-static void sp_ecc_make_key_256(sp_digit k[10], uint8_t *pubkey)
+/* Makes a random EC key pair. */
+static void sp_ecc_make_key_256(sp_digit privkey[10], uint8_t *pubkey)
 {
 	sp_point point[1];
 
-	sp_256_ecc_gen_k_10(k);
-	sp_256_ecc_mulmod_base_10(point, k);
+	sp_256_ecc_gen_k_10(privkey);
+	sp_256_ecc_mulmod_base_10(point, privkey);
 	sp_256_to_bin(point->x, pubkey);
 	sp_256_to_bin(point->y, pubkey + 32);
 
@@ -1037,16 +951,16 @@
 }
 
 void FAST_FUNC curve_P256_compute_pubkey_and_premaster(
-		uint8_t *pubkey, uint8_t *premaster32,
+		uint8_t *pubkey2x32, uint8_t *premaster32,
 		const uint8_t *peerkey2x32)
 {
 	sp_digit privkey[10];
 
-	sp_ecc_make_key_256(privkey, pubkey);
-	dump_hex("pubkey: %s\n", pubkey, 32);
-	dump_hex("        %s\n", pubkey + 32, 32);
+	sp_ecc_make_key_256(privkey, pubkey2x32);
+	dump_hex("pubkey: %s\n", pubkey2x32, 32);
+	dump_hex("        %s\n", pubkey2x32 + 32, 32);
 
-	/* Combine our privkey and peerkey32 to generate premaster */
+	/* Combine our privkey and peer's public key to generate premaster */
 	sp_ecc_secret_gen_256(privkey, /*x,y:*/peerkey2x32, premaster32);
 	dump_hex("premaster: %s\n", premaster32, 32);
 }
