Documentation ¶
Overview ¶
Package edwards25519 provides an optimized Go implementation of a Twisted Edwards curve that is isomorphic to Curve25519. For details see: http://ed25519.cr.yp.to/.
This code is based on Adam Langley's Go port of the public domain, "ref10" implementation of the ed25519 signing scheme in C from SUPERCOP. It was generalized and extended to support full kyber.Group arithmetic by the DEDIS lab at Yale and EPFL.
Due to the field element and group arithmetic optimizations described in the Ed25519 paper, this implementation generally performs extremely well, typically comparable to native C implementations. The tradeoff is that this code is completely specialized to a single curve.
Index ¶
- func PrivateKeyToCurve25519(curve25519Private *[32]byte, privateKey *[64]byte)
- func PublicKeyToCurve25519(curve25519Public *[32]byte, publicKey *[32]byte) bool
- type Curve
- type SuiteEd25519
- func (s *SuiteEd25519) Hash() hash.Hash
- func (s *SuiteEd25519) New(t reflect.Type) interface{}
- func (s *SuiteEd25519) RandomStream() cipher.Stream
- func (s *SuiteEd25519) Read(r io.Reader, objs ...interface{}) error
- func (s *SuiteEd25519) Write(w io.Writer, objs ...interface{}) error
- func (s *SuiteEd25519) XOF(key []byte) kyber.XOF
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func PrivateKeyToCurve25519 ¶
PrivateKeyToCurve25519 converts an ed25519 private key into a corresponding curve25519 private key such that the resulting curve25519 public key will equal the result from PublicKeyToCurve25519.
func PublicKeyToCurve25519 ¶
PublicKeyToCurve25519 converts an Ed25519 public key into the curve25519 public key that would be generated from the same private key.
Types ¶
type Curve ¶
type Curve struct { }
Curve represents the Ed25519 group. There are no parameters and no initialization is required because it supports only this one specific curve.
func (*Curve) NewKey ¶
NewKey returns a formatted Ed25519 key (avoiding subgroup attack by requiring it to be a multiple of 8). NewKey implements the kyber/util/key.Generator interface.
func (*Curve) PointLen ¶
PointLen returns 32, the size in bytes of an encoded Point on the Ed25519 curve.
func (*Curve) Scalar ¶
Scalar creates a new Scalar for the prime-order subgroup of the Ed25519 curve. The scalars in this package implement kyber.Scalar's SetBytes method, interpreting the bytes as a little-endian integer, in order to remain compatible with other Ed25519 implementations, and with the standard implementation of the EdDSA signature.
type SuiteEd25519 ¶
type SuiteEd25519 struct { Curve // contains filtered or unexported fields }
SuiteEd25519 implements some basic functionalities such as Group, HashFactory, and XOFFactory.
func NewBlakeSHA256Ed25519 ¶
func NewBlakeSHA256Ed25519() *SuiteEd25519
NewBlakeSHA256Ed25519 returns a cipher suite based on package github.com/dedis/kyber/xof/blake2xb, SHA-256, and the Ed25519 curve. It produces cryptographically random numbers via package crypto/rand.
func NewBlakeSHA256Ed25519WithRand ¶
func NewBlakeSHA256Ed25519WithRand(r cipher.Stream) *SuiteEd25519
NewBlakeSHA256Ed25519WithRand returns a cipher suite based on package github.com/dedis/kyber/xof/blake2xb, SHA-256, and the Ed25519 curve. It produces cryptographically random numbers via the provided stream r.
func (*SuiteEd25519) Hash ¶
func (s *SuiteEd25519) Hash() hash.Hash
Hash returns a newly instanciated sha256 hash function.
func (*SuiteEd25519) New ¶
func (s *SuiteEd25519) New(t reflect.Type) interface{}
New implements the kyber.Encoding interface
func (*SuiteEd25519) RandomStream ¶
func (s *SuiteEd25519) RandomStream() cipher.Stream
RandomStream returns a cipher.Stream that returns a key stream from crypto/rand.