Documentation
¶
Index ¶
- Constants
- Variables
- func ForEach[T any](c Cursor[T], f func(T) error) error
- func GenerateSigningKeypair(scheme SignatureScheme) (Signer, Verifier, error)
- func TreeNodeCount(nLeaves uint64) uint
- func VerifierFingerprint(v Verifier) string
- type AbridgedSubject
- type AbridgedTLSSubject
- type Assertion
- type AssertionRequest
- type Batch
- func (batch *Batch) Anchor() TrustAnchorIdentifier
- func (batch *Batch) ComputeTree(r io.Reader) (*Tree, error)
- func (batch *Batch) ComputeTreeHeadFromAuthenticationPath(index uint64, path []byte, be *BatchEntry) ([]byte, error)
- func (batch *Batch) NewTreeBuilder() *TreeBuilder
- func (batch *Batch) SignValidityWindow(signer Signer, prevHeads []byte, root []byte) (SignedValidityWindow, error)
- func (batch *Batch) ValidityInterval() (time.Time, time.Time)
- func (batch *Batch) VerifyAuthenticationPath(index uint64, path, root []byte, be *BatchEntry) error
- type BatchEntry
- type BatchEntryWithOffset
- type BatchRange
- type BikeshedCertificate
- type CAParams
- func (p *CAParams) ActiveBatches(dt time.Time) BatchRange
- func (p *CAParams) MarshalBinary() ([]byte, error)
- func (p *CAParams) NewTreeHeads(prevHeads, root []byte) ([]byte, error)
- func (p *CAParams) NextBatchAt(dt time.Time) time.Time
- func (p *CAParams) PreEpochTreeHeads() []byte
- func (p *CAParams) StoredBatches(dt time.Time) BatchRange
- func (p *CAParams) UnmarshalBinary(data []byte) error
- func (p *CAParams) Validate() error
- type CAStore
- type ClaimType
- type Claims
- type CompressedUmbilicalEvidence
- type Cursor
- type Evidence
- type EvidenceList
- type EvidenceListWithOffset
- type EvidencePolicyType
- type EvidenceType
- type LocalCAStore
- type MerkleTreeProof
- type Proof
- type ProofType
- type RelativeOID
- type SignatureScheme
- type SignedValidityWindow
- type Signer
- type Subject
- type SubjectBase
- type SubjectType
- type TLSSubject
- type Tree
- type TreeBuilder
- type TrustAnchorIdentifier
- type UmbilicalEvidence
- type UnknownClaim
- type UnknownEvidence
- type UnknownProof
- type UnknownSubject
- type ValidityWindow
- type Verifier
- type VerifyOptions
Constants ¶
const ( HashLen = 32 // Version of the API we implement. It's close to draft -04, but there // are changes on top, hence the "b". ApiVersion = "v04b" )
Variables ¶
var ( // ErrTruncated is a parsing error returned when the input seems to have // been truncated. ErrTruncated = errors.New("Input truncated") // ErrExtraBytes is a parsing error returned when there are extraneous // bytes at the end of, or within, the data. ErrExtraBytes = errors.New("Unexpected extra (internal) bytes") // ErrChecksumInvalid is an error returned when a checksum does not // match the corresponding data. ErrChecksumInvalid = errors.New("Invalid checksum") // Used to indicate end of stream for Cursor[T]. EOF = errors.New("EOF") )
Functions ¶
func ForEach ¶ added in v0.1.2
Pull from c and call f on each.
Abort early if f returns an error. Closes c.
func GenerateSigningKeypair ¶
func GenerateSigningKeypair(scheme SignatureScheme) (Signer, Verifier, error)
func TreeNodeCount ¶
TreeNodeCount returns the number of nodes in the Merkle tree for a batch, which has nLeaves assertions.
Types ¶
type AbridgedSubject ¶
type AbridgedSubject interface {
SubjectBase
}
type AbridgedTLSSubject ¶
type AbridgedTLSSubject struct {
SignatureScheme SignatureScheme
PublicKeyHash [HashLen]byte
}
func (*AbridgedTLSSubject) Info ¶
func (s *AbridgedTLSSubject) Info() []byte
func (*AbridgedTLSSubject) Type ¶
func (s *AbridgedTLSSubject) Type() SubjectType
type Assertion ¶
func (*Assertion) EntryKey ¶ added in v0.1.2
Computes the key a BatchEntry for this assertion would have in the index.
func (*Assertion) MarshalBinary ¶
func (*Assertion) UnmarshalBinary ¶
type AssertionRequest ¶ added in v0.1.2
type AssertionRequest struct {
Checksum []byte
Assertion Assertion
Evidence EvidenceList
NotAfter time.Time
}
func (*AssertionRequest) Check ¶ added in v0.1.2
func (ar *AssertionRequest) Check() error
If set, checks whether the Checksum is correct. If not set, sets the Checksum to the correct value.
func (*AssertionRequest) MarshalBinary ¶ added in v0.1.2
func (ar *AssertionRequest) MarshalBinary() ([]byte, error)
func (*AssertionRequest) UnmarshalBinary ¶ added in v0.1.2
func (ar *AssertionRequest) UnmarshalBinary(data []byte) error
type Batch ¶
func (*Batch) Anchor ¶
func (batch *Batch) Anchor() TrustAnchorIdentifier
func (*Batch) ComputeTree ¶
Convenience function to compute Merkle tree from a stream of BatchEntry from r.
func (*Batch) ComputeTreeHeadFromAuthenticationPath ¶ added in v0.1.2
func (batch *Batch) ComputeTreeHeadFromAuthenticationPath(index uint64, path []byte, be *BatchEntry) ([]byte, error)
Compute batch tree head from authentication path.
To verify a certificate/proof, use VerifyAuthenticationPath instead.
func (*Batch) NewTreeBuilder ¶ added in v0.1.2
func (batch *Batch) NewTreeBuilder() *TreeBuilder
func (*Batch) SignValidityWindow ¶
func (*Batch) ValidityInterval ¶ added in v0.1.2
ValidityInterval returns the largest closed interval [a,b] in which assertions issued in this batch are valid. That is: for all times x with a ≤ x ≤ b. Note that NotAfter may be smaller than b for some assertions.
func (*Batch) VerifyAuthenticationPath ¶
func (batch *Batch) VerifyAuthenticationPath(index uint64, path, root []byte, be *BatchEntry) error
Check validity of authentication path.
Return nil on valid authentication path.
type BatchEntry ¶ added in v0.1.2
type BatchEntry struct {
Subject AbridgedSubject
Claims Claims
NotAfter time.Time
}
func NewBatchEntry ¶ added in v0.1.2
func NewBatchEntry(a Assertion, notAfter time.Time) (ret BatchEntry)
func UnmarshalBatchEntry ¶ added in v0.1.2
func UnmarshalBatchEntry(r io.Reader) (*BatchEntry, error)
Unmarshals a single BatchEntry from r.
func (*BatchEntry) Hash ¶ added in v0.1.2
func (be *BatchEntry) Hash(out []byte, batch *Batch, index uint64) error
Computes the leaf hash of the BatchEntry in the Merkle tree computed for the batch.
func (*BatchEntry) Key ¶ added in v0.1.2
func (be *BatchEntry) Key(out []byte) error
Computes the key of the BatchEntry used in the index.
Note that keys are not unique: we leave out the not_after field when computing the key. This allows us to look up a BatchEntry for some assertion that does not contain the not_after field.
func (*BatchEntry) MarshalBinary ¶ added in v0.1.2
func (be *BatchEntry) MarshalBinary() ([]byte, error)
func (*BatchEntry) UnmarshalBinary ¶ added in v0.1.2
func (be *BatchEntry) UnmarshalBinary(data []byte) error
type BatchEntryWithOffset ¶ added in v0.1.2
type BatchEntryWithOffset struct {
BatchEntry
Offset int
}
Same as BatchEntry, but keeps track of offset within stream it was unmarshalled from. Used to create index.
type BatchRange ¶
Range of batch numbers Begin, …, End-1.
func (BatchRange) AreAllPast ¶
func (r BatchRange) AreAllPast(batch uint32) bool
Returns whether each batch in the range is after the given batch
func (BatchRange) Contains ¶
func (r BatchRange) Contains(batch uint32) bool
Returns whether r contains the batch with the given number.
func (BatchRange) Len ¶
func (r BatchRange) Len() int
func (BatchRange) String ¶
func (r BatchRange) String() string
type BikeshedCertificate ¶
func (*BikeshedCertificate) MarshalBinary ¶
func (c *BikeshedCertificate) MarshalBinary() ([]byte, error)
func (*BikeshedCertificate) UnmarshalBinary ¶
func (c *BikeshedCertificate) UnmarshalBinary(data []byte, caStore CAStore) error
func (*BikeshedCertificate) Verify ¶ added in v0.1.2
func (c *BikeshedCertificate) Verify(opts VerifyOptions) error
Verify is used to verify that a BikeshedCertificate is covered by a validity window. It is the caller's responsibility to verify the validity window was signed by the CA. An error indicates that the certificate does not belong to a batch in the validity window or that the certificate is otherwise invalid.
type CAParams ¶
type CAParams struct {
Issuer RelativeOID
PublicKey Verifier
ProofType ProofType
StartTime uint64
BatchDuration uint64
Lifetime uint64
// ValidityWindowSize is the number of tree heads in each validity
// window.
ValidityWindowSize uint64
StorageWindowSize uint64
ServerPrefix string
EvidencePolicy EvidencePolicyType
}
CAParams holds the public parameters of a Merkle Tree CA
func (*CAParams) ActiveBatches ¶
func (p *CAParams) ActiveBatches(dt time.Time) BatchRange
Batches that are non-expired, and either issued or ready, at the given time.
func (*CAParams) MarshalBinary ¶
func (*CAParams) NewTreeHeads ¶ added in v0.1.2
Returns TreeHeads from the previous batch's TreeHeads and the new root.
func (*CAParams) NextBatchAt ¶ added in v0.1.1
Returns the time when the next batch starts.
func (*CAParams) PreEpochTreeHeads ¶ added in v0.1.2
Returns the tree heads of the validity window prior the epoch.
func (*CAParams) StoredBatches ¶
func (p *CAParams) StoredBatches(dt time.Time) BatchRange
Batches that are expected to be available at this CA, at the given time. The last few might not yet have been published.
func (*CAParams) UnmarshalBinary ¶
type CAStore ¶ added in v0.1.2
type CAStore interface {
Lookup(oid RelativeOID) *CAParams
}
type Claims ¶
type Claims struct {
DNS []string
DNSWildcard []string
IPv4 []net.IP
IPv6 []net.IP
Unknown []UnknownClaim
}
List of claims.
func (*Claims) MarshalBinary ¶
func (*Claims) UnmarshalBinary ¶
type CompressedUmbilicalEvidence ¶ added in v0.1.2
type CompressedUmbilicalEvidence [][32]byte
func NewCompressedUmbilicalEvidence ¶ added in v0.1.2
func NewCompressedUmbilicalEvidence(certs [][32]byte) ( CompressedUmbilicalEvidence, error)
func (CompressedUmbilicalEvidence) Chain ¶ added in v0.1.2
func (e CompressedUmbilicalEvidence) Chain() [][32]byte
func (CompressedUmbilicalEvidence) Info ¶ added in v0.1.2
func (e CompressedUmbilicalEvidence) Info() []byte
func (CompressedUmbilicalEvidence) Type ¶ added in v0.1.2
func (e CompressedUmbilicalEvidence) Type() EvidenceType
func (*CompressedUmbilicalEvidence) UnmarshalBinary ¶ added in v0.1.2
func (e *CompressedUmbilicalEvidence) UnmarshalBinary(buf []byte) error
type Cursor ¶ added in v0.1.2
type Cursor[T any] interface { // Pull one value and write to out. Pull(out T) error // Release underlying resources. Closing twice is no-op. Close() error }
Pull-style iterator similar to io.ReadCloser but for general T and only pulls one value at a time. Assumes T is a reference.
func UnmarshalBatchEntries ¶ added in v0.1.2
func UnmarshalBatchEntries(r io.Reader) Cursor[*BatchEntry]
Unmarshals BatchEntry from r.
func UnmarshalBatchEntriesWithOffset ¶ added in v0.1.2
func UnmarshalBatchEntriesWithOffset(r io.Reader) Cursor[*BatchEntryWithOffset]
Unmarshals BatchEntry from r, keeping note of the offset of each.
func UnmarshalEvidenceLists ¶ added in v0.1.2
func UnmarshalEvidenceLists(r io.Reader) Cursor[*EvidenceList]
Unmarshals EvidenceLists from r.
type Evidence ¶ added in v0.1.2
type Evidence interface {
Type() EvidenceType
Info() []byte
}
type EvidenceList ¶ added in v0.1.2
type EvidenceList []Evidence
func UnmarshalEvidenceList ¶ added in v0.1.2
func UnmarshalEvidenceList(r io.Reader) (*EvidenceList, error)
Unmarshals single EvidenceList from r.
func (*EvidenceList) MarshalBinary ¶ added in v0.1.2
func (el *EvidenceList) MarshalBinary() ([]byte, error)
func (*EvidenceList) UnmarshalBinary ¶ added in v0.1.2
func (el *EvidenceList) UnmarshalBinary(data []byte) error
type EvidenceListWithOffset ¶ added in v0.1.2
type EvidenceListWithOffset struct {
EvidenceList
Offset int
}
Same as EvidenceList, but keeps track of offset within stream it was unmarshalled from. Used to create index.
type EvidencePolicyType ¶ added in v0.1.2
type EvidencePolicyType uint16
const ( // No policy set. UnsetEvidencePolicy EvidencePolicyType = iota // Policy requiring no evidence to queue an assertion request. EmptyEvidencePolicy // Policy requiring an X509 chain to an accepted root to queue an assertion request. UmbilicalEvidencePolicy )
type EvidenceType ¶ added in v0.1.2
type EvidenceType uint16
const ( UmbilicalEvidenceType EvidenceType = iota CompressedUmbilicalEvidenceType )
type LocalCAStore ¶ added in v0.1.2
type LocalCAStore struct {
// contains filtered or unexported fields
}
func (*LocalCAStore) Add ¶ added in v0.1.2
func (s *LocalCAStore) Add(params CAParams)
func (*LocalCAStore) Lookup ¶ added in v0.1.2
func (s *LocalCAStore) Lookup(oid RelativeOID) *CAParams
type MerkleTreeProof ¶
type MerkleTreeProof struct {
// contains filtered or unexported fields
}
func NewMerkleTreeProof ¶
func (*MerkleTreeProof) Index ¶
func (p *MerkleTreeProof) Index() uint64
func (*MerkleTreeProof) Info ¶
func (p *MerkleTreeProof) Info() []byte
func (*MerkleTreeProof) NotAfter ¶ added in v0.1.2
func (p *MerkleTreeProof) NotAfter() time.Time
func (*MerkleTreeProof) Path ¶
func (p *MerkleTreeProof) Path() []byte
func (*MerkleTreeProof) TrustAnchorIdentifier ¶ added in v0.1.2
func (p *MerkleTreeProof) TrustAnchorIdentifier() TrustAnchorIdentifier
type Proof ¶
type Proof interface {
TrustAnchorIdentifier() TrustAnchorIdentifier
Info() []byte
NotAfter() time.Time
}
type RelativeOID ¶ added in v0.1.2
type RelativeOID []byte
func (*RelativeOID) Equal ¶ added in v0.1.2
func (oid *RelativeOID) Equal(rhs *RelativeOID) bool
func (*RelativeOID) FromSegments ¶ added in v0.1.2
func (oid *RelativeOID) FromSegments(segments []uint32) error
func (RelativeOID) MarshalBinary ¶ added in v0.1.2
func (oid RelativeOID) MarshalBinary() ([]byte, error)
func (RelativeOID) String ¶ added in v0.1.2
func (oid RelativeOID) String() string
func (*RelativeOID) UnmarshalText ¶ added in v0.1.2
func (oid *RelativeOID) UnmarshalText(text []byte) error
type SignatureScheme ¶
type SignatureScheme uint16
Copy of tls.SignatureScheme to prevent cycling dependencies
const ( TLSPSSWithSHA256 SignatureScheme = 0x0804 TLSPSSWithSHA384 SignatureScheme = 0x0805 TLSPSSWithSHA512 SignatureScheme = 0x0806 TLSECDSAWithP256AndSHA256 SignatureScheme = 0x0403 TLSECDSAWithP384AndSHA384 SignatureScheme = 0x0503 TLSECDSAWithP521AndSHA512 SignatureScheme = 0x0603 TLSEd25519 SignatureScheme = 0x0807 // Just for testing we use ML-DSA-87 with a codepoint in the // private use region. // For production SLH-DSA-128s would be a better choice. TLSMLDSA87 SignatureScheme = 0x0906 )
func SignatureSchemeFromString ¶
func SignatureSchemeFromString(s string) SignatureScheme
func SignatureSchemesFor ¶
func SignatureSchemesFor(pk crypto.PublicKey) []SignatureScheme
Returns valid signature schemes for given public key
func (SignatureScheme) String ¶
func (s SignatureScheme) String() string
type SignedValidityWindow ¶
type SignedValidityWindow struct {
ValidityWindow
Signature []byte
}
func (*SignedValidityWindow) MarshalBinary ¶
func (w *SignedValidityWindow) MarshalBinary() ([]byte, error)
func (*SignedValidityWindow) UnmarshalBinary ¶
func (w *SignedValidityWindow) UnmarshalBinary(data []byte, p *CAParams) error
func (*SignedValidityWindow) UnmarshalBinaryWithoutVerification ¶
func (w *SignedValidityWindow) UnmarshalBinaryWithoutVerification( data []byte, p *CAParams) error
Like UnmarshalBinary() but doesn't check the signature.
type Signer ¶
type Signer interface {
Sign(message []byte) []byte
Scheme() SignatureScheme
Bytes() []byte
}
Signing private key with specific hash and options.
func UnmarshalSigner ¶
func UnmarshalSigner(scheme SignatureScheme, data []byte) ( Signer, error)
type Subject ¶
type Subject interface {
SubjectBase
Abridge() AbridgedSubject
}
type SubjectBase ¶
type SubjectBase interface {
Type() SubjectType
Info() []byte
}
type SubjectType ¶
type SubjectType uint16
const (
TLSSubjectType SubjectType = iota
)
func (SubjectType) String ¶
func (s SubjectType) String() string
type TLSSubject ¶
type TLSSubject struct {
// contains filtered or unexported fields
}
func NewTLSSubject ¶
func NewTLSSubject(scheme SignatureScheme, pk crypto.PublicKey) (*TLSSubject, error)
func (*TLSSubject) Abridge ¶
func (s *TLSSubject) Abridge() AbridgedSubject
func (*TLSSubject) Info ¶
func (s *TLSSubject) Info() []byte
func (*TLSSubject) Type ¶
func (s *TLSSubject) Type() SubjectType
func (*TLSSubject) Verifier ¶
func (s *TLSSubject) Verifier() (Verifier, error)
type Tree ¶
type Tree struct {
// contains filtered or unexported fields
}
Merkle tree built upon the assertions of a batch.
func (*Tree) AuthenticationPath ¶
Return authentication path proving that the leaf at the given index is included in the Merkle tree.
func (*Tree) UnmarshalBinary ¶
type TreeBuilder ¶ added in v0.1.2
type TreeBuilder struct {
// contains filtered or unexported fields
}
func (*TreeBuilder) Finish ¶ added in v0.1.2
func (b *TreeBuilder) Finish() (*Tree, error)
func (*TreeBuilder) Push ¶ added in v0.1.2
func (b *TreeBuilder) Push(be *BatchEntry) error
type TrustAnchorIdentifier ¶ added in v0.1.2
type TrustAnchorIdentifier struct {
Issuer RelativeOID
BatchNumber uint32
}
A TrustAnchorIdentifier (TAI) is used to identify a CA, or a specific batch.
TAI are OIDs relative to the Private Enterprise Numbers (PEN) arc 1.3.6.1.4.1.
func (TrustAnchorIdentifier) MarshalBinary ¶ added in v0.1.2
func (tai TrustAnchorIdentifier) MarshalBinary() ([]byte, error)
func (TrustAnchorIdentifier) String ¶ added in v0.1.2
func (tai TrustAnchorIdentifier) String() string
func (*TrustAnchorIdentifier) UnmarshalBinary ¶ added in v0.1.2
func (tai *TrustAnchorIdentifier) UnmarshalBinary(buf []byte) error
type UmbilicalEvidence ¶ added in v0.1.2
type UmbilicalEvidence []byte
func NewUmbilicalEvidence ¶ added in v0.1.2
func NewUmbilicalEvidence(certs []*x509.Certificate) (UmbilicalEvidence, error)
func (UmbilicalEvidence) Chain ¶ added in v0.1.2
func (e UmbilicalEvidence) Chain() ([]*x509.Certificate, error)
func (UmbilicalEvidence) Info ¶ added in v0.1.2
func (e UmbilicalEvidence) Info() []byte
func (UmbilicalEvidence) RawChain ¶ added in v0.1.2
func (e UmbilicalEvidence) RawChain() ([][]byte, error)
func (UmbilicalEvidence) Type ¶ added in v0.1.2
func (e UmbilicalEvidence) Type() EvidenceType
type UnknownClaim ¶
Represents a claim we do not how to interpret.
type UnknownEvidence ¶ added in v0.1.2
type UnknownEvidence struct {
// contains filtered or unexported fields
}
func (UnknownEvidence) Info ¶ added in v0.1.2
func (e UnknownEvidence) Info() []byte
func (UnknownEvidence) Type ¶ added in v0.1.2
func (e UnknownEvidence) Type() EvidenceType
type UnknownProof ¶
type UnknownProof struct {
// contains filtered or unexported fields
}
func (*UnknownProof) Info ¶
func (p *UnknownProof) Info() []byte
func (*UnknownProof) NotAfter ¶ added in v0.1.2
func (p *UnknownProof) NotAfter() time.Time
func (*UnknownProof) TrustAnchorIdentifier ¶ added in v0.1.2
func (p *UnknownProof) TrustAnchorIdentifier() TrustAnchorIdentifier
type UnknownSubject ¶
type UnknownSubject struct {
// contains filtered or unexported fields
}
Used for either an unknown (abridged) subject
func (*UnknownSubject) Abridge ¶
func (s *UnknownSubject) Abridge() AbridgedSubject
func (*UnknownSubject) Info ¶
func (s *UnknownSubject) Info() []byte
func (*UnknownSubject) Type ¶
func (s *UnknownSubject) Type() SubjectType
type ValidityWindow ¶
type ValidityWindow struct {
// BatchNumber is the batch number of the last tree head.
BatchNumber uint32
TreeHeads []byte
}
func (*ValidityWindow) CurHead ¶ added in v0.1.2
func (w *ValidityWindow) CurHead() []byte
Return the tree head recorded for this ValidityWindow's batch.
func (*ValidityWindow) LabeledValdityWindow ¶
func (w *ValidityWindow) LabeledValdityWindow(ca *CAParams) ([]byte, error)
Returns the corresponding marshalled LabeledValdityWindow, which is signed by the CA.
func (*ValidityWindow) MarshalBinary ¶
func (w *ValidityWindow) MarshalBinary() ([]byte, error)
type Verifier ¶
type Verifier interface {
Verify(message, signature []byte) error
Scheme() SignatureScheme
Bytes() []byte
}
Signing public key with specific hash and options.
func NewVerifier ¶
func NewVerifier(scheme SignatureScheme, pk crypto.PublicKey) ( Verifier, error)
func UnmarshalVerifier ¶
func UnmarshalVerifier(scheme SignatureScheme, data []byte) ( Verifier, error)
type VerifyOptions ¶ added in v0.1.2
type VerifyOptions struct {
// ValidityWindow is a validity window that covers the certificate. It
// is the caller's responsibility to verify the validity window was
// signed by the CA, e.g., by verifying the SignedValidityWindow that
// contains the validity window.
ValidityWindow *ValidityWindow
// CA includes the parameters of the CA that issued the batch
// containing the certificate.
CA *CAParams
// CurrentTime is used to to check if the certificate has expired.
CurrentTime time.Time
}
VerifyOptions includes parameters for verifying a BikeshedCertificate.
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
mtc
command
|
|
|
Package umbilical has the temporary logic to back an MTC with an existing X509 certificate chain.
|
Package umbilical has the temporary logic to back an MTC with an existing X509 certificate chain. |
|
frozencas
frozencas implements a simple file format to store small blobs by their hash.
|
frozencas implements a simple file format to store small blobs by their hash. |
|
revocation
Package revocation implements the code to check for revocation of X.509 certificates on demand.
|
Package revocation implements the code to check for revocation of X.509 certificates on demand. |