class Noble::Ed25519::RistrettoPoint

Overview

** Each ed25519/ExtendedPoint has 8 different equivalent points. This can be a source of bugs for protocols like ring signatures. Ristretto was created to solve this. Ristretto point operates in X:Y:Z:T extended coordinates like ExtendedPoint, but it should work in its own namespace: do not combine those two. https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-ristretto255-decaf448 /

Defined in:

noble-ed25519.cr

Constant Summary

BASE = RistrettoPoint.new(ExtendedPoint::BASE)
ZERO = RistrettoPoint.new(ExtendedPoint::ZERO)

Constructors

Instance Method Summary

Constructor Detail

def self.fromHex(hex : Hex) : RistrettoPoint #

** Converts ristretto-encoded string to ristretto point. https://ristretto.group/formulas/decoding.html @param hex Ristretto-encoded 32 bytes. Not every 32-byte string is valid ristretto encoding /


[View source]
def self.hashToCurve(hex : Hex) : RistrettoPoint #

** Takes uniform output of 64-bit hash function like sha512 and converts it to RistrettoPoint. The hash-to-group operation applies Elligator twice and adds the results. Note: this is one-way map, there is no conversion from point to hash. https://ristretto.group/formulas/elligator.html @param hex 64-bit output of a hash function /


[View source]
def self.new(ep : ExtendedPoint) #

Private property to discourage combining ExtendedPoint + RistrettoPoint Always use Ristretto encoding/decoding instead.


[View source]

Instance Method Detail

def ==(other : RistrettoPoint) : Bool #

[View source]
def add(other : RistrettoPoint) : RistrettoPoint #

[View source]
def ep : ExtendedPoint #

[View source]
def ep=(ep : ExtendedPoint) #

[View source]
def equals(other : RistrettoPoint) : Bool #

Compare one point to another.


[View source]
def multiply(scalar : Int) : RistrettoPoint #

[View source]
def multiplyUnsafe(scalar : Int) : RistrettoPoint #

[View source]
def subtract(other : RistrettoPoint) : RistrettoPoint #

[View source]
def toHex : String #

[View source]
def toRawBytes : Bytes #

** Encodes ristretto point to Bytes. https ://ristretto.group/formulas/encoding.html /


[View source]
def toString : String #

[View source]