Developer guide · Zikaron

Checksums

Every figure for the release files, the signature, the law’s digests and the registry contract can be recomputed yourself.

Release files

Version 0.1.5 has six release files, with their checksums in the release list SHA256SUMS.txt:

.dmg35bbd7df4bd89845ee63786b1339fed0a5ce564f0dbd890a5281e3957ef68751
.pkgfbeb29373dc40877ebd3531810e0e5447b2fbf0517dde4631c66af54e11d9d3e
.zip6347110c57bfd7aa6d6c941ef6a4f030d9f2c79a371e8a0dced475e2eca62062
.deb426ee6cd23fa4813fcd85995f54c343714f658c1daa88284f11912b95fbfd0c0
AppImage80a24e2b25bcc8178f0643ab528541684fc7905bfe731f07a01ae5b4b633b37f
Sourceb30c7a2d7f0af2493e513ca06a06a7260d01b348bf60ead6e31909e4604523ef

On each system, compute one file and compare it with the table:

macOS
shasum -a 256 ZIKARON-0.1.5-macos-arm64.dmg
Linux
sha256sum zikaron-desk_0.1.5_amd64.deb
Windows
Get-FileHash ZIKARON-0.1.5-windows-x86_64.zip -Algorithm SHA256
PowerShell prints the value in capitals; compare it without regard to case.

On macOS and Linux you can also put the release list and the downloaded files in one folder and check them all at once:

macOS
shasum -a 256 -c --ignore-missing SHA256SUMS.txt
Linux
sha256sum -c --ignore-missing SHA256SUMS.txt

The third-party licences of the three platforms, THIRD-PARTY-LICENSES-macos.txt, THIRD-PARTY-LICENSES-linux.txt and THIRD-PARTY-LICENSES-windows.txt, are published separately, byte for byte the same as the copy in each package, and stay outside the release list. The drop zone on the download page does the same check: it computes the SHA-256 in the browser and compares it with the list.

Signature

On macOS the app and the dmg are signed with Kaptonia’s self-signed certificate; the pkg is checked by its SHA-256. Once installed, look at the app’s signature: Authority in the output should be Kaptonia, and Identifier should be com.kaptonia.zikaron.app:

codesign -dvv /Applications/ZIKARON.app

Then look at the signing requirement; the string after certificate leaf is the certificate’s SHA-1:

codesign -d -r- /Applications/ZIKARON.app

To compute the certificate’s SHA-256, extract the certificate first:

codesign -d --extract-certificates /Applications/ZIKARON.app shasum -a 256 codesign0
SignerCN=Kaptonia (self-signed)
Certificate SHA-256a6ddc371e855197c5021ef44ab0802749cda318bc12d0138ccac9f46a4d46905
Certificate SHA-1570690b34fc35243ae8b45be0aeb800e1074225e
Valid2026-09-26 to 2036-09-23

The dmg’s own signature can be checked the same way: codesign -dvv ZIKARON-0.1.5-macos-arm64.dmg.

The Windows zip and the Linux deb and AppImage are unsigned; check them by their SHA-256. On first start Windows says “Windows protected your PC”; click “More info”, then “Run anyway”. On Windows 11 with Smart App Control on, unsigned programs are blocked outright, so turn it off first.

Zikaron record

The code of each release is one commit. At release, the project records that commit and each release file’s fingerprint in its Zikaron ledger and anchors them on Ethereum mainnet: written once and final, with a block time; the “Zikaron record” column of the download table links to that transaction. Before 0.1.5 was published, these fingerprints were recorded as ten records and anchored in the two transactions below, the deb package’s in the second:

First transaction0xa11f64f739412a68861ef5761f88627b0798bd13290170ae603001284f9c7209
Block26268898 · 2026-10-25 09:48:59 UTC
Second transaction0x42b27849976bb6d2306211d51f40c04faf440ce24d901b2dedb542e4bea378ba
Block26268952 · 2026-10-25 09:59:47 UTC
Recorder address0x3be672658efa08b9820bbebaf7c4f0e77433f878
Registry contract0x36Ea8A857a5FE813429d4D9947000C644A88809A

The ten records in the ledger (entry number, record name and content fingerprint):

EntryRecordContent fingerprint
#72ZIKARON-0.1.5-macos-arm64.dmg0x35bbd7df4bd89845ee63786b1339fed0a5ce564f0dbd890a5281e3957ef68751
#73ZIKARON-0.1.5-macos-arm64.pkg0xfbeb29373dc40877ebd3531810e0e5447b2fbf0517dde4631c66af54e11d9d3e
#83zikaron-desk_0.1.5_amd64.deb0x426ee6cd23fa4813fcd85995f54c343714f658c1daa88284f11912b95fbfd0c0
#75ZIKARON-0.1.5-x86_64.AppImage0x80a24e2b25bcc8178f0643ab528541684fc7905bfe731f07a01ae5b4b633b37f
#76zikaron-0.1.5-src.tar.gz0xb30c7a2d7f0af2493e513ca06a06a7260d01b348bf60ead6e31909e4604523ef
#77ZIKARON-0.1.5-windows-x86_64.zip0x6347110c57bfd7aa6d6c941ef6a4f030d9f2c79a371e8a0dced475e2eca62062
#78Zikaron-Desk-0.1.5-Windows.exe, that is zikaron-desk.exe in the zip0x64dc07db433f2bf0563c5f350b63934f4c534c88f9d46eabc83e76e310c011c9
#79Zikaron-CLI-0.1.5-Windows.exe, that is zikaron.exe in the zip0x12f32717b501dca2a4c8410f9cb64dbaa72efd20b27411124ab89e9f45df8b09
#80Zikaron 0.1.5 SHA256, that is SHA256SUMS.txt0xa7e832545d5d357c5d0bfb82ad18bf7224f6eb077967ffd0155ea4453ef42416
#81Zikaron 0.1.5 github repo, that is commit 7d44f970x0ced9dcb1c6ef8867a9c193d5eb48a03b209609d9710287fa3baee7609a57163

A file’s content fingerprint is the SHA-256 of its bytes; the two Windows programs each get a record of their own, to check one by one after unpacking the zip. The repository’s fingerprint is the SHA-256 of the current commit object; in a clone of the repository, run:

git cat-file commit v0.1.5 | shasum -a 256

What is anchored on chain is the entry IDs of these ten entries (the SHA-256 of each entry’s bytes), and the entries record the fingerprints above. Each entry’s ID:

#720x886f2e181483c3b543c0d735280199409851a4d43754199daca9cf5128fa5de6
#730x8310d3a9445981900e05a2321d06c2af8ef1a4d37f21f76712aa027b36b8411f
#830x2063bbe9b7c3b4496d1163bff8db788b7f8e108d465021806aeed8223e539cd7
#750x74e75ab68afd4d1bf1927dd2f0e1516c3f089307bc16d1930f74be05db0c0642
#760xa560f37a41563d5932c101b0ce0707f7bf3ebfc38f9a65a01b54b56517133892
#770xafb12cbc7c8f4cf7e9dff78a8409956f2d1d6539b67580d2a433ad17a49295dc
#780xc670d932cea30344f99c9808cde8e1cfc3c6e72d0c205f8fc1551446acbbf180
#790x5d5160a32d24cee572b9a993114fcfc77c59da676640d750d8969ac7a272ae13
#800x80ccde3e58889dc27f03a6e33530dd0ab7f34aeb8e2f7cd2d43c9513892e75e3
#810xdccd3b4f866cefa099b429f9a29b5676ee46480da987f788d33cb878e9829694

The law’s digests

Both laws are frozen, and their digests are written in the law texts. Unpack the source and compute them yourself; the results should match the table:

cd zikaron-0.1.5/base/zikaron-conformance ./criterion-digest.sh ./criterion-digest-kit.sh
zikaron/1 · §12.50xbecfb6f0d0f8b71c314f1b2efef414abfb6df74b711ca8f81efdef685d0132fc
zikaron.kit/1 · §13.50x3f8368ebc8b5b7c97e4b5c4240f57f6fc06421b4effbd5a7446d128434a20535

Each script reads a few Python source files and computes one digest; change any byte of them and the digest changes. See The law and the conformance suite.

The registry contract

The registry contract does one thing: it receives a fingerprint and emits an event. The app comes with four deployments, of which Ethereum mainnet, Arbitrum One and OP Mainnet are the same build at the same address. Read the code on chain and compute its keccak256, and the result should equal the code hash below:

cast keccak $(cast code <contract address> --rpc-url <node>)
Code hash0xfa97a1d9b22fab2b52f4e27c9a965b32734c40001b565ab365d05c887118f57d
Ethereum mainnet0x36Ea8A857a5FE813429d4D9947000C644A88809A
Arbitrum One0x36Ea8A857a5FE813429d4D9947000C644A88809A
OP Mainnet0x36Ea8A857a5FE813429d4D9947000C644A88809A
Sepolia0xC29410B882c4C3b77e33659d2f06ac563e7B08a3

How to recompute the hash from source is under The registry contract and anchoring.