key

package
v0.6.1 Latest Latest
Warning

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

Go to latest
Published: Apr 8, 2020 License: MIT Imports: 22 Imported by: 8

Documentation

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"

GroupFolderName is the name of the folder where drand keeps its group files

View Source
const KeyFolderName = "key"

KeyFolderName is the name of the folder where drand keeps its keys

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 KeyGroup = Pairing.G1()

KeyGroup is the group used to create the keys

View Source
var Pairing = bls.NewBLS12381Suite()

Pairing is the main pairing suite used by drand. New interesting curves should be allowed by drand, such as BLS12-381.

Scheme is the signature scheme used, defining over which curve the signature and keys respectively are.

View Source
var SigGroup = Pairing.G2()

SigGroup is the group used to create the signatures; it must always be different than KeyGroup: G1 key group and G2 sig group or G1 sig group and G2 keygroup.

Functions

func DefaultThreshold

func DefaultThreshold(n int) int

DefaultThreshold return floor(n / 2) + 1

func Delete added in v0.5.2

func Delete(path string) error

Delete the resource denoted by the given path. If it is a file, it deletes the file; if it is a folder it delete the folder and all its content.

func Load

func Load(path string, t Tomler) error

Load the given Tomler from the given file path.

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

Save the given Tomler interface to the given path. If secure is true, the file will have a 0700 security.

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) Equal added in v0.5.2

func (d *DistPublic) Equal(d2 *DistPublic) bool

Equal returns if all coefficients of the public key d are equal to those of d2

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 {
	// Threshold to setup during the DKG or resharing protocol.
	Threshold int
	// Period to use for the beacon randomness generation
	Period time.Duration
	// List of identities forming this group
	Nodes []*Identity
	// Time at which the first round of the chain is mined
	GenesisTime int64
	// Seed of the genesis block. When doing a DKG from scratch, it will be
	// populated directly from the list of nodes and other parameters. WHen
	// doing a resharing, this seed is taken from the first group of the
	// network.
	GenesisSeed []byte
	// In case of a resharing, this is the time at which the network will
	// transition from the old network to the new network.
	TransitionTime int64
	// The distributed public key of this group. It is nil if the group has not
	// ran a DKG protocol yet.
	PublicKey *DistPublic
}

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, genesis int64) *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) GetGenesisSeed added in v0.6.1

func (g *Group) GetGenesisSeed() []byte

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

Identities return the underlying slice of identities

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) String added in v0.5.2

func (g *Group) String() string

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 {
	Threshold      int
	Period         string
	Nodes          []*PublicTOML
	GenesisTime    int64
	TransitionTime int64  `toml:omitempty`
	GenesisSeed    string `toml:omitempty`
	PublicKey      *DistPublicTOML
}

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 (i *Identity) Equal(p2 *Identity) bool

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

func (*Identity) FromTOML

func (i *Identity) FromTOML(t 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

IsTLS returns true if this address is reachable over TLS.

func (*Identity) TOML

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

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

func (*Identity) TOMLValue

func (i *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

NewTLSKeyPair returns a fresh keypair associated with the given address reachable over TLS.

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 ResetOption added in v0.5.2

type ResetOption int

ResetOption is an option to allow for fine-grained reset operations

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) PrivateShare added in v0.5.2

func (s *Share) PrivateShare() *share.PriShare

PrivateShare returns the private share used to produce a partial signature

func (*Share) PubPoly added in v0.5.2

func (s *Share) PubPoly() *share.PubPoly

PubPoly returns the public polynomial that can be used to verify any individual patial signature

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)
	Reset(...ResetOption) 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

NewFileStore 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