siglog

package
v0.0.0-...-3746c95 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 11, 2024 License: BSD-3-Clause Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PemTypePrivateKey    = "PRIVATE KEY"
	PemTypeECPrivateKey  = "EC PRIVATE KEY"
	PemTypeRsaPrivateKey = "RSA PRIVATE KEY"
	PemTypePublicKey     = "PUBLIC KEY"
	PemTypeCsr           = "CERTIFICATE REQUEST"
)
View Source
const (
	NeedInit LogStreamState = iota
	NeetVerification
	Verified
	Closed

	MaxLogMessageSize = 10 * 1024 * 1024

	MessageTypeIssuance MessageType = "issuance"
	MessageTypeLogRoll  MessageType = "roll"
)

Variables

View Source
var (
	ErrNoKey       = errors.New("no log signing key")
	ErrClosed      = errors.New("log file closed")
	ErrNotVerified = errors.New("log not open or verified")
)

Functions

func DeferClose

func DeferClose(c func() error, e *error)

func GetAuditKey

func GetAuditKey(path string) (key crypto.PrivateKey, err error)

func UnmarshalPrivateKey

func UnmarshalPrivateKey(data []byte) (crypto.PrivateKey, error)

func Verify

func Verify(stream io.Reader, config *LogStreamConfig, pubKey any, checker MessageChecker) error

Types

type LogStream

type LogStream struct {
	LogStreamConfig
	// contains filtered or unexported fields
}

func NewLogStream

func NewLogStream(ctx context.Context, config *LogStreamConfig, path string, allowCreate bool) (l *LogStream, err error)

func (*LogStream) Append

func (l *LogStream) Append(t MessageType, message []byte) error

func (*LogStream) Close

func (l *LogStream) Close() (err error)

func (*LogStream) Init

func (l *LogStream) Init(t MessageType, message, serial []byte) error

func (*LogStream) NextSerial

func (l *LogStream) NextSerial() []byte

func (*LogStream) Rotate

func (l *LogStream) Rotate(t MessageType, message []byte, oldLog io.Writer) error

func (*LogStream) SetKey

func (l *LogStream) SetKey(s crypto.Signer)

func (*LogStream) State

func (l *LogStream) State() LogStreamState

func (*LogStream) Verify

func (l *LogStream) Verify(pubKey any, checker MessageChecker) error

type LogStreamConfig

type LogStreamConfig struct {
	SignatureHash crypto.Hash
	SequenceHash  crypto.Hash
}

type LogStreamState

type LogStreamState int

type Message

type Message struct {
	Serial          []byte
	When            time.Time
	What            MessageType
	Length          uint64
	LastMessageHash []byte
	Payload         []byte
	Signature       []byte
}

func ParseMessageHeader

func ParseMessageHeader(in string) (*Message, error)

ParseMessageHeader takes a line of text populates all the fields in the message except for the message itself. After parsing the length of the message will be known and so the following Message.Length bytes can be read to populate the message field.

func ReadMessageFrom

func ReadMessageFrom(br *bufio.Reader) (*Message, error)

func (*Message) CheckSignature

func (m *Message) CheckSignature(pubKey any, hashType crypto.Hash) error

func (*Message) Sign

func (m *Message) Sign(signer crypto.Signer, hashType crypto.Hash) error

func (*Message) String

func (m *Message) String() string

func (*Message) WriteMessageTo

func (m *Message) WriteMessageTo(out io.Writer) (err error)

type MessageChecker

type MessageChecker interface {
	CheckMessage(sequenceNumber int, message *Message) error
}

MessageChecker is used to add additional checks to the verification of log messages.

func NewMultiMessageChecker

func NewMultiMessageChecker(checkers ...MessageChecker) MessageChecker

type MessageType

type MessageType string

MessageType is a string that is easy to parse: it may only contain ASCII letters, numbers and hyphen. Function MakeMessageType can be used to ensure that a string is valid.

func MakeMessageType

func MakeMessageType(s string) (MessageType, error)

func MustMessageType

func MustMessageType(s string) MessageType

type MultiMessageChecker

type MultiMessageChecker []MessageChecker

func (MultiMessageChecker) CheckMessage

func (m MultiMessageChecker) CheckMessage(sequenceNumber int, message *Message) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL