Documentation
¶
Overview ¶
Package releasecontract defines the host-neutral canonical wire and signing preimages for plugin release trust documents. It does not select trusted keys or read the system clock; callers provide timestamps, signatures, and the verifier that enforces their source policy.
Index ¶
- Constants
- Variables
- func CanonicalJSON(raw []byte) ([]byte, error)
- func CanonicalPackageSignature(context PackageVerificationContext, document PackageSignatureV1) ([]byte, error)
- func CanonicalReleaseMetadata(document ReleaseMetadataV8) ([]byte, error)
- func CanonicalRevocation(document RevocationV2) ([]byte, error)
- func CanonicalRevocationPointer(document RevocationPointerV1) ([]byte, error)
- func CanonicalRootDelegation(document RootDelegationV1) ([]byte, error)
- func CanonicalSourcePolicy(document SourcePolicyV2) ([]byte, error)
- func CanonicalSourcePolicyPointer(document SourcePolicyPointerV1) ([]byte, error)
- func PackageSigningPreimage(input PackageSigningInput) ([]byte, error)
- func ReleaseMetadataSigningPreimage(channel string, document ReleaseMetadataV8) ([]byte, error)
- func RevocationPointerSigningPreimage(input ReleasePointerInput) ([]byte, error)
- func RevocationSigningPreimage(input RevocationInput) ([]byte, error)
- func RootDelegationSigningPreimage(input RootDelegationInput) ([]byte, error)
- func SourcePolicyPointerSigningPreimage(input ReleasePointerInput) ([]byte, error)
- func SourcePolicySigningPreimage(input SourcePolicyInput) ([]byte, error)
- func VerifyPackageSignature(context PackageVerificationContext, document PackageSignatureV1, ...) error
- func VerifyReleaseMetadata(channel string, document ReleaseMetadataV8, signature []byte, ...) error
- func VerifyRevocation(document RevocationV2, verifier SignatureVerifier) error
- func VerifyRevocationPointer(document RevocationPointerV1, verifier SignatureVerifier) error
- func VerifyRootDelegation(document RootDelegationV1, verifier SignatureVerifier) error
- func VerifySourcePolicy(document SourcePolicyV2, verifier SignatureVerifier) error
- func VerifySourcePolicyPointer(document SourcePolicyPointerV1, verifier SignatureVerifier) error
- type DelegatedKeyUsage
- type Ed25519PublicKeyVerifier
- type HostCapabilityContractRef
- type HostCapabilityRequirementRef
- type PackageReleaseSignatureRef
- type PackageSignatureV1
- type PackageSigningInput
- type PackageVerificationContext
- type ReleaseCompatibility
- type ReleaseDistributionRef
- type ReleaseEvidence
- type ReleaseHostRequirement
- type ReleaseMetadataSignatureRef
- type ReleaseMetadataV8
- type ReleasePackageHashSet
- type ReleasePointerInput
- type RevocationInput
- type RevocationPointerV1
- type RevocationV2
- type RevokedRelease
- type RootDelegatedKey
- type RootDelegationInput
- type RootDelegationV1
- type SignatureVerificationRequest
- type SignatureVerifier
- type SignatureVerifierFunc
- type SigningUsage
- type SourcePolicyActiveKeys
- type SourcePolicyInput
- type SourcePolicyLimits
- type SourcePolicyPointerV1
- type SourcePolicyV2
Constants ¶
View Source
const ( RootDelegationSchemaVersion = "redevplugin.release_root_delegation.v1" PackageSignatureSchemaVersion = "redevplugin.package_signature.v1" ReleaseMetadataSchemaVersionV8 = "redevplugin.release_metadata.v8" ReleaseMetadataSchemaVersion = ReleaseMetadataSchemaVersionV8 SourcePolicySchemaVersionV3 = "redevplugin.release_source_policy.v3" SourcePolicySchemaVersion = SourcePolicySchemaVersionV3 SourcePolicyPointerSchemaVersionV1 = "redevplugin.release_source_policy_pointer.v1" SourcePolicyPointerSchemaVersionV2 = "redevplugin.release_source_policy_pointer.v2" SourcePolicyPointerSchemaVersion = SourcePolicyPointerSchemaVersionV2 RevocationSchemaVersionV2 = "redevplugin.release_revocation.v2" RevocationSchemaVersionV3 = "redevplugin.release_revocation.v3" RevocationSchemaVersion = RevocationSchemaVersionV3 RevocationPointerSchemaVersionV1 = "redevplugin.release_revocation_pointer.v1" RevocationPointerSchemaVersionV2 = "redevplugin.release_revocation_pointer.v2" RevocationPointerSchemaVersion = RevocationPointerSchemaVersionV2 SignatureAlgorithmEd25519 = "ed25519" )
Variables ¶
View Source
var ( ErrInvalidDocument = errors.New("release contract document is invalid") ErrInvalidSignature = errors.New("release contract signature is invalid") ErrVerifierRequired = errors.New("release contract signature verifier is required") ErrUnsupportedUsage = errors.New("release contract signing usage is unsupported") )
Functions ¶
func CanonicalJSON ¶
CanonicalJSON validates and canonicalizes an arbitrary JSON document while retaining every field. It is used by forward-compatible package formats; closed typed contracts should continue to use their typed canonicalizers.
func CanonicalPackageSignature ¶
func CanonicalPackageSignature(context PackageVerificationContext, document PackageSignatureV1) ([]byte, error)
func CanonicalReleaseMetadata ¶
func CanonicalReleaseMetadata(document ReleaseMetadataV8) ([]byte, error)
func CanonicalRevocation ¶
func CanonicalRevocation(document RevocationV2) ([]byte, error)
func CanonicalRevocationPointer ¶
func CanonicalRevocationPointer(document RevocationPointerV1) ([]byte, error)
func CanonicalRootDelegation ¶
func CanonicalRootDelegation(document RootDelegationV1) ([]byte, error)
func CanonicalSourcePolicy ¶
func CanonicalSourcePolicy(document SourcePolicyV2) ([]byte, error)
func CanonicalSourcePolicyPointer ¶
func CanonicalSourcePolicyPointer(document SourcePolicyPointerV1) ([]byte, error)
func PackageSigningPreimage ¶
func PackageSigningPreimage(input PackageSigningInput) ([]byte, error)
func ReleaseMetadataSigningPreimage ¶
func ReleaseMetadataSigningPreimage(channel string, document ReleaseMetadataV8) ([]byte, error)
func RevocationPointerSigningPreimage ¶
func RevocationPointerSigningPreimage(input ReleasePointerInput) ([]byte, error)
func RevocationSigningPreimage ¶
func RevocationSigningPreimage(input RevocationInput) ([]byte, error)
func RootDelegationSigningPreimage ¶
func RootDelegationSigningPreimage(input RootDelegationInput) ([]byte, error)
func SourcePolicyPointerSigningPreimage ¶
func SourcePolicyPointerSigningPreimage(input ReleasePointerInput) ([]byte, error)
func SourcePolicySigningPreimage ¶
func SourcePolicySigningPreimage(input SourcePolicyInput) ([]byte, error)
func VerifyPackageSignature ¶
func VerifyPackageSignature(context PackageVerificationContext, document PackageSignatureV1, verifier SignatureVerifier) error
func VerifyReleaseMetadata ¶
func VerifyReleaseMetadata(channel string, document ReleaseMetadataV8, signature []byte, verifier SignatureVerifier) error
func VerifyRevocation ¶
func VerifyRevocation(document RevocationV2, verifier SignatureVerifier) error
func VerifyRevocationPointer ¶
func VerifyRevocationPointer(document RevocationPointerV1, verifier SignatureVerifier) error
func VerifyRootDelegation ¶
func VerifyRootDelegation(document RootDelegationV1, verifier SignatureVerifier) error
func VerifySourcePolicy ¶
func VerifySourcePolicy(document SourcePolicyV2, verifier SignatureVerifier) error
func VerifySourcePolicyPointer ¶
func VerifySourcePolicyPointer(document SourcePolicyPointerV1, verifier SignatureVerifier) error
Types ¶
type DelegatedKeyUsage ¶
type DelegatedKeyUsage string
const ( DelegatedKeyUsagePackage DelegatedKeyUsage = "package" DelegatedKeyUsageReleaseMetadata DelegatedKeyUsage = "release_metadata" DelegatedKeyUsageSourcePolicy DelegatedKeyUsage = "source_policy_document" DelegatedKeyUsageSourcePolicyPointer DelegatedKeyUsage = "source_policy_pointer" DelegatedKeyUsageRevocation DelegatedKeyUsage = "revocation_document" DelegatedKeyUsageRevocationPointer DelegatedKeyUsage = "revocation_pointer" )
type Ed25519PublicKeyVerifier ¶
func (Ed25519PublicKeyVerifier) VerifySignature ¶
func (keys Ed25519PublicKeyVerifier) VerifySignature(request SignatureVerificationRequest) error
type HostCapabilityRequirementRef ¶
type HostCapabilityRequirementRef struct {
CapabilityID string `json:"capability_id"`
CapabilityVersion string `json:"capability_version"`
Contract HostCapabilityContractRef `json:"contract"`
}
type PackageSignatureV1 ¶
type PackageSignatureV1 struct {
SchemaVersion string `json:"schema_version"`
Algorithm string `json:"algorithm"`
KeyID string `json:"key_id"`
PublisherID string `json:"publisher_id,omitempty"`
PluginID string `json:"plugin_id,omitempty"`
PackageHash string `json:"package_hash"`
ManifestHash string `json:"manifest_hash"`
EntriesHash string `json:"entries_hash"`
Signature string `json:"signature"`
SignedAt string `json:"signed_at,omitempty"`
}
func BuildPackageSignature ¶
func BuildPackageSignature(input PackageSigningInput, signature []byte) (PackageSignatureV1, error)
func DecodePackageSignature ¶
func DecodePackageSignature(raw []byte, context PackageVerificationContext) (PackageSignatureV1, error)
type PackageSigningInput ¶
type ReleaseCompatibility ¶
type ReleaseDistributionRef ¶
type ReleaseEvidence ¶
type ReleaseHostRequirement ¶
type ReleaseHostRequirement struct {
HostID string `json:"host_id"`
MinHostVersion string `json:"min_host_version,omitempty"`
RequiredCapabilityContracts []HostCapabilityRequirementRef `json:"required_capability_contracts,omitempty"`
}
type ReleaseMetadataV8 ¶
type ReleaseMetadataV8 struct {
SchemaVersion string `json:"schema_version"`
SourceID string `json:"source_id"`
ReleaseMetadataRef string `json:"release_metadata_ref"`
PublisherID string `json:"publisher_id"`
PluginID string `json:"plugin_id"`
Version string `json:"version"`
DistributionRef ReleaseDistributionRef `json:"distribution_ref"`
Hashes ReleasePackageHashSet `json:"hashes"`
ReleaseMetadataSignature ReleaseMetadataSignatureRef `json:"release_metadata_signature"`
PackageSignature PackageReleaseSignatureRef `json:"package_signature"`
Compatibility ReleaseCompatibility `json:"compatibility"`
HostRequirements []ReleaseHostRequirement `json:"host_requirements,omitempty"`
ReleaseEvidence *ReleaseEvidence `json:"release_evidence,omitempty"`
Metadata map[string]string `json:"metadata,omitempty"`
}
func BuildReleaseMetadata ¶
func BuildReleaseMetadata(document ReleaseMetadataV8) (ReleaseMetadataV8, error)
func DecodeReleaseMetadata ¶
func DecodeReleaseMetadata(raw []byte) (ReleaseMetadataV8, error)
type ReleasePackageHashSet ¶
type ReleasePointerInput ¶
type RevocationInput ¶
type RevocationPointerV1 ¶
type RevocationPointerV1 struct {
SchemaVersion string `json:"schema_version"`
SourceID string `json:"source_id"`
Channel string `json:"channel"`
Epoch string `json:"epoch"`
Ref string `json:"ref"`
DocumentSHA256 string `json:"document_sha256"`
GeneratedAt string `json:"generated_at"`
ExpiresAt string `json:"expires_at"`
KeyID string `json:"key_id"`
Signature string `json:"signature"`
}
func BuildRevocationPointer ¶
func BuildRevocationPointer(input ReleasePointerInput, signature []byte) (RevocationPointerV1, error)
func DecodeRevocationPointer ¶
func DecodeRevocationPointer(raw []byte) (RevocationPointerV1, error)
func (RevocationPointerV1) SigningPreimage ¶
func (document RevocationPointerV1) SigningPreimage() ([]byte, error)
type RevocationV2 ¶
type RevocationV2 struct {
SchemaVersion string `json:"schema_version"`
SourceID string `json:"source_id"`
Channel string `json:"channel"`
Epoch string `json:"epoch"`
RootEpoch string `json:"root_epoch"`
GeneratedAt string `json:"generated_at"`
ExpiresAt string `json:"expires_at"`
RevokedKeyIDs []string `json:"revoked_key_ids"`
RevokedReleases []RevokedRelease `json:"revoked_releases"`
KeyID string `json:"key_id"`
Signature string `json:"signature"`
}
func BuildRevocation ¶
func BuildRevocation(input RevocationInput, signature []byte) (RevocationV2, error)
func DecodeRevocation ¶
func DecodeRevocation(raw []byte) (RevocationV2, error)
func (RevocationV2) SigningPreimage ¶
func (document RevocationV2) SigningPreimage() ([]byte, error)
type RevokedRelease ¶
type RootDelegatedKey ¶
type RootDelegationInput ¶
type RootDelegationV1 ¶
type RootDelegationV1 struct {
SchemaVersion string `json:"schema_version"`
SourceID string `json:"source_id"`
RootEpoch string `json:"root_epoch"`
GeneratedAt string `json:"generated_at"`
ExpiresAt string `json:"expires_at"`
DelegatedKeys []RootDelegatedKey `json:"delegated_keys"`
KeyID string `json:"key_id"`
Signature string `json:"signature"`
}
func BuildRootDelegation ¶
func BuildRootDelegation(input RootDelegationInput, signature []byte) (RootDelegationV1, error)
func DecodeRootDelegation ¶
func DecodeRootDelegation(raw []byte) (RootDelegationV1, error)
func (RootDelegationV1) SigningPreimage ¶
func (document RootDelegationV1) SigningPreimage() ([]byte, error)
type SignatureVerifier ¶
type SignatureVerifier interface {
VerifySignature(SignatureVerificationRequest) error
}
type SignatureVerifierFunc ¶
type SignatureVerifierFunc func(SignatureVerificationRequest) error
func (SignatureVerifierFunc) VerifySignature ¶
func (verify SignatureVerifierFunc) VerifySignature(request SignatureVerificationRequest) error
type SigningUsage ¶
type SigningUsage string
const ( SigningUsageRootDelegation SigningUsage = "redevplugin.release-signing.root-delegation.v1" SigningUsagePackage SigningUsage = "redevplugin.release-signing.package.v1" SigningUsageReleaseMetadata SigningUsage = "redevplugin.release-signing.release-metadata.v1" SigningUsageSourcePolicy SigningUsage = "redevplugin.release-signing.source-policy-document.v1" SigningUsageSourcePolicyPointer SigningUsage = "redevplugin.release-signing.source-policy-pointer.v1" SigningUsageRevocation SigningUsage = "redevplugin.release-signing.revocation-document.v1" SigningUsageRevocationPointer SigningUsage = "redevplugin.release-signing.revocation-pointer.v1" )
type SourcePolicyActiveKeys ¶
type SourcePolicyInput ¶
type SourcePolicyInput struct {
SchemaVersion string
SourceID string
Channel string
Epoch string
RootEpoch string
SourceType string
SourceClass string
AllowedPublishers []string
AllowedArtifactHosts []string
ActiveKeys SourcePolicyActiveKeys
RequireSignature bool
InstallPolicy string
UnsignedPolicy string
DowngradePolicy string
MinimumRevocationEpoch string
Limits SourcePolicyLimits
GeneratedAt string
ExpiresAt string
KeyID string
}
type SourcePolicyLimits ¶
type SourcePolicyLimits struct {
DocumentMaxLifetimeSeconds int `json:"document_max_lifetime_seconds"`
FutureSkewSeconds int `json:"future_skew_seconds"`
RefreshIntervalMaxSeconds int `json:"refresh_interval_max_seconds"`
FailureTeardownDeadlineSeconds int `json:"failure_teardown_deadline_seconds"`
}
func DefaultSourcePolicyLimits ¶
func DefaultSourcePolicyLimits() SourcePolicyLimits
func PersonalMaintainerSourcePolicyLimits ¶
func PersonalMaintainerSourcePolicyLimits() SourcePolicyLimits
type SourcePolicyPointerV1 ¶
type SourcePolicyPointerV1 struct {
SchemaVersion string `json:"schema_version"`
SourceID string `json:"source_id"`
Channel string `json:"channel"`
Epoch string `json:"epoch"`
Ref string `json:"ref"`
DocumentSHA256 string `json:"document_sha256"`
GeneratedAt string `json:"generated_at"`
ExpiresAt string `json:"expires_at"`
KeyID string `json:"key_id"`
Signature string `json:"signature"`
}
func BuildSourcePolicyPointer ¶
func BuildSourcePolicyPointer(input ReleasePointerInput, signature []byte) (SourcePolicyPointerV1, error)
func DecodeSourcePolicyPointer ¶
func DecodeSourcePolicyPointer(raw []byte) (SourcePolicyPointerV1, error)
func (SourcePolicyPointerV1) SigningPreimage ¶
func (document SourcePolicyPointerV1) SigningPreimage() ([]byte, error)
type SourcePolicyV2 ¶
type SourcePolicyV2 struct {
SchemaVersion string `json:"schema_version"`
SourceID string `json:"source_id"`
Channel string `json:"channel"`
Epoch string `json:"epoch"`
RootEpoch string `json:"root_epoch"`
SourceType string `json:"source_type"`
SourceClass string `json:"source_class"`
AllowedPublishers []string `json:"allowed_publishers"`
AllowedArtifactHosts []string `json:"allowed_artifact_hosts"`
ActiveKeys SourcePolicyActiveKeys `json:"active_keys"`
RequireSignature bool `json:"require_signature"`
InstallPolicy string `json:"install_policy"`
UnsignedPolicy string `json:"unsigned_policy"`
DowngradePolicy string `json:"downgrade_policy"`
MinimumRevocationEpoch string `json:"minimum_revocation_epoch"`
Limits SourcePolicyLimits `json:"limits"`
GeneratedAt string `json:"generated_at"`
ExpiresAt string `json:"expires_at"`
KeyID string `json:"key_id"`
Signature string `json:"signature"`
}
func BuildSourcePolicy ¶
func BuildSourcePolicy(input SourcePolicyInput, signature []byte) (SourcePolicyV2, error)
func DecodeSourcePolicy ¶
func DecodeSourcePolicy(raw []byte) (SourcePolicyV2, error)
func (SourcePolicyV2) SigningPreimage ¶
func (document SourcePolicyV2) SigningPreimage() ([]byte, error)
Click to show internal directories.
Click to hide internal directories.