internal

package
v0.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 11, 2023 License: BSD-3-Clause Imports: 2 Imported by: 0

Documentation

Overview

Package internal wraps all nist and ristretto255 curves into interfaces

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrParamNilPoint indicated a forbidden nil or empty point.
	ErrParamNilPoint = errors.New("nil or empty point")

	// ErrParamNilScalar indicates a forbidden nil or empty scalar.
	ErrParamNilScalar = errors.New("nil or empty scalar")

	// ErrCastElement indicates a failed attempt to cast to a point.
	ErrCastElement = errors.New("could not cast to same group element (you should not use different group e.g. P224 and P256)")

	// ErrCastScalar indicates a failed attempt to cast to a scalar.
	ErrCastScalar = errors.New("could not cast to same group scalar (you should not use different group e.g. P224 and P256)")

	// ErrWrongField indicates an incompatible field has been encountered.
	ErrWrongField = errors.New("incompatible field (different prime)")
)

Functions

This section is empty.

Types

type Element

type Element interface {
	// Base sets the element to the group's base point a.k.a. canonical generator.
	Base() Element

	// Identity sets the element to the point at infinity of the Group's underlying curve.
	Identity() Element

	// Add sets the receiver to the sum of the input and the receiver, and returns the receiver.
	Add(ee Element) Element

	// Double sets the receiver to its double, and returns it.
	Double() Element

	// Negate sets the receiver to its negation, and returns it.
	Negate() Element

	// Subtract subtracts the input from the receiver, and returns the receiver.
	Subtract(ee Element) Element

	// Multiply sets the receiver to the scalar multiplication of the receiver with the given Scalar, and returns it.
	// If s parameter is nil, then the receiver is not modified
	Multiply(s Scalar) Element

	// Equal returns 1 if the elements are equivalent, and 0 otherwise.
	Equal(ee Element) int

	// IsIdentity returns whether the Element is the point at infinity of the Group's underlying curve.
	IsIdentity() bool

	// Set sets the receiver to ee if not nil; else the receiver not modified; returns the receiver.
	Set(ee Element) Element

	// Copy returns a copy of the receiver.
	Copy() Element

	// Encode returns the compressed byte encoding of the element.
	Encode() []byte

	// Decode sets the receiver to a decoding of the input data, and returns an error on failure.
	Decode(data []byte) error

	// BinaryMarshaler implementation.
	encoding.BinaryMarshaler

	// BinaryUnmarshaler implementation.
	encoding.BinaryUnmarshaler

	// TextMarshaler implementation.
	encoding.TextMarshaler

	// TextUnmarshaler implementation.
	encoding.TextUnmarshaler
}

Element interface represents the element of underlying curve's element

type Group

type Group interface {
	// NewScalar returns a new, empty, scalar.
	NewScalar() Scalar

	// NewElement returns the identity element (point at infinity).
	NewElement() Element

	// RandomScalar returns randomly generated scalar.
	RandomScalar() Scalar

	// RandomElement returns randomly generated element.
	RandomElement() Element

	// Base returns the group's base point a.k.a. canonical generator.
	Base() Element

	// HashToScalar returns a safe mapping of the arbitrary input to a Scalar.
	// The DST must not be empty or nil, and is recommended to be longer than 16 bytes.
	HashToScalar(input, dst []byte) Scalar

	// HashToGroup returns a safe mapping of the arbitrary input to an Element in the Group.
	// The DST must not be empty or nil, and is recommended to be longer than 16 bytes.
	HashToGroup(input, dst []byte) Element

	// EncodeToGroup returns a non-uniform mapping of the arbitrary input to an Element in the Group.
	// The DST must not be empty or nil, and is recommended to be longer than 16 bytes.
	EncodeToGroup(input, dst []byte) Element

	// Ciphersuite returns the hash-to-curve ciphersuite identifier.
	Ciphersuite() string

	// ScalarLength returns the byte size of an encoded scalar.
	ScalarLength() uint

	// ElementLength returns the byte size of an encoded element.
	ElementLength() uint
}

Group interface represents the prime-order group

type Scalar

type Scalar interface {
	// Zero sets the scalar to 0, and returns it.
	Zero() Scalar

	// One sets the scalar to 1, and returns it.
	One() Scalar

	// Random sets the current scalar to a new random scalar and returns it.
	// The random source is crypto/rand, and this functions is guaranteed to return a non-zero scalar.
	Random() Scalar

	// Add sets the receiver to the sum of the input and the receiver, and returns the receiver.
	Add(s Scalar) Scalar

	// Subtract subtracts the input from the receiver, and returns the receiver.
	Subtract(s Scalar) Scalar

	// Multiply multiplies the receiver with the input, and returns the receiver.
	// If s parameter is nil, then the receiver is not modified
	Multiply(s Scalar) Scalar

	// Invert sets the receiver to the scalar's modular inverse ( 1 / scalar ), and returns it.
	Invert() Scalar

	// Equal returns 1 if the scalars are equal, and 0 otherwise.
	Equal(s Scalar) int

	// IsZero returns whether the scalar is 0.
	IsZero() bool

	// Set sets the receiver to the value of the argument scalar, and returns the receiver.
	// If s parameter is nil, then the receiver is not modified
	Set(s Scalar) Scalar

	// Copy returns a copy of the receiver.
	Copy() Scalar

	// Encode returns the compressed byte encoding of the scalar.
	Encode() []byte

	// Decode sets the receiver to a decoding of the input data, and returns an error on failure.
	Decode(in []byte) error

	// BinaryMarshaler returns a byte representation of the element.
	encoding.BinaryMarshaler

	// BinaryUnmarshaler recovers an element from a byte representation
	// produced either by encoding.BinaryMarshaler or MarshalBinaryCompress.
	encoding.BinaryUnmarshaler

	// TextMarshaler returns a base64 standard string encoding of the element.
	encoding.TextMarshaler

	// TextUnmarshaler sets the base64 standard string encoding of the element.
	encoding.TextUnmarshaler
}

Scalar interface represents the scalar of underlying curve's scalar

Directories

Path Synopsis
Package nist implements nist's curves prime-order group
Package nist implements nist's curves prime-order group
Package r255 implements Ristretto255 curve prime-order groups with backend "filippo.io/edwards25519"
Package r255 implements Ristretto255 curve prime-order groups with backend "filippo.io/edwards25519"

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL