Avoid overflow in newhope.go.

Depending on bittedness of the runner, uint16 * uint16 can overflow an int.
There's other computations that can overflow a uint32 as well, so I just made
everything uint64 to avoid thinking about it too much.

Change-Id: Ia3c976987f39f78285c865a2d7688600d73c2514
Reviewed-on: https://boringssl-review.googlesource.com/8193
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/ssl/test/runner/newhope/newhope.go b/ssl/test/runner/newhope/newhope.go
index 36c2c85..8f7a530 100644
--- a/ssl/test/runner/newhope/newhope.go
+++ b/ssl/test/runner/newhope/newhope.go
@@ -153,24 +153,24 @@
 // details of how this works.
 func ntt(in *Poly, omega, preScaleBase, postScaleBase, postScale uint16) *Poly {
 	out := new(Poly)
-	omega_to_the_i := 1
+	omega_to_the_i := uint64(1)
 
 	for i := range out {
-		omegaToTheIJ := 1
-		preScale := int(1)
-		sum := 0
+		omegaToTheIJ := uint64(1)
+		preScale := uint64(1)
+		sum := uint64(0)
 
 		for j := range in {
-			t := (int(in[j]) * preScale) % q
+			t := (uint64(in[j]) * preScale) % q
 			sum += (t * omegaToTheIJ) % q
 			omegaToTheIJ = (omegaToTheIJ * omega_to_the_i) % q
-			preScale = (int(preScaleBase) * preScale) % q
+			preScale = (uint64(preScaleBase) * preScale) % q
 		}
 
-		out[i] = uint16((sum * int(postScale)) % q)
+		out[i] = uint16((sum * uint64(postScale)) % q)
 
-		omega_to_the_i = (omega_to_the_i * int(omega)) % q
-		postScale = uint16((int(postScale) * int(postScaleBase)) % q)
+		omega_to_the_i = (omega_to_the_i * uint64(omega)) % q
+		postScale = uint16((uint64(postScale) * uint64(postScaleBase)) % q)
 	}
 
 	return out
@@ -255,7 +255,7 @@
 
 	bFreq := new(Poly)
 	for i := range bFreq {
-		bFreq[i] = uint16((int(sFreq[i])*int(aFreq[i]) + int(eFreq[i])) % q)
+		bFreq[i] = uint16((uint64(sFreq[i])*uint64(aFreq[i]) + uint64(eFreq[i])) % q)
 	}
 
 	offerMsg = encodePoly(bFreq)
@@ -279,18 +279,18 @@
 
 	uFreq := new(Poly)
 	for i := range uFreq {
-		uFreq[i] = uint16((int(sPrimeFreq[i])*int(aFreq[i]) + int(ePrimeFreq[i])) % q)
+		uFreq[i] = uint16((uint64(sPrimeFreq[i])*uint64(aFreq[i]) + uint64(ePrimeFreq[i])) % q)
 	}
 
 	vFreq := new(Poly)
 	for i := range vFreq {
-		vFreq[i] = uint16((int(sPrimeFreq[i]) * int(bFreq[i])) % q)
+		vFreq[i] = uint16((uint64(sPrimeFreq[i]) * uint64(bFreq[i])) % q)
 	}
 
 	v := inverseNTT(vFreq)
 	ePrimePrime := sampleNoise(rand)
 	for i := range v {
-		v[i] = uint16((int(v[i]) + int(ePrimePrime[i])) % q)
+		v[i] = uint16((uint64(v[i]) + uint64(ePrimePrime[i])) % q)
 	}
 
 	rec := helprec(rand, v)
@@ -311,7 +311,7 @@
 	rec := decodeRec(acceptMsg[encodedPolyLen:])
 
 	for i, u := range uFreq {
-		uFreq[i] = uint16((int(u) * int(sk[i])) % q)
+		uFreq[i] = uint16((uint64(u) * uint64(sk[i])) % q)
 	}
 	u := inverseNTT(uFreq)