Function fromBytes [src]
Decode a Ristretto255 representative.
  Prototype
 pub fn fromBytes(s: [encoded_length]u8) (NonCanonicalError || EncodingError)!Ristretto255  Parameters
s: [encoded_length]u8 Source
 pub fn fromBytes(s: [encoded_length]u8) (NonCanonicalError || EncodingError)!Ristretto255 {
    try rejectNonCanonical(s);
    const s_ = Fe.fromBytes(s);
    const ss = s_.sq(); // s^2
    const u1_ = Fe.one.sub(ss); // (1-s^2)
    const u1u1 = u1_.sq(); // (1-s^2)^2
    const u2_ = Fe.one.add(ss); // (1+s^2)
    const u2u2 = u2_.sq(); // (1+s^2)^2
    const v = Fe.edwards25519d.mul(u1u1).neg().sub(u2u2); // -(d*u1^2)-u2^2
    const v_u2u2 = v.mul(u2u2); // v*u2^2
    const inv_sqrt = sqrtRatioM1(Fe.one, v_u2u2);
    var x = inv_sqrt.root.mul(u2_);
    const y = inv_sqrt.root.mul(x).mul(v).mul(u1_);
    x = x.mul(s_);
    x = x.add(x).abs();
    const t = x.mul(y);
    if ((1 - inv_sqrt.ratio_is_square) | @intFromBool(t.isNegative()) | @intFromBool(y.isZero()) != 0) {
        return error.InvalidEncoding;
    }
    const p: Curve = .{
        .x = x,
        .y = y,
        .z = Fe.one,
        .t = t,
    };
    return Ristretto255{ .p = p };
}