main
Raw Download raw file
 1// Package ecc implements a generic interface for ECDH, ECDSA, and EdDSA.
 2package ecc
 3
 4import (
 5	"io"
 6	"math/big"
 7)
 8
 9type Curve interface {
10	GetCurveName() string
11}
12
13type ECDSACurve interface {
14	Curve
15	MarshalIntegerPoint(x, y *big.Int) []byte
16	UnmarshalIntegerPoint([]byte) (x, y *big.Int)
17	MarshalIntegerSecret(d *big.Int) []byte
18	UnmarshalIntegerSecret(d []byte) *big.Int
19	GenerateECDSA(rand io.Reader) (x, y, secret *big.Int, err error)
20	Sign(rand io.Reader, x, y, d *big.Int, hash []byte) (r, s *big.Int, err error)
21	Verify(x, y *big.Int, hash []byte, r, s *big.Int) bool
22	ValidateECDSA(x, y *big.Int, secret []byte) error
23}
24
25type EdDSACurve interface {
26	Curve
27	MarshalBytePoint(x []byte) []byte
28	UnmarshalBytePoint([]byte) (x []byte)
29	MarshalByteSecret(d []byte) []byte
30	UnmarshalByteSecret(d []byte) []byte
31	MarshalSignature(sig []byte) (r, s []byte)
32	UnmarshalSignature(r, s []byte) (sig []byte)
33	GenerateEdDSA(rand io.Reader) (pub, priv []byte, err error)
34	Sign(publicKey, privateKey, message []byte) (sig []byte, err error)
35	Verify(publicKey, message, sig []byte) bool
36	ValidateEdDSA(publicKey, privateKey []byte) (err error)
37}
38type ECDHCurve interface {
39	Curve
40	MarshalBytePoint([]byte) (encoded []byte)
41	UnmarshalBytePoint(encoded []byte) []byte
42	MarshalByteSecret(d []byte) []byte
43	UnmarshalByteSecret(d []byte) []byte
44	GenerateECDH(rand io.Reader) (point []byte, secret []byte, err error)
45	Encaps(rand io.Reader, point []byte) (ephemeral, sharedSecret []byte, err error)
46	Decaps(ephemeral, secret []byte) (sharedSecret []byte, err error)
47	ValidateECDH(public []byte, secret []byte) error
48}