...

Package sign

import "github.com/cloudflare/circl/sign"
Overview
Index
Subdirectories

Overview ▾

Package sign provides unified interfaces for signature schemes.

A register of schemes is available in the package

github.com/cloudflare/circl/sign/schemes

Variables

var (
    // ErrTypeMismatch is the error used if types of, for instance, private
    // and public keys don't match.
    ErrTypeMismatch = errors.New("types mismatch")

    // ErrSeedSize is the error used if the provided seed is of the wrong
    // size.
    ErrSeedSize = errors.New("wrong seed size")

    // ErrPubKeySize is the error used if the provided public key is of
    // the wrong size.
    ErrPubKeySize = errors.New("wrong size for public key")

    // ErrPrivKeySize is the error used if the provided private key is of
    // the wrong size.
    ErrPrivKeySize = errors.New("wrong size for private key")

    // ErrContextNotSupported is the error used if a context is not
    // supported.
    ErrContextNotSupported = errors.New("context not supported")
)

type PrivateKey

A private key allows one to create signatures.

type PrivateKey interface {
    // Returns the signature scheme for this private key.
    Scheme() Scheme
    Equal(crypto.PrivateKey) bool
    // For compatibility with Go standard library
    crypto.Signer
    crypto.PrivateKey
    encoding.BinaryMarshaler
}

type PublicKey

A public key is used to verify a signature set by the corresponding private key.

type PublicKey interface {
    // Returns the signature scheme for this public key.
    Scheme() Scheme
    Equal(crypto.PublicKey) bool
    encoding.BinaryMarshaler
    crypto.PublicKey
}

type Scheme

A Scheme represents a specific instance of a signature scheme.

type Scheme interface {
    // Name of the scheme.
    Name() string

    // GenerateKey creates a new key-pair.
    GenerateKey() (PublicKey, PrivateKey, error)

    // Creates a signature using the PrivateKey on the given message and
    // returns the signature. opts are additional options which can be nil.
    //
    // Panics if key is nil or wrong type or opts context is not supported.
    Sign(sk PrivateKey, message []byte, opts *SignatureOpts) []byte

    // Checks whether the given signature is a valid signature set by
    // the private key corresponding to the given public key on the
    // given message. opts are additional options which can be nil.
    //
    // Panics if key is nil or wrong type or opts context is not supported.
    Verify(pk PublicKey, message []byte, signature []byte, opts *SignatureOpts) bool

    // Deterministically derives a keypair from a seed. If you're unsure,
    // you're better off using GenerateKey().
    //
    // Panics if seed is not of length SeedSize().
    DeriveKey(seed []byte) (PublicKey, PrivateKey)

    // Unmarshals a PublicKey from the provided buffer.
    UnmarshalBinaryPublicKey([]byte) (PublicKey, error)

    // Unmarshals a PublicKey from the provided buffer.
    UnmarshalBinaryPrivateKey([]byte) (PrivateKey, error)

    // Size of binary marshalled public keys.
    PublicKeySize() int

    // Size of binary marshalled public keys.
    PrivateKeySize() int

    // Size of signatures.
    SignatureSize() int

    // Size of seeds.
    SeedSize() int

    // Returns whether contexts are supported.
    SupportsContext() bool
}

type SignatureOpts

type SignatureOpts struct {
    // If non-empty, includes the given context in the signature if supported
    // and will cause an error during signing otherwise.
    Context string
}

Subdirectories

Name Synopsis
..
dilithium dilithium implements the CRYSTALS-Dilithium signature schemes as submitted to round3 of the NIST PQC competition and described in
mode2 mode2 implements the CRYSTALS-Dilithium signature scheme Dilithium2 as submitted to round3 of the NIST PQC competition and described in
mode2aes mode2aes implements the CRYSTALS-Dilithium signature scheme Dilithium2-AES as submitted to round3 of the NIST PQC competition and described in
mode3 mode3 implements the CRYSTALS-Dilithium signature scheme Dilithium3 as submitted to round3 of the NIST PQC competition and described in
mode3aes mode3aes implements the CRYSTALS-Dilithium signature scheme Dilithium3-AES as submitted to round3 of the NIST PQC competition and described in
mode5 mode5 implements the CRYSTALS-Dilithium signature scheme Dilithium5 as submitted to round3 of the NIST PQC competition and described in
mode5aes mode5aes implements the CRYSTALS-Dilithium signature scheme Dilithium5-AES as submitted to round3 of the NIST PQC competition and described in
templates
ed25519 Package ed25519 implements Ed25519 signature scheme as described in RFC-8032.
ed448 Package ed448 implements Ed448 signature scheme as described in RFC-8032.
eddilithium2 Package eddilithium2 implements the hybrid signature scheme Ed25519-Dilithium2.
eddilithium3 Package eddilithium3 implements the hybrid signature scheme Ed448-Dilithium3.
schemes Package schemes contains a register of signature algorithms.