blake3
This commit is contained in:
+8
-8
@@ -31,7 +31,7 @@ not three partially compatible protocol generations.
|
|||||||
| Area | Decision | User-visible result |
|
| Area | Decision | User-visible result |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Filesystem safety | Validate the complete destination manifest before any mutation and confine it to one catalog game root. | A hostile peer cannot overwrite another game, `local/`, saves, or transaction state. |
|
| Filesystem safety | Validate the complete destination manifest before any mutation and confine it to one catalog game root. | A hostile peer cannot overwrite another game, `local/`, saves, or transaction state. |
|
||||||
| Content authority | Ship SHA-256 file and chunk hashes from the same bundled catalog authority as `game.db`. | Every eligible nearby peer is usable automatically; wrong bytes are rejected and retried elsewhere. |
|
| Content authority | Ship BLAKE3 file and chunk hashes from the same bundled catalog authority as `game.db`. | Every eligible nearby peer is usable automatically; wrong bytes are rejected and retried elsewhere. |
|
||||||
| Peer identity | Use one installation-local TLS key and derive `PeerId` from that TLS public key. | Identity works silently and survives ordinary restarts when possible; users do not manage it. |
|
| Peer identity | Use one installation-local TLS key and derive `PeerId` from that TLS public key. | Identity works silently and survives ordinary restarts when possible; users do not manage it. |
|
||||||
| Transport | Pin every outbound QUIC connection to the expected `PeerId`. | An address spoof or MITM cannot impersonate the peer selected as a source. |
|
| Transport | Pin every outbound QUIC connection to the expected `PeerId`. | An address spoof or MITM cannot impersonate the peer selected as a source. |
|
||||||
| Control messages | Use ordinary bounded protocol messages inside TLS. Treat unauthenticated inbound change notifications only as hints that trigger a pinned pull. | No signed-envelope layer, nonce ledger, or message-signing overhead. |
|
| Control messages | Use ordinary bounded protocol messages inside TLS. Treat unauthenticated inbound change notifications only as hints that trigger a pinned pull. | No signed-envelope layer, nonce ledger, or message-signing overhead. |
|
||||||
@@ -45,7 +45,7 @@ The resulting data flow is intentionally small:
|
|||||||
mDNS candidate -> responder-pinned TLS -> peer-owned snapshot or file bytes
|
mDNS candidate -> responder-pinned TLS -> peer-owned snapshot or file bytes
|
||||||
|
|
||||||
bundled content manifest -> validated local download plan
|
bundled content manifest -> validated local download plan
|
||||||
-> SHA-256 check for every received chunk
|
-> BLAKE3 check for every received chunk
|
||||||
-> version.ini commit only after complete success
|
-> version.ini commit only after complete success
|
||||||
|
|
||||||
local Call to Play change -> cheap invalidation hint to known peers
|
local Call to Play change -> cheap invalidation hint to known peers
|
||||||
@@ -164,16 +164,16 @@ CatalogContentManifest {
|
|||||||
game_version
|
game_version
|
||||||
chunk_size
|
chunk_size
|
||||||
files: [
|
files: [
|
||||||
{ canonical_path, kind, size, file_sha256, chunk_sha256[] }
|
{ canonical_path, kind, size, file_blake3, chunk_blake3[] }
|
||||||
]
|
]
|
||||||
streamed_install_files: [
|
streamed_install_files: [
|
||||||
{ canonical_path, kind, size, file_sha256 }
|
{ canonical_path, kind, size, file_blake3 }
|
||||||
]
|
]
|
||||||
content_id
|
content_id
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Entries are sorted by canonical path. `content_id` is SHA-256 over a
|
Entries are sorted by canonical path. `content_id` is BLAKE3 over a
|
||||||
versioned, length-delimited encoding of all preceding manifest fields and
|
versioned, length-delimited encoding of all preceding manifest fields and
|
||||||
hashes, excluding the `content_id` field itself; it is not the current
|
hashes, excluding the `content_id` field itself; it is not the current
|
||||||
noncryptographic `u64 manifest_hash`. Golden tests freeze that encoding. The
|
noncryptographic `u64 manifest_hash`. Golden tests freeze that encoding. The
|
||||||
@@ -221,7 +221,7 @@ files” progress, not a security decision.
|
|||||||
|
|
||||||
Streamed install needs a catalog-owned extracted-file manifest because the
|
Streamed install needs a catalog-owned extracted-file manifest because the
|
||||||
sender controls both today's RAR CRC32 metadata and extracted bytes. The
|
sender controls both today's RAR CRC32 metadata and extracted bytes. The
|
||||||
receiver accepts exactly the expected path set, sizes, and SHA-256 values in
|
receiver accepts exactly the expected path set, sizes, and BLAKE3 values in
|
||||||
isolated staging, then applies the documented local account/language rewrite
|
isolated staging, then applies the documented local account/language rewrite
|
||||||
and promotes the transaction. CRC32 may remain as an early corruption check,
|
and promotes the transaction. CRC32 may remain as an early corruption check,
|
||||||
but it is not the security boundary. A game without a verified extracted
|
but it is not the security boundary. A game without a verified extracted
|
||||||
@@ -244,7 +244,7 @@ not exposed as a user credential.
|
|||||||
responder-verification path. Otherwise use one supported P-256 TLS key. Do not
|
responder-verification path. Otherwise use one supported P-256 TLS key. Do not
|
||||||
add a second signing identity or a custom certificate-extension binding.
|
add a second signing identity or a custom certificate-extension binding.
|
||||||
- Define `PeerId` as lowercase unpadded base32 of
|
- Define `PeerId` as lowercase unpadded base32 of
|
||||||
`SHA-256(canonical DER SubjectPublicKeyInfo)` from the actual TLS key. The
|
`BLAKE3(canonical DER SubjectPublicKeyInfo)` from the actual TLS key. The
|
||||||
same key is therefore both the identity and the TLS proof-of-possession key.
|
same key is therefore both the identity and the TLS proof-of-possession key.
|
||||||
- Validate on load that the private key, certificate SPKI, and derived ID
|
- Validate on load that the private key, certificate SPKI, and derived ID
|
||||||
agree. Never log private material.
|
agree. Never log private material.
|
||||||
@@ -497,7 +497,7 @@ reported as Windows proof.
|
|||||||
Add the reproducible content-manifest generator and fixture manifests. Freeze
|
Add the reproducible content-manifest generator and fixture manifests. Freeze
|
||||||
the versioned manifest/content-ID encoding with golden tests. Extend local
|
the versioned manifest/content-ID encoding with golden tests. Extend local
|
||||||
catalog state, build download plans only from that state, implement streaming
|
catalog state, build download plans only from that state, implement streaming
|
||||||
SHA-256 checks and source quarantine, and implement verified extracted
|
BLAKE3 checks and source quarantine, and implement verified extracted
|
||||||
manifests for Stream Install.
|
manifests for Stream Install.
|
||||||
|
|
||||||
Do not claim completion from test fixtures alone: production catalog packages
|
Do not claim completion from test fixtures alone: production catalog packages
|
||||||
|
|||||||
Reference in New Issue
Block a user