2016-01-28 15:11:54 -05:00
|
|
|
package crypto
|
|
|
|
|
|
|
|
import (
|
2016-01-29 07:22:31 -05:00
|
|
|
"errors"
|
2016-01-28 15:11:54 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
var ErrBadSignatureSize = errors.New("bad signature size")
|
|
|
|
var ErrInvalidKeyFormat = errors.New("invalid key format")
|
|
|
|
var ErrInvalidSignature = errors.New("invalid signature")
|
|
|
|
|
|
|
|
// type for verifying signatures
|
|
|
|
type Verifier interface {
|
2016-01-29 07:22:31 -05:00
|
|
|
// verify hashed data with this signing key
|
|
|
|
// return nil on valid signature otherwise error
|
2016-01-29 08:36:04 -05:00
|
|
|
VerifyHash(h, sig []byte) error
|
2016-01-29 07:22:31 -05:00
|
|
|
// verify an unhashed piece of data by hashing it and calling VerifyHash
|
|
|
|
Verify(data, sig []byte) error
|
2016-01-28 15:11:54 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
// key for verifying data
|
|
|
|
type SigningPublicKey interface {
|
2016-01-29 07:22:31 -05:00
|
|
|
// create new Verifier to verify the validity of signatures
|
|
|
|
// return verifier or nil and error if key format is invalid
|
|
|
|
NewVerifier() (Verifier, error)
|
|
|
|
// get the size of this public key
|
|
|
|
Len() int
|
2016-01-28 15:11:54 -05:00
|
|
|
}
|
|
|
|
|
2016-02-13 21:00:29 -08:00
|
|
|
type PublicKey interface {
|
|
|
|
Len() int
|
|
|
|
NewEncrypter() (Encrypter, error)
|
|
|
|
}
|
|
|
|
|
2016-01-28 15:11:54 -05:00
|
|
|
// type for signing data
|
|
|
|
type Signer interface {
|
2016-01-29 07:22:31 -05:00
|
|
|
// sign data with our private key by calling SignHash after hashing the data we are given
|
|
|
|
// return signature or nil signature and error if an error happened
|
|
|
|
Sign(data []byte) (sig []byte, err error)
|
2016-01-28 15:11:54 -05:00
|
|
|
|
2016-01-29 07:22:31 -05:00
|
|
|
// sign hash of data with our private key
|
|
|
|
// return signature or nil signature and error if an error happened
|
|
|
|
SignHash(h []byte) (sig []byte, err error)
|
|
|
|
}
|
2016-01-28 15:11:54 -05:00
|
|
|
|
|
|
|
// key for signing data
|
|
|
|
type SigningPrivateKey interface {
|
2016-01-29 07:22:31 -05:00
|
|
|
// create a new signer to sign data
|
|
|
|
// return signer or nil and error if key format is invalid
|
|
|
|
NewSigner() (Signer, error)
|
2016-01-29 08:36:04 -05:00
|
|
|
// length of this private key
|
2016-01-29 07:22:31 -05:00
|
|
|
Len() int
|
2016-01-29 08:36:04 -05:00
|
|
|
// get public key or return nil and error if invalid key data in private key
|
|
|
|
Public() (SigningPublicKey, error)
|
|
|
|
// generate a new private key, put it into itself
|
|
|
|
// returns itself or nil and error if an error occurs
|
|
|
|
Generate() (SigningPrivateKey, error)
|
2016-01-28 15:11:54 -05:00
|
|
|
}
|