Function toBytes [src]

Encode to a Ristretto255 representative.

Prototype

pub fn toBytes(e: Ristretto255) [encoded_length]u8

Parameters

e: Ristretto255

Source

pub fn toBytes(e: Ristretto255) [encoded_length]u8 { const p = &e.p; var u1_ = p.z.add(p.y); // Z+Y const zmy = p.z.sub(p.y); // Z-Y u1_ = u1_.mul(zmy); // (Z+Y)*(Z-Y) const u2_ = p.x.mul(p.y); // X*Y const u1_u2u2 = u2_.sq().mul(u1_); // u1*u2^2 const inv_sqrt = sqrtRatioM1(Fe.one, u1_u2u2); const den1 = inv_sqrt.root.mul(u1_); const den2 = inv_sqrt.root.mul(u2_); const z_inv = den1.mul(den2).mul(p.t); // den1*den2*T const ix = p.x.mul(Fe.sqrtm1); // X*sqrt(-1) const iy = p.y.mul(Fe.sqrtm1); // Y*sqrt(-1) const eden = den1.mul(Fe.edwards25519sqrtamd); // den1/sqrt(a-d) const t_z_inv = p.t.mul(z_inv); // T*z_inv const rotate = @intFromBool(t_z_inv.isNegative()); var x = p.x; var y = p.y; var den_inv = den2; x.cMov(iy, rotate); y.cMov(ix, rotate); den_inv.cMov(eden, rotate); const x_z_inv = x.mul(z_inv); const yneg = y.neg(); y.cMov(yneg, @intFromBool(x_z_inv.isNegative())); return p.z.sub(y).mul(den_inv).abs().toBytes(); }