Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
plugin_identity.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2#pragma once
3
4#include <cstdint>
5#include <optional>
6#include <string>
7#include <string_view>
8#include <utility>
9#include <variant>
10#include <vector>
11
12namespace pulp::host {
13
16 std::string format = "clap";
17 std::string descriptor_id;
18 bool operator==(const PluginTypeIdentity&) const = default;
19};
20
32
35
38 std::string sha256;
39 std::uint64_t byte_length = 0;
40 std::optional<std::string> descriptor_version;
41 bool operator==(const PluginArtifactProvenance&) const = default;
42};
43
45struct PluginInfo;
46struct PluginSelection;
47struct PluginLoadResult;
48std::vector<PluginInfo> scan_clap_bundle_descriptors(const std::string& path);
50
51namespace detail {
52// Complete in the installed header: consumers cannot define a friend class of
53// their own with privileged methods. Only these concrete production operations
54// can invoke the private mint; importing a capture never reaches it.
61} // namespace detail
62
65class PluginIdentityEvidence {
66 public:
67 static PluginIdentityEvidence
70 std::string source_contract = {}, PluginArtifactProvenance artifact = {}) {
71 return {std::move(type), origin, std::move(source_contract), std::move(artifact),
73 }
74 const PluginTypeIdentity& type() const noexcept {
75 return type_;
76 }
77 PluginIdentityOrigin origin() const noexcept {
78 return origin_;
79 }
81 return verification_;
82 }
83 const std::string& source_contract_revision() const noexcept {
84 return source_contract_;
85 }
86 const PluginArtifactProvenance& artifact() const noexcept {
87 return artifact_;
88 }
89
90 private:
92 PluginIdentityEvidence(PluginTypeIdentity type, PluginIdentityOrigin origin,
93 std::string contract, PluginArtifactProvenance artifact,
95 : type_(std::move(type)), origin_(origin), source_contract_(std::move(contract)),
96 artifact_(std::move(artifact)), verification_(verification) {}
99 std::string source_contract_;
100 PluginArtifactProvenance artifact_;
101 PluginIdentityVerification verification_;
102};
103
105std::optional<PluginIdentityError> validate_plugin_type_identity(const PluginTypeIdentity&);
106
111
112std::variant<CanonicalPluginIdentity, PluginIdentityError>
114
117std::optional<PluginIdentityEvidence> parse_plugin_identity_evidence(std::string_view);
118
127} // namespace pulp::host
Immutable owned evidence.
Definition plugin_identity.hpp:65
const std::string & source_contract_revision() const noexcept
Definition plugin_identity.hpp:83
const PluginTypeIdentity & type() const noexcept
Definition plugin_identity.hpp:74
static PluginIdentityEvidence declared(PluginTypeIdentity type, PluginIdentityOrigin origin=PluginIdentityOrigin::authored_assertion, std::string source_contract={}, PluginArtifactProvenance artifact={})
Definition plugin_identity.hpp:68
const PluginArtifactProvenance & artifact() const noexcept
Definition plugin_identity.hpp:86
PluginIdentityVerification verification() const noexcept
Definition plugin_identity.hpp:80
PluginIdentityOrigin origin() const noexcept
Definition plugin_identity.hpp:77
Definition plugin_identity.hpp:55
Definition baked_codec.hpp:158
Bounded event contracts shared by host ingress and graph-authored nodes.
Definition anticipation_eligibility.hpp:9
std::vector< PluginInfo > scan_clap_bundle_descriptors(const std::string &path)
std::optional< PluginIdentityError > validate_plugin_type_identity(const PluginTypeIdentity &)
Pure validation: nonempty, bounded UTF-8 without NUL or Unicode controls.
std::optional< PluginIdentityEvidence > parse_plugin_identity_evidence(std::string_view)
PluginLoadResult load_clap_plugin_exact(const PluginSelection &selection)
PluginIdentityOrigin
Definition plugin_identity.hpp:33
@ authored_assertion
Definition plugin_identity.hpp:33
@ clap_descriptor
Definition plugin_identity.hpp:33
PluginIdentityVerification
Definition plugin_identity.hpp:34
@ loaded
Definition plugin_identity.hpp:34
@ declared
Definition plugin_identity.hpp:34
std::string serialize_plugin_identity_evidence(const PluginIdentityEvidence &)
Unsigned serialized captures always import as declared, even if originally loaded.
std::variant< CanonicalPluginIdentity, PluginIdentityError > canonical_plugin_identity(const PluginIdentityEvidence &)
Encodes only type identity; preserves evidence without increasing its trust.
PluginIdentityError
Definition plugin_identity.hpp:21
@ unsupported_format
Definition plugin_identity.hpp:22
@ descriptor_selection_ambiguous
Definition plugin_identity.hpp:27
@ loaded_identity_mismatch
Definition plugin_identity.hpp:30
@ descriptor_enumeration_incomplete
Definition plugin_identity.hpp:28
@ descriptor_selection_missing
Definition plugin_identity.hpp:26
@ identity_origin_unverified
Definition plugin_identity.hpp:25
@ plugin_load_failed
Definition plugin_identity.hpp:29
@ invalid_native_identity
Definition plugin_identity.hpp:24
@ native_identity_missing
Definition plugin_identity.hpp:23
STL namespace.
Definition plugin_identity.hpp:107
std::string bytes
Definition plugin_identity.hpp:108
PluginIdentityEvidence evidence
Definition plugin_identity.hpp:109
Executable-byte observation, not a portable release identity or signature.
Definition plugin_identity.hpp:37
std::uint64_t byte_length
Definition plugin_identity.hpp:39
bool operator==(const PluginArtifactProvenance &) const =default
std::string sha256
Definition plugin_identity.hpp:38
std::optional< std::string > descriptor_version
Definition plugin_identity.hpp:40
Definition scanner.hpp:35
Exactly one loaded slot or typed refusal. A successful slot owns its receipt.
Definition plugin_slot.hpp:414
Definition plugin_identity.hpp:123
PluginTypeIdentity requested
Definition plugin_identity.hpp:124
PluginIdentityEvidence loaded
Definition plugin_identity.hpp:125
Definition plugin_identity.hpp:119
std::string path
Definition plugin_identity.hpp:120
PluginTypeIdentity type
Definition plugin_identity.hpp:121
CLAP-only type identity. Exact UTF-8 bytes; no name, path or normalization.
Definition plugin_identity.hpp:15
std::string descriptor_id
Definition plugin_identity.hpp:17
std::string format
Definition plugin_identity.hpp:16
bool operator==(const PluginTypeIdentity &) const =default