载入中...
搜索中...
未找到
Evpack.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
10#include "common/Identity.h"
11#include "common/Result.h"
13
14#include <array>
15#include <cstddef>
16#include <cstdint>
17#include <span>
18#include <memory>
19#include <optional>
20#include <string>
21#include <vector>
22
23namespace eve::asset {
24
26enum class EvpackChunkKind : std::uint16_t {
27 Definition = 1,
28 Bulk = 2,
29 Stream = 3,
30 Shader = 4,
31 Dictionary = 5,
32 DebugName = 6,
33};
34
36enum class EvpackCodec : std::uint16_t {
37 None = 0,
38 Zstd = 1,
39};
40
43 std::string algorithm;
44 std::array<std::uint8_t, 32> keyId{};
45 std::array<std::uint8_t, 64> bytes{};
46};
47
50public:
52 virtual ~EvpackSigner() = default;
54 [[nodiscard]] virtual Result<EvpackSignature> sign(
55 std::span<const std::uint8_t, 32> digest) const = 0;
56};
57
60public:
62 virtual ~EvpackSignatureVerifier() = default;
64 [[nodiscard]] virtual Result<void> verify(
65 std::span<const std::uint8_t, 32> digest, const EvpackSignature& signature) const = 0;
66};
67
73
77 std::shared_ptr<const EvpackSignatureVerifier> verifier;
78};
79
82 std::string os;
83 std::string arch;
84 std::string graphics;
85 std::vector<std::string> textureFamilies;
86 std::string shaderFormat;
87 std::string quality;
88 std::vector<std::string> features;
89};
90
93 std::string os;
94 std::string arch;
95 std::string graphics;
96 std::vector<std::string> textureFamilies;
97 std::vector<std::string> shaderFormats;
98 std::vector<std::string> qualities;
99 std::vector<std::string> features;
100};
101
105 std::string type;
107 std::uint32_t variantIndex = 0;
109 std::uint32_t chunkId = 0;
111 std::uint32_t alignment = 1;
112 std::vector<PersistentId> dependencies;
113 std::vector<std::uint8_t> bytes;
114};
115
120 std::vector<EvpackVariant> variants;
121 std::vector<EvpackChunkInput> chunks;
122 std::shared_ptr<const EvpackSigner> signer;
123};
124
127 std::uint64_t maximumPackageBytes = 16ULL * 1024 * 1024 * 1024;
128 std::uint64_t maximumChunkBytes = 2ULL * 1024 * 1024 * 1024;
129 std::uint64_t maximumDecodedBytes = 32ULL * 1024 * 1024 * 1024;
130 std::uint64_t maximumMetadataBytes = 256ULL * 1024 * 1024;
131 std::uint32_t maximumChunks = 1000000;
132 std::uint32_t maximumVariants = 256;
133 std::uint32_t maximumDependencies = 4096;
134 std::uint32_t maximumStringBytes = 4096;
135};
136
140 std::string type;
142 std::uint32_t variantIndex = 0;
144 std::uint32_t chunkId = 0;
146 std::uint32_t alignment = 1;
147 std::uint64_t offset = 0;
148 std::uint64_t storedSize = 0;
149 std::uint64_t decodedSize = 0;
150 std::array<std::uint8_t, 32> contentHash{};
151 std::vector<PersistentId> dependencies;
152};
153
156 std::uint32_t index = 0;
157 bool usedFallback = false;
158};
159
165public:
167 [[nodiscard]] const PersistentId& packageId() const noexcept { return packageId_; }
169 [[nodiscard]] const PersistentId& buildId() const noexcept { return buildId_; }
171 [[nodiscard]] const std::vector<EvpackVariant>& variants() const noexcept { return variants_; }
173 [[nodiscard]] const std::vector<EvpackChunk>& chunks() const noexcept { return chunks_; }
175 [[nodiscard]] const std::optional<EvpackSignature>& signature() const noexcept { return signature_; }
177 [[nodiscard]] bool hasTrustedSignature() const noexcept { return trustedSignature_; }
178
186 [[nodiscard]] Result<std::span<const std::uint8_t>> chunkBytes(std::size_t index) const;
187
189 [[nodiscard]] Result<std::vector<std::uint8_t>> decodeChunk(
190 std::size_t index, std::uint64_t maximumDecodedBytes) const;
191
192private:
193 friend EVENGINE_API_FOUNDATION Result<Evpack> parseEvpack(std::span<const std::uint8_t>, const EvpackLimits&,
194 const EvpackTrust&);
195 friend Result<Evpack> parseEvpackMetadata(std::span<const std::uint8_t>, std::uint64_t,
196 const EvpackLimits&, const EvpackTrust&);
197 PersistentId packageId_;
198 PersistentId buildId_;
199 std::vector<EvpackVariant> variants_;
200 std::vector<EvpackChunk> chunks_;
201 std::vector<std::uint8_t> bytes_;
202 std::optional<EvpackSignature> signature_;
203 bool trustedSignature_ = false;
204};
205
208 const EvpackLimits& limits = {});
209
211[[nodiscard]] EVENGINE_API_FOUNDATION Result<Evpack> parseEvpack(std::span<const std::uint8_t> bytes,
212 const EvpackLimits& limits = {},
213 const EvpackTrust& trust = {});
214
222[[nodiscard]] Result<Evpack> parseEvpackMetadata(
223 std::span<const std::uint8_t> metadataPrefix, std::uint64_t packageSize,
224 const EvpackLimits& limits = {}, const EvpackTrust& trust = {});
225
230[[nodiscard]] EVENGINE_API_FOUNDATION Result<EvpackVariantSelection> selectEvpackVariant(
231 const Evpack& pack, const EvpackCapabilities& capabilities);
232
233} // namespace eve::asset
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
Definition Export.h:106
Strong identity values shared by persistence, content and logical-name APIs.
std::uint64_t bytes
Move-only, checked operation results for the common layer.
Persistent data-contract version identity.
std::string digest
uint32_t index
const AssetImportLimits & limits
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Runtime trust provider supplied by the application/project policy.
Definition Evpack.h:59
virtual ~EvpackSignatureVerifier()=default
Releases EvpackSignatureVerifier resources.
virtual Result< void > verify(std::span< const std::uint8_t, 32 > digest, const EvpackSignature &signature) const =0
Verify a detached signature against a trusted key identity.
Tool-side provider that signs the authenticated 32-byte package metadata digest.
Definition Evpack.h:49
virtual Result< EvpackSignature > sign(std::span< const std::uint8_t, 32 > digest) const =0
Produce a publisher signature without retaining the borrowed digest.
virtual ~EvpackSigner()=default
Releases EvpackSigner resources.
Fully admitted owning runtime pack.
Definition Evpack.h:164
const PersistentId & packageId() const noexcept
Stable package identity from the verified header.
Definition Evpack.h:167
const std::optional< EvpackSignature > & signature() const noexcept
Verified publisher signature, absent only for admitted development packages.
Definition Evpack.h:175
const PersistentId & buildId() const noexcept
Deterministic Cook build identity from the verified header.
Definition Evpack.h:169
const std::vector< EvpackVariant > & variants() const noexcept
Ordered capability variants encoded in the binary manifest.
Definition Evpack.h:171
const std::vector< EvpackChunk > & chunks() const noexcept
Verified random-access chunk table.
Definition Evpack.h:173
bool hasTrustedSignature() const noexcept
Whether publisher trust was cryptographically established during admission.
Definition Evpack.h:177
Id128 public API.
Definition Identity.h:112
Result< Evpack > parseEvpack(std::span< const std::uint8_t > bytes, const EvpackLimits &limits, const EvpackTrust &trust)
Parse, bound-check and hash-verify a complete untrusted .evpack.
Definition Evpack.cpp:542
Result< std::vector< std::uint8_t > > buildEvpack(EvpackBuild build, const EvpackLimits &limits)
Build deterministic little-endian .evpack bytes from validated Cook output.
Definition Evpack.cpp:248
EvpackSignaturePolicy
Admission policy for unsigned development packages.
Definition Evpack.h:69
EvpackCodec
Physical outer compression applied to one runtime chunk.
Definition Evpack.h:36
Result< EvpackVariantSelection > selectEvpackVariant(const Evpack &pack, const EvpackCapabilities &capabilities)
Select the first explicitly ordered variant satisfied by device capabilities.
Definition Evpack.cpp:585
Result< Evpack > parseEvpackMetadata(std::span< const std::uint8_t > bytes, std::uint64_t packageSize, const EvpackLimits &limits, const EvpackTrust &trust)
Admit only the contiguous header/manifest/TOC prefix of a range-readable package.
Definition Evpack.cpp:361
EvpackChunkKind
Semantic role of a runtime chunk.
Definition Evpack.h:26
Complete input to deterministic .evpack assembly.
Definition Evpack.h:117
std::vector< EvpackVariant > variants
Definition Evpack.h:120
PersistentId packageId
Definition Evpack.h:118
PersistentId buildId
Definition Evpack.h:119
std::shared_ptr< const EvpackSigner > signer
Definition Evpack.h:122
std::vector< EvpackChunkInput > chunks
Definition Evpack.h:121
Actual runtime device capabilities used for variant selection.
Definition Evpack.h:92
std::vector< std::string > qualities
Definition Evpack.h:98
std::vector< std::string > textureFamilies
Definition Evpack.h:96
std::vector< std::string > features
Definition Evpack.h:99
std::vector< std::string > shaderFormats
Definition Evpack.h:97
Cooker-owned uncompressed chunk before deterministic package assembly.
Definition Evpack.h:103
EvpackChunkKind kind
Definition Evpack.h:108
std::vector< std::uint8_t > bytes
Definition Evpack.h:113
SchemaVersion schemaVersion
Definition Evpack.h:106
std::uint32_t alignment
Definition Evpack.h:111
std::vector< PersistentId > dependencies
Definition Evpack.h:112
std::uint32_t variantIndex
Definition Evpack.h:107
Admitted immutable chunk metadata.
Definition Evpack.h:138
EvpackCodec codec
Definition Evpack.h:145
EvpackChunkKind kind
Definition Evpack.h:143
std::array< std::uint8_t, 32 > contentHash
Definition Evpack.h:150
SchemaVersion schemaVersion
Definition Evpack.h:141
std::vector< PersistentId > dependencies
Definition Evpack.h:151
std::uint64_t decodedSize
Definition Evpack.h:149
std::uint32_t alignment
Definition Evpack.h:146
std::uint64_t offset
Definition Evpack.h:147
std::uint32_t variantIndex
Definition Evpack.h:142
std::uint64_t storedSize
Definition Evpack.h:148
std::uint32_t chunkId
Definition Evpack.h:144
PersistentId assetId
Definition Evpack.h:139
Resource limits checked before package allocations and hash work.
Definition Evpack.h:126
std::uint64_t maximumDecodedBytes
Definition Evpack.h:129
std::uint32_t maximumVariants
Definition Evpack.h:132
std::uint32_t maximumDependencies
Definition Evpack.h:133
std::uint32_t maximumStringBytes
Definition Evpack.h:134
std::uint64_t maximumChunkBytes
Definition Evpack.h:128
std::uint32_t maximumChunks
Definition Evpack.h:131
std::uint64_t maximumMetadataBytes
Definition Evpack.h:130
std::uint64_t maximumPackageBytes
Definition Evpack.h:127
Fixed-size detached publisher signature stored in a v1 runtime pack.
Definition Evpack.h:42
std::array< std::uint8_t, 64 > bytes
Definition Evpack.h:45
std::array< std::uint8_t, 32 > keyId
Definition Evpack.h:44
Trust inputs kept separate from size/resource limits.
Definition Evpack.h:75
std::shared_ptr< const EvpackSignatureVerifier > verifier
Definition Evpack.h:77
EvpackSignaturePolicy policy
Definition Evpack.h:76
Result of ordered capability variant selection.
Definition Evpack.h:155
Capability-addressed runtime representation; list order is fallback order.
Definition Evpack.h:81
std::string quality
Definition Evpack.h:87
std::string shaderFormat
Definition Evpack.h:86
std::vector< std::string > features
Definition Evpack.h:88
std::vector< std::string > textureFamilies
Definition Evpack.h:85
std::string graphics
Definition Evpack.h:84