Browse Source

simpler decode if cofactor 4

master
Michael Hamburg 7 years ago
parent
commit
19aa251968
1 changed files with 23 additions and 16 deletions
  1. +23
    -16
      aux/ristretto.sage

+ 23
- 16
aux/ristretto.sage View File

@@ -298,25 +298,32 @@ class Decaf_1_1_Point(QuotientEdwardsPoint):
"""Encode, optimized version"""
a,d = self.a,self.d
x,y,z,t = self.xyzt()
if x==0 or y==0: return(self.gfToBytes(0))
num = (z+y)*(z-y)
den = t*z
tmp = isqrt(num*(a-d)*den^2)
if self.cofactor == 8:
num = (z+y)*(z-y)
den = x*y
tmp = isqrt(num*(a-d)*den^2)
if self.cofactor==8 and negative(tmp^2*den*num*(a-d)*t^2*self.isoMagic):
den,num = num,den
tmp *= sqrt(a-d) # witness that cofactor is 8
yisr = x*sqrt(a)
toggle = (a==1)
else:
yisr = y*(a*d-1)
toggle = False
if negative(tmp^2*den*num*(a-d)*t^2*self.isoMagic):
den,num = num,den
tmp *= sqrt(a-d) # witness that cofactor is 8
yisr = x*sqrt(a)
toggle = (a==1)
else:
yisr = y*(a*d-1)
toggle = False
tiisr = tmp*num
altx = tiisr*t*self.isoMagic
if negative(altx) != toggle: tiisr =- tiisr
s = tmp*den*yisr*(tiisr*z - 1)
tiisr = tmp*num
altx = tiisr*t*self.isoMagic
if negative(altx) != toggle: tiisr =- tiisr
s = tmp*den*yisr*(tiisr*z - 1)
else:
num = (x+t)*(x-t)
tmp = isqrt(num*(a-d)*x^2)
ratio = tmp*num
if negative(ratio*self.isoMagic): ratio=-ratio
s = (a-d)*x*tmp*(z*ratio - t)
return self.gfToBytes(s,mustBePositive=True)


||||||
x
 
000:0
Loading…
Cancel
Save