From 070fa146ecbc9c303e821c64bfad5805008b0c07 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Fri, 3 May 2019 15:35:23 -0700 Subject: [PATCH] internal/scalar: add constant-time signed radix 16 Closes #10 --- internal/scalar/scalar.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/internal/scalar/scalar.go b/internal/scalar/scalar.go index 59b5701..18f4767 100644 --- a/internal/scalar/scalar.go +++ b/internal/scalar/scalar.go @@ -958,3 +958,22 @@ func (s *Scalar) NonAdjacentForm(w uint) [256]int8 { } return naf } + +func (s *Scalar) SignedRadix16() [64]int8 { + var digits [64]int8 + + // Compute unsigned radix-16 digits: + for i := 0; i < 32; i++ { + digits[2*i] = i8(s[i]) & 15 + digits[2*i+1] = i8(s[i]>>4) & 15 + } + + // Recenter coefficients: + for i := 0; i < 63; i++ { + carry := (digits[i] + 8) >> 4 + digits[i] -= carry << 4 + digits[i+1] += carry + } + + return digits +}