Ir para o conteúdo
Transferências · integridade

Verificar a integridade de um zip do Knot Core

Como confirmar que um zip transferido de knot.tools/downloads/knot-core/latest corresponde à versão publicada.

Versão atual Knot Core 2.13.24Manifesto releases.json

1. Obter o SHA256 publicado

O hash atual é apresentado na página do Knot Core e no manifesto:

curl -sS https://knot.tools/downloads/data/releases.json | jq -r '.latest.zip_sha256'

Ou através dos cabeçalhos HTTP na transferência:

curl -sI https://knot.tools/downloads/knot-core/latest | grep -i x-knot-sha256
SHA2568432e7f55eeceef36e055d9d530622984fead0ad4ea657d112c231c8574a3cfb

2. Transferir o zip

curl -sSL -o knot-core.zip https://knot.tools/downloads/knot-core/latest

3. Comparar localmente

macOS / Linux (BSD):

shasum -a 256 knot-core.zip

Linux (GNU):

sha256sum knot-core.zip

O resultado deve corresponder exatamente ao zip_sha256 publicado.

4. Assinatura Ed25519 (releases ≥ 2.13.4)

O manifesto inclui signature_hex e signature_payload. A assinatura cobre o JSON canónico do payload (não o conteúdo binário do zip). Chave pública fixada: rel-2026-04.

628d5479fee21f70088115ea3dba50264d404d5a82782d6d20c781d3d27e188e

Exemplo PHP (extensão sodium):

$manifest = json_decode(file_get_contents('https://knot.tools/downloads/data/releases.json'), true);
$payload = $manifest['latest']['signature_payload'];
$sig = sodium_hex2bin($manifest['latest']['signature_hex']);
$pub = sodium_hex2bin('628d5479fee21f70088115ea3dba50264d404d5a82782d6d20c781d3d27e188e');
$sort = function (array &$a) use (&$sort): void {
    ksort($a);
    foreach ($a as &$v) {
        if (is_array($v)) {
            $sort($v);
        }
    }
};
$sort($payload);
$canonical = json_encode($payload, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
var_export(sodium_crypto_sign_verify_detached($sig, $canonical, $pub));