codai docs
Aplicații

Verifică descărcările

Ce este semnat și ce are checksum pe fiecare platformă — semnături minisign pe installerul Windows și AppImage-ul Linux, SHA256SUMS pe fiecare versiune — și ce nu este (Authenticode, notarizare, Android).

Fiecare versiune desktop de pe github.com/codai-ro/codai-desktop/releases poartă două tipuri de dovezi. Pagina asta spune exact ce fișiere primesc ce, ca să știi ce înseamnă de fapt o bifă verde.

PlatformăFișierChecksum în SHA256SUMSSemnătură detașatăSemnare de cod / notarizare
Windowscodai_<v>_x64-setup.exedada — codai_<v>_x64-setup.exe.sig (minisign)fără Authenticode încă — SmartScreen va avertiza
Windowscodai_<v>_x64_en-US.msidanunu
Windowscodai_<v>_x64-portable.zipdanunu
Linuxcodai_<v>_amd64.AppImageda (când e construit)da — .AppImage.sig (minisign, când e construit)n/a
Linux.deb, .rpmda (când sunt construite)nunesemnate GPG
macOS.dmg——nepublicat; fără notarizare
Android.apk—semnat cu keystore-ul de release (semnătură APK v2)fără fișier de checksum separat încă

latest.json din aceeași versiune este ce citește actualizatorul automat; platforms.windows-x86_64.signature de acolo este conținutul fișierului .exe.sig, așa că actualizatorul și o verificare manuală verifică același lucru.

Checksum-uri (fiecare fișier)

SHA256SUMS listează un SHA-256 în litere mici per artefact, în formatul <hash> <nume-fișier>.

# în folderul unde ai descărcat artefactele
$sums = Get-Content .\SHA256SUMS
Get-ChildItem codai_* | ForEach-Object {
  $h = (Get-FileHash $_.FullName -Algorithm SHA256).Hash.ToLower()
  $ok = $sums -match "^$h  $([regex]::Escape($_.Name))$"
  "{0}  {1}" -f ($(if ($ok) { 'OK ' } else { 'BAD' })), $_.Name
}

Un checksum dovedește că fișierul nu a fost corupt sau înlocuit după publicare. Nu dovedește cine l-a publicat — pentru asta ai nevoie de semnătura de mai jos.

Semnături (installer Windows, AppImage Linux)

Fișierele .sig sunt semnături minisign produse de tauri signer. Cheia publică corespunzătoare este compilată în aplicație și tipărită în src-tauri/tauri.conf.json → plugins.updater.pubkey. Doar un fișier semnat cu jumătatea privată a acelei chei va fi instalat de actualizator — și doar un astfel de fișier ar trebui instalat de tine.

Obții cheia publică

Este codificată base64 în tauri.conf.json. O decodezi într-o cheie publică minisign pe două linii:

$pub = 'dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDFCRERBM0QxMDY4NzYyNjcKUldSbllvY0cwYVBkRzcrYXdNcmFyMnZmTEhTRGJPOWlmZVkzdGZsVjRJWXN1Q0dHTXp6UWJSaGcK'
[Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($pub)) | Set-Content codai-desktop.pub

Fișierul decodat începe cu untrusted comment: minisign public key: 1BDDA3D106876267. Compari acel id de cheie cu cel din tauri.conf.json al repo-ului — dacă diferă, te oprești.

Decodezi semnătura

.sig-ul este și el base64:

$v = '0.6.1'
[Text.Encoding]::UTF8.GetString([Convert]::FromBase64String((Get-Content "codai_${v}_x64-setup.exe.sig" -Raw))) | Set-Content "codai_${v}_x64-setup.exe.minisig"

Verifici

Instalezi minisign (winget install minisign, brew install minisign, sau pachetul distribuției), apoi:

minisign -Vm "codai_${v}_x64-setup.exe" -p codai-desktop.pub -x "codai_${v}_x64-setup.exe.minisig"

Signature and comment signature verified înseamnă că fișierul este cel semnat de noi. Orice altceva înseamnă că nu este — nu îl rulezi și ne scrii la [email protected].

Aceiași trei pași se aplică pentru codai_<v>_amd64.AppImage / .AppImage.sig pe versiunile care includ un build Linux.

Ce nu este semnat azi

Fii precis în privința a ce acoperă un rezultat verde.

  • Authenticode Windows — installerul nu este semnat cu un certificat de semnare de cod, așa că Windows SmartScreen afișează „Windows protected your PC” prima dată. Este planificat (Azure Artifact Signing); până atunci verificarea minisign de mai sus este modul de a ști că fișierul este al nostru.
  • .msi și .zip-ul portabil — au checksum, nu semnătură.
  • .deb / .rpm Linux — au checksum, nu semnătură GPG; nu există repo apt/dnf.
  • macOS — niciun build publicat, deci nicio notarizare.
  • APK Android — semnat cu keystore-ul de release, cum trebuie orice aplicație Android (certificat SHA-256 11:F1:6A:8B…; amprenta completă este în repo-ul codai-phone). Android o verifică la instalare și refuză o actualizare semnată cu altă cheie. Nu există încă un SHA256SUMS separat pentru APK.

Versiuni și rollback

  • Versiunile sunt etichetate desktop-v<versiune>; cele trei fișiere de versiune din sursă (package.json, tauri.conf.json, Cargo.toml) sunt mereu în acord cu eticheta.
  • Endpoint-ul de actualizare https://codai.ro/api/desktop/latest.json servește cea mai nouă versiune non-pre-release. O versiune defectă este retrasă marcând-o pre-release (sau ștergând-o): cea anterioară redevine „latest” în cinci minute. Actualizatorul nu face niciodată downgrade unei versiuni mai noi deja instalate.
  • Cheia privată de semnare nu părăsește niciodată mașina maintainerului și are backup offline; pierderea ei ar orfaniza fiecare client instalat.

Pe această pagină