key

package
v0.4.1 Latest Latest
Warning

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

Go to latest
Published: Dec 29, 2018 License: MIT Imports: 20 Imported by: 0

Documentation

Overview

Group is a list of Public keys providing helper methods to search and

Index

Constants

View Source
const ConfigFolderFlag = "homedir"

ConfigFolderFlag holds the name of the flag to set using the CLI to change the default configuration folder of drand. It mimicks the gpg flag option.

View Source
const GroupFolderName = "groups"
View Source
const KeyFolderName = "key"

Variables

View Source
var ErrAbsent = errors.New("store can't find requested object")

ErrAbsent returns

View Source
var ErrStoreFile = errors.New("store file issues")

ErrStoreFile returns an error in case the store can not save the requested file

View Source
var G1 = Pairing.G1()
View Source
var G2 = Pairing.G2()
View Source
var Pairing = bn256.NewSuite()

Functions

func DefaultThreshold

func DefaultThreshold(n int) int

func Load

func Load(path string, t Tomler) error

func PointToString added in v0.4.0

func PointToString(p kyber.Point) string

PointToString returns a hex-encoded string representation of the given point.

func Save

func Save(path string, t Tomler, secure bool) error

func ScalarToString added in v0.4.0

func ScalarToString(s kyber.Scalar) string

ScalarToString returns a hex-encoded string representation of the given scalar.

func StringToPoint added in v0.4.0

func StringToPoint(g kyber.Group, s string) (kyber.Point, error)

StringToPoint unmarshals a point in the given group from the given string.

func StringToScalar added in v0.4.0

func StringToScalar(g kyber.Group, s string) (kyber.Scalar, error)

StringToScalar unmarshals a scalar in the given group from the given string.

Types

type BeaconSignature

type BeaconSignature struct {
	Timestamp   int64
	PreviousSig string
	Signature   string
}

BeaconSignature is the final reconstructed BLS signature that is saved in the filesystem.

func NewBeaconSignature

func NewBeaconSignature(timestamp int64, previousSig, signature []byte) *BeaconSignature

NewBeaconSignature initializes a beacon signature from - a timestamp - a previous sig. Can be nil if there is no previous signature - a signature of the timestamp and the previous sig

func (*BeaconSignature) FromTOML

func (b *BeaconSignature) FromTOML(i interface{}) error

FromTOML initializes b from a TOML-compatible version of a beacon signature

func (*BeaconSignature) RawSig

func (b *BeaconSignature) RawSig() []byte

RawSig returns the signature

func (*BeaconSignature) TOML

func (b *BeaconSignature) TOML() interface{}

TOML returns a TOML-compatible version of this beacon signature

func (*BeaconSignature) TOMLValue

func (b *BeaconSignature) TOMLValue() interface{}

TOMLValue returns an empty TOML-compatible version of a beacon signature

type ByKey

type ByKey []*Identity

ByKey is simply an interface to sort lexig

func (ByKey) Len

func (b ByKey) Len() int

func (ByKey) Less

func (b ByKey) Less(i, j int) bool

func (ByKey) Swap

func (b ByKey) Swap(i, j int)

type DistPublic

type DistPublic struct {
	Coefficients []kyber.Point
}

DistPublic represents the distributed public key generated during a DKG. This is the information that can be safely exported to end users verifying a drand signature. It is the list of all commitments of the coefficients of the private distributed polynomial.

func (*DistPublic) FromTOML

func (d *DistPublic) FromTOML(i interface{}) error

FromTOML initializes d from the TOML-compatible version of a DistPublic

func (*DistPublic) Key

func (d *DistPublic) Key() kyber.Point

Key returns the first coefficient as representing the public key to be used to verify signatures issued by the distributed key.

func (*DistPublic) TOML

func (d *DistPublic) TOML() interface{}

TOML returns a TOML-compatible version of d

func (*DistPublic) TOMLValue

func (d *DistPublic) TOMLValue() interface{}

TOMLValue returns an empty TOML-compatible dist public interface

type DistPublicTOML

type DistPublicTOML struct {
	Coefficients []string
}

DistPublicTOML is a TOML compatible value of a DistPublic

type Group

type Group struct {
	// List of identities forming this group
	Nodes []*Identity
	// The distributed public key of this group. It is nil if the group has not
	// ran a DKG protocol yet.
	PublicKey *DistPublic
	// Threshold to setup during the DKG or resharing protocol.
	Threshold int
	// Period to use for the beacon randomness generation
	Period time.Duration
}

Group holds all information about a group of drand nodes.

func LoadGroup added in v0.4.0

func LoadGroup(list []*Identity, public *DistPublic, threshold int) *Group

LoadGroup returns a group associated with a given public key

func NewGroup

func NewGroup(list []*Identity, threshold int) *Group

NewGroup returns a list of identities as a Group.

func (*Group) Contains

func (g *Group) Contains(pub *Identity) bool

Contains returns true if the public key is contained in the list or not.

func (*Group) FromTOML

func (g *Group) FromTOML(i interface{}) (err error)

FromTOML decodes the group from the toml struct

func (*Group) Hash added in v0.4.0

func (g *Group) Hash() (string, error)

Hash returns an unique short representation of this group. NOTE: It currently does NOT take into account the distributed public key when set for simplicity (we want old nodes and new nodes to easily refer to the same group for example). This may cause trouble in the future and may require more thoughts.

func (*Group) Identities

func (g *Group) Identities() []*Identity

func (*Group) Index

func (g *Group) Index(pub *Identity) (int, bool)

Index returns the index of the given public key with a boolean indicating whether the public has been found or not.

func (*Group) Len

func (g *Group) Len() int

Len returns the number of participants in the group

func (*Group) MergeGroup added in v0.4.0

func (g *Group) MergeGroup(list []*Identity) *Group

MergeGroup returns a NEW group with both list of identities combined, the maximum between the default threshold and the group's threshold, and with the same period as the group.

func (*Group) Points

func (g *Group) Points() []kyber.Point

Points returns itself under the form of a list of kyber.Point

func (*Group) Public

func (g *Group) Public(i int) *Identity

Public returns the public associated to that index or panic otherwise. XXX Change that to return error

func (*Group) TOML

func (g *Group) TOML() interface{}

TOML returns a TOML-encodable version of the Group

func (*Group) TOMLValue

func (g *Group) TOMLValue() interface{}

TOMLValue returns an empty TOML-compatible value of the group

type GroupTOML

type GroupTOML struct {
	Nodes     []*PublicTOML
	PublicKey *DistPublicTOML
	Threshold int
	Period    string
}

GroupTOML is the representation of a Group TOML compatible

type Identity

type Identity struct {
	Key  kyber.Point
	Addr string
	TLS  bool
}

Identity holds the corresponding public key of a Private. It also includes a valid internet facing ipv4 address where to this reach the node holding the public / private key pair.

func (*Identity) Address

func (i *Identity) Address() string

Address implements the net.Peer interface

func (*Identity) Equal

func (p *Identity) Equal(p2 *Identity) bool

Equal returns true if the cryptographic public key of p equals p2's

func (*Identity) FromTOML

func (p *Identity) FromTOML(i interface{}) error

FromTOML loads reads the TOML description of the public key

func (*Identity) IsTLS added in v0.3.7

func (i *Identity) IsTLS() bool

func (*Identity) TOML

func (p *Identity) TOML() interface{}

TOML returns a empty TOML-compatible version of the public key

func (*Identity) TOMLValue

func (p *Identity) TOMLValue() interface{}

TOMLValue returns a TOML-compatible interface value

type Pair added in v0.3.6

type Pair struct {
	Key    kyber.Scalar
	Public *Identity
}

Pair is a wrapper around a random scalar and the corresponding public key in G2

func NewKeyPair

func NewKeyPair(address string) *Pair

NewKeyPair returns a freshly created private / public key pair. The group is decided by the group variable by default. Currently, drand only supports bn256.

func NewTLSKeyPair added in v0.3.7

func NewTLSKeyPair(address string) *Pair

func (*Pair) FromTOML added in v0.3.6

func (p *Pair) FromTOML(i interface{}) error

FromTOML constructs the private key from an unmarshalled structure from TOML

func (*Pair) TOML added in v0.3.6

func (p *Pair) TOML() interface{}

TOML returns a struct that can be marshalled using a TOML-encoding library

func (*Pair) TOMLValue added in v0.3.6

func (p *Pair) TOMLValue() interface{}

TOMLValue returns an empty TOML-compatible interface value

type PairTOML added in v0.3.6

type PairTOML struct {
	Key string
}

PairTOML is the TOML-able version of a private key

type PublicTOML

type PublicTOML struct {
	Address string
	Key     string
	TLS     bool
}

PublicTOML is the TOML-able version of a public key

type Share

type Share dkg.DistKeyShare

Share represents the private information that a node holds after a successful DKG. This information MUST stay private !

func (*Share) FromTOML

func (s *Share) FromTOML(i interface{}) error

FromTOML initializes the share from the given TOML-compatible share interface

func (*Share) Public

func (s *Share) Public() *DistPublic

Public returns the distributed public key associated with the distributed key share

func (*Share) TOML

func (s *Share) TOML() interface{}

TOML returns a TOML-compatible version of this share

func (*Share) TOMLValue

func (s *Share) TOMLValue() interface{}

TOMLValue returns an empty TOML compatible interface of that Share

type ShareTOML

type ShareTOML struct {
	// index of the share.
	Index int
	// evaluation of the private polynomial.
	Share string
	// coefficients of the public polynomial.
	Commits []string
	// coefficients of the individual private polynomial generated by the node
	// at the given index.
	PrivatePoly []string
}

ShareTOML is the TOML representation of a dkg.DistKeyShare

type Store

type Store interface {
	// SaveKeyPair saves the private key generated by drand as well as the
	// public identity key associated
	SaveKeyPair(p *Pair) error
	// LoadKeyPair loads the private/public key pair associated with the drand
	// operator
	LoadKeyPair() (*Pair, error)
	SaveShare(share *Share) error
	LoadShare() (*Share, error)
	SaveGroup(*Group) error
	LoadGroup() (*Group, error)
	SaveDistPublic(d *DistPublic) error
	LoadDistPublic() (*DistPublic, error)
}

Store abstracts the loading and saving of any private/public cryptographic material to be used by drand. For the moment, only a file based store is implemented.

func NewFileStore

func NewFileStore(baseFolder string) Store

NewDefaultFileStore is used to create the config folder and all the subfolders. If a folder alredy exists, we simply check the rights

type Tomler

type Tomler interface {
	TOML() interface{}
	FromTOML(i interface{}) error
	TOMLValue() interface{}
}

Tomler represents any struct that can be (un)marshalled into/from toml format

Jump to

Keyboard shortcuts

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