package

field

crypto/internal/fips140/v1.0.0-c2097c7c/edwards25519/field

Package field implements fast arithmetic modulo 2^255-19.

type Element source

type Element struct {
	// contains filtered or unexported fields
}

Element represents an element of the field GF(2^255-19). Note that this is not a cryptographically secure group, and should only be used to interact with edwards25519.Point coordinates.

This type works similarly to math/big.Int, and all arguments and receivers are allowed to alias.

The zero value is a valid zero element.

Methods

Absolutesource

func (v *Element) Absolute(u *Element) *Element

Absolute sets v to |u|, and returns v.

Addsource

func (v *Element) Add(a, b *Element) *Element

Add sets v = a + b, and returns v.

Bytessource

func (v *Element) Bytes() []byte

Bytes returns the canonical 32-byte little-endian encoding of v.

Equalsource

func (v *Element) Equal(u *Element) int

Equal returns 1 if v and u are equal, and 0 otherwise.

Invertsource

func (v *Element) Invert(z *Element) *Element

Invert sets v = 1/z mod p, and returns v.

If z == 0, Invert returns v = 0.

IsNegativesource

func (v *Element) IsNegative() int

IsNegative returns 1 if v is negative, and 0 otherwise.

Mult32source

func (v *Element) Mult32(x *Element, y uint32) *Element

Mult32 sets v = x * y, and returns v.

Multiplysource

func (v *Element) Multiply(x, y *Element) *Element

Multiply sets v = x * y, and returns v.

Negatesource

func (v *Element) Negate(a *Element) *Element

Negate sets v = -a, and returns v.

Onesource

func (v *Element) One() *Element

One sets v = 1, and returns v.

Pow22523source

func (v *Element) Pow22523(x *Element) *Element

Pow22523 set v = x^((p-5)/8), and returns v. (p-5)/8 is 2^252-3.

Selectsource

func (v *Element) Select(a, b *Element, cond int) *Element

Select sets v to a if cond == 1, and to b if cond == 0.

Setsource

func (v *Element) Set(a *Element) *Element

Set sets v = a, and returns v.

SetBytessource

func (v *Element) SetBytes(x []byte) (*Element, error)

SetBytes sets v to x, where x is a 32-byte little-endian encoding. If x is not of the right length, SetBytes returns nil and an error, and the receiver is unchanged.

Consistent with RFC 7748, the most significant bit (the high bit of the last byte) is ignored, and non-canonical values (2^255-19 through 2^255-1) are accepted. Note that this is laxer than specified by RFC 8032, but consistent with most Ed25519 implementations.

SqrtRatiosource

func (r *Element) SqrtRatio(u, v *Element) (R *Element, wasSquare int)

SqrtRatio sets r to the non-negative square root of the ratio of u and v.

If u/v is square, SqrtRatio returns r and 1. If u/v is not square, SqrtRatio sets r according to Section 4.3 of draft-irtf-cfrg-ristretto255-decaf448-00, and returns r and 0.

Squaresource

func (v *Element) Square(x *Element) *Element

Square sets v = x * x, and returns v.

Subtractsource

func (v *Element) Subtract(a, b *Element) *Element

Subtract sets v = a - b, and returns v.

Swapsource

func (v *Element) Swap(u *Element, cond int)

Swap swaps v and u if cond == 1 or leaves them unchanged if cond == 0, and returns v.

Zerosource

func (v *Element) Zero() *Element

Zero sets v = 0, and returns v.