Stage 0: the package datekeys and its test data at spec-v0.11
A pure Dart package, without Flutter, for the app that the author will
write in Flutter (docs/PLAN_dart.md, stage 0):
- pubspec.yaml: the package datekeys, unpublished, for Dart 3.13; at run
time only package:crypto, and in development only package:test, which
the author approved on 5 October.
- testdata/ vendored from datekeys-go at the tag spec-v0.11 (ae33434),
124 files, with the same testdata/SOURCE.json that datekeys-ts writes for
that commit.
- tool/sync_testdata.dart, the port of scripts/sync-testdata.mjs, and
test/testdata_test.dart, which checks the copy and that every file names
specVersion; test/version_test.dart keeps pubspec.yaml and
lib/src/version.dart in step.
- tool/check.sh, the local gate: format, analysis with every info fatal,
tests, and the copy against ../datekeys-go.
- The licence, Apache-2.0, as the other two implementations.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3 days ago
{
"description" : "format 3 time_only capsule with five files in three folders, one of them over two STREAM chunks and one without mtime, a comment of two lines and a declared author" ,
Specification 0.15: the release object, a release in hand and step 9.c
specVersion is 0.15 and testdata is synced with datekeys-go at 3c3e737
(branch v0.15): every file changes its spec field, mutations.json gains the
field source and four cases, and vectors/release.json and releases/ are new
(142 files).
release.dart, as provider of Go at 2eeca40, with its texts: encodeRelease
and decodeRelease of the release object (spec v0.15, 47.1) with the CBOR
profile of the library, its size first, then its type and version, then its
schema; parseRelease, which also reads drand's JSON with the rules of
encoding/json of Go for its three fields; verifyRelease checks the chain hash
a release names, ERR_PROFILE_MISMATCH, before its round and its signature;
ReleaseSupplier, EncodedRelease and supplyRelease, a release in the caller's
hand; and ReleaseArchive, the lookup of a local release archive (50), whose
failures are ERR_RELEASE_UNAVAILABLE at step 9.
open: OpenOptions.release takes a release in hand, exclusive with source. It
is not compared with the clock (step 9.c); Opened.clockBehind reports a clock
behind it, and the step 9 detail is Go's. Step 10 starts with the layers of
the object. A network source keeps its behaviour. Opened.release carries the
chain hash of the pinned profile.
Vectors: mutation_texts.json is regenerated with tool/mutation_go_texts.go,
which now replays each case with its source as testkit does: 149 cases
change only the detail of step 9 ("release supplied by the caller"), the
case "round not reached yet" now opens, and the four new cases are added.
release_vectors.json, the open vectors, and the formats, locator, security
and seal vectors come out the same at 3c3e737 but for their spec field.
tool/release_archive_go_texts.go writes the texts of provider.Archive on
edited archives; tool/release_copy.dart copies release.json, releases/ and
those texts to release.g.dart for the tests compiled to JavaScript.
errors_spec_test reads the spec at the commit of testdata/SOURCE.json rather
than at its tag.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2 days ago
"spec" : "0.15" ,
Stage 0: the package datekeys and its test data at spec-v0.11
A pure Dart package, without Flutter, for the app that the author will
write in Flutter (docs/PLAN_dart.md, stage 0):
- pubspec.yaml: the package datekeys, unpublished, for Dart 3.13; at run
time only package:crypto, and in development only package:test, which
the author approved on 5 October.
- testdata/ vendored from datekeys-go at the tag spec-v0.11 (ae33434),
124 files, with the same testdata/SOURCE.json that datekeys-ts writes for
that commit.
- tool/sync_testdata.dart, the port of scripts/sync-testdata.mjs, and
test/testdata_test.dart, which checks the copy and that every file names
specVersion; test/version_test.dart keeps pubspec.yaml and
lib/src/version.dart in step.
- tool/check.sh, the local gate: format, analysis with every info fatal,
tests, and the copy against ../datekeys-go.
- The licence, Apache-2.0, as the other two implementations.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3 days ago
"format" : 3 ,
"file" : "format3_tree.dkc" ,
"sha256" : "217f378faaf795f6a9c416b564fb8931bb2e896918aee870120fd14f9a5da7d1" ,
"release" : {
"round" : 1001 ,
"signature" : "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41"
} ,
"prelude" : "444b43310300000000000079000001ca" ,
"public_header" : "a5006a646174656b657963617001010250091119676ec081409c666846153ba7eb037853646b315f65794a325a584a7a61573975496a6f784c434a755a58523362334a72496a6f695a4746305a57746c65584d3663585670593274755a585136646a45694c434a79623356755a4349364d5441774d58300400" ,
"datekey" : "dk1_eyJ2ZXJzaW9uIjoxLCJuZXR3b3JrIjoiZGF0ZWtleXM6cXVpY2tuZXQ6djEiLCJyb3VuZCI6MTAwMX0" ,
"capsule_id" : "091119676ec081409c666846153ba7eb" ,
"access_policy" : "time_only" ,
"structure" : "time_only" ,
"unlock_at" : "2023-08-23T15:59:27Z" ,
"header_binding" : "a369edff0cde0c948ccf0be811991b5f466f3128e2d76ab5f2604741cbcd7eb9" ,
"outer_stanzas" : [
{
"type" : "tlock" ,
"args" : [
"1001" ,
"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
]
}
] ,
"payload_stanzas" : [
{
"type" : "X25519" ,
"args" : [
"secFiYmnRb5jyjFfrsZs5TWl6ZQ4c6qwPoRK7yvMJAw"
]
}
] ,
"control_cbor" : "a60070646174656b6579732d636f6e74726f6c0103025820a369edff0cde0c948ccf0be811991b5f466f3128e2d76ab5f2604741cbcd7eb90358206084cf489493da67e85e71b3ef5c2e6e17db1a11795fce9be601c062db4f7c8d0648000000000001486e0702" ,
"payload_identity" : "6084cf489493da67e85e71b3ef5c2e6e17db1a11795fce9be601c062db4f7c8d" ,
"payload_length" : 84078 ,
"padding" : 2 ,
"padded_length" : 86016 ,
"plaintext_file" : "format3_tree.plaintext" ,
"plaintext_sha256" : "f69ac5f450966f7d0e9161aa37451d4260b194a750e3e132c02e8a15ba561cfa" ,
"area_len" : 512 ,
"security_cbor" : "a20071646174656b6579732d73656375726974790101" ,
"head_cbor" : "a6006d646174656b6579732d686561640101025820276d7d0418b5fe20dfa9a440c9cf6a259d041238433b44c1d331bfc25ff0bc3903782f5061726120616272697220656e2066616d696c69612e0a436f6e2063617269c3b16f2c20646573646520323032362e046a416e61204cc3b370657a0585a6006963617274612e747874011825020003182504582089f8d33bccb614f3928203cdc48da69b2c7e3eedddcc097d47977806077fb5c1051a6abcf9c0a5007818666f746f732f323032352f6174617264656365722e6a706701190bb802182503190bdd045820cc26b6f4c05b315883de7ca59eb990a56efaff70c6b8f366e900975804b27b18a60074666f746f732f323032352f706c6179612e6a7067011a0001388002190bdd031a0001445d0458205619f3e6974f07c51e71777064e0d46992144fe91f6218fb00ac2e7074555ed1051a6abba840a6006f666f746f732f6c65656d652e7478740116021a0001445d031a00014473045820cc5e54573bb1b57f0481843fe6c1bd7bebd236d73057220cc8dba732d9cf4700051a6abcf9c0a600746dc3ba736963612f63616e6369c3b36e2e747874010c021a00014473031a0001447f0458203e1453835def913b4b9ef720e11e5e2ac167a9af12b9f0a5417be8f84ded5e5a051a6abcf9c0" ,
"salt" : "276d7d0418b5fe20dfa9a440c9cf6a259d041238433b44c1d331bfc25ff0bc39" ,
"comment" : "Para abrir en familia.\nCon cariño, desde 2026." ,
"declared_author" : "Ana López" ,
"content_offset" : 1007 ,
"files" : [
{
"path" : "carta.txt" ,
"size" : 37 ,
"start" : 0 ,
"end" : 37 ,
"sha256" : "89f8d33bccb614f3928203cdc48da69b2c7e3eedddcc097d47977806077fb5c1" ,
"mtime" : 1790769600
} ,
{
"path" : "fotos/2025/atardecer.jpg" ,
"size" : 3000 ,
"start" : 37 ,
"end" : 3037 ,
"sha256" : "cc26b6f4c05b315883de7ca59eb990a56efaff70c6b8f366e900975804b27b18"
} ,
{
"path" : "fotos/2025/playa.jpg" ,
"size" : 80000 ,
"start" : 3037 ,
"end" : 83037 ,
"sha256" : "5619f3e6974f07c51e71777064e0d46992144fe91f6218fb00ac2e7074555ed1" ,
"mtime" : 1790683200
} ,
{
"path" : "fotos/leeme.txt" ,
"size" : 22 ,
"start" : 83037 ,
"end" : 83059 ,
"sha256" : "cc5e54573bb1b57f0481843fe6c1bd7bebd236d73057220cc8dba732d9cf4700" ,
"mtime" : 1790769600
} ,
{
"path" : "música/canción.txt" ,
"size" : 12 ,
"start" : 83059 ,
"end" : 83071 ,
"sha256" : "3e1453835def913b4b9ef720e11e5e2ac167a9af12b9f0a5417be8f84ded5e5a" ,
"mtime" : 1790769600
}
] ,
"verdicts" : {
"signature" : "F0" ,
"seal" : "S0" ,
"lines" : [
"Sin firma de autor."
]
} ,
"stages" : [
{
"step" : 1 ,
"name" : "parse DKC1" ,
"ok" : true
} ,
{
"step" : 2 ,
"name" : "prelude" ,
"ok" : true
} ,
{
"step" : 3 ,
"name" : "public header" ,
"ok" : true
} ,
{
"step" : 4 ,
"name" : "header validation" ,
"ok" : true
} ,
{
"step" : 5 ,
"name" : "sealed control structure" ,
"ok" : true
} ,
{
"step" : 6 ,
"name" : "payload structure" ,
"ok" : true
} ,
{
"step" : 7 ,
"name" : "condition" ,
"ok" : true
} ,
{
"step" : 8 ,
"name" : "tlock stanza" ,
"ok" : true
} ,
{
"step" : 9 ,
"name" : "release" ,
"ok" : true
} ,
{
"step" : 10 ,
"name" : "release verification" ,
"ok" : true
} ,
{
"step" : 11 ,
"name" : "open sealed control" ,
"ok" : true
} ,
{
"step" : 12 ,
"name" : "policy structure" ,
"ok" : true
} ,
{
"step" : 14 ,
"name" : "control" ,
"ok" : true
} ,
{
"step" : 15 ,
"name" : "header binding" ,
"ok" : true
} ,
{
"step" : 16 ,
"name" : "payload identity" ,
"ok" : true
} ,
{
"step" : 17 ,
"name" : "open payload" ,
"ok" : true
} ,
{
"step" : 18 ,
"name" : "commit" ,
"ok" : true
}
]
}