Format 3, step 3: read capsule format 3 of spec v0.10
Syncs testdata with datekeys-go at the tag spec-v0.10 (cc35d2c) and
moves the reader to the DateKeys Protocol Specification v0.10. The
three capsule formats are read.
- framing: FORMAT_3, and isPadded for formats 2 and 3. control: schema
version 3, with the keys 6 and 7 of version 2. SPEC_VERSION is 0.10.
- open: OpenOptions.sink receives the files of a format 3 capsule
(sink.ts: Sink with begin, create, commit and abort, as capsule.Sink,
and MemorySink). Without one, open rejects with a TypeError right
after step 2, before any request, as ErrSinkRequired. Opened gains
head, verdicts, areaLen and unusableHeadExtensions.
- open3.ts: step 17 of format 3 in its substeps 17.2 to 17.8, as
openBody of the reference: a failure of age or a plaintext whose
length is not P prevails, the first failing substep decides, and the
codes other than ERR_INTEGRITY are reported only after reading
PAYLOAD_AGE to its end. Reads grow with the bytes received, never
with the lengths BODY declares. A failure of the sink is ERR_INTEGRITY
with its text, and the sink is aborted once after begin.
- The page: opener.ts opens the fixtures of format 3 into a
MemorySink; the open panel says that it does not deliver their files
yet, and the glosses of the steps name format 3. check-build.mjs
refuses to ship the heads, salts, comments and paths of the format 3
fixtures.
Tests: the 21 fixtures, format 3 laid out byte by byte from its record
and opened into a sink with its files and verdicts; the 209 cases of
the corpus from memory and from a Blob, with the code, the step and,
new, the exact text of capsule.Open, frozen by
scripts/mutation-go-texts.go in testing/mutation-texts.json, which
replays the corpus as internal/testkit does (its extension validator
texts included); the 5110 differential cases over 14 bases; paths,
path_fold, head_schema and security vectors; the control of schema
version 3 in cbor.json; and step 17 on crafted plaintexts sealed again
to I_PAYLOAD, whose texts capsule.Open gives on the same plaintexts.
ibe-vectors.json gains the nine format 3 fixtures from
scripts/ibe-go-vectors.go; the twelve before are unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 week ago
{
"spec" : "0.11" ,
Format 3, step 3: read capsule format 3 of spec v0.10
Syncs testdata with datekeys-go at the tag spec-v0.10 (cc35d2c) and
moves the reader to the DateKeys Protocol Specification v0.10. The
three capsule formats are read.
- framing: FORMAT_3, and isPadded for formats 2 and 3. control: schema
version 3, with the keys 6 and 7 of version 2. SPEC_VERSION is 0.10.
- open: OpenOptions.sink receives the files of a format 3 capsule
(sink.ts: Sink with begin, create, commit and abort, as capsule.Sink,
and MemorySink). Without one, open rejects with a TypeError right
after step 2, before any request, as ErrSinkRequired. Opened gains
head, verdicts, areaLen and unusableHeadExtensions.
- open3.ts: step 17 of format 3 in its substeps 17.2 to 17.8, as
openBody of the reference: a failure of age or a plaintext whose
length is not P prevails, the first failing substep decides, and the
codes other than ERR_INTEGRITY are reported only after reading
PAYLOAD_AGE to its end. Reads grow with the bytes received, never
with the lengths BODY declares. A failure of the sink is ERR_INTEGRITY
with its text, and the sink is aborted once after begin.
- The page: opener.ts opens the fixtures of format 3 into a
MemorySink; the open panel says that it does not deliver their files
yet, and the glosses of the steps name format 3. check-build.mjs
refuses to ship the heads, salts, comments and paths of the format 3
fixtures.
Tests: the 21 fixtures, format 3 laid out byte by byte from its record
and opened into a sink with its files and verdicts; the 209 cases of
the corpus from memory and from a Blob, with the code, the step and,
new, the exact text of capsule.Open, frozen by
scripts/mutation-go-texts.go in testing/mutation-texts.json, which
replays the corpus as internal/testkit does (its extension validator
texts included); the 5110 differential cases over 14 bases; paths,
path_fold, head_schema and security vectors; the control of schema
version 3 in cbor.json; and step 17 on crafted plaintexts sealed again
to I_PAYLOAD, whose texts capsule.Open gives on the same plaintexts.
ibe-vectors.json gains the nine format 3 fixtures from
scripts/ibe-go-vectors.go; the twelve before are unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 week ago
"description" : "SECURITY_CBOR of format 3, exactly its SECURITY_LEN bytes, and the verdicts of the signature and of the seal (spec §29.3, §29.7), generated by the reference implementation, which implements no alg and no seal_type. See testdata/README.md." ,
"vectors" : [
{
"name" : "empty, as writers of this version write it" ,
"hex" : "a20071646174656b6579732d73656375726974790101" ,
"signature" : "F0" ,
"seal" : "S0"
} ,
{
"name" : "a signature of alg 1" ,
"hex" : "a30071646174656b6579732d73656375726974790101025869a30001015820111111111111111111111111111111111111111111111111111111111111111102584022222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222" ,
"signature" : "F1" ,
"seal" : "S0"
} ,
{
"name" : "a seal of seal_type 1" ,
"hex" : "a30071646174656b6579732d73656375726974790101035826a200010158203333333333333333333333333333333333333333333333333333333333333333" ,
"signature" : "F0" ,
"seal" : "S1"
} ,
{
"name" : "a seal of seal_type 2, RFC 3161" ,
"hex" : "a30071646174656b6579732d73656375726974790101035826a200020158203333333333333333333333333333333333333333333333333333333333333333" ,
"signature" : "F0" ,
"seal" : "S1"
} ,
{
"name" : "a seal of seal_type 3, OpenTimestamps" ,
"hex" : "a30071646174656b6579732d73656375726974790101035826a200030158203333333333333333333333333333333333333333333333333333333333333333" ,
"signature" : "F0" ,
"seal" : "S1"
} ,
{
"name" : "a signature and a seal" ,
"hex" : "a40071646174656b6579732d73656375726974790101025869a30001015820111111111111111111111111111111111111111111111111111111111111111102584022222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222035826a200010158203333333333333333333333333333333333333333333333333333333333333333" ,
"signature" : "F1" ,
"seal" : "S1"
} ,
{
"name" : "a signature of alg 0, and the seal intact" ,
"hex" : "a40071646174656b6579732d73656375726974790101025849a3000001582011111111111111111111111111111111111111111111111111111111111111110258202222222222222222222222222222222222222222222222222222222222222222035826a200010158203333333333333333333333333333333333333333333333333333333333333333" ,
"signature" : "F1" ,
"seal" : "S1"
} ,
{
"name" : "a signature with an empty key, and the seal intact" ,
"hex" : "a40071646174656b6579732d73656375726974790101025828a3000101400258202222222222222222222222222222222222222222222222222222222222222222035826a200010158203333333333333333333333333333333333333333333333333333333333333333" ,
"signature" : "F1" ,
"seal" : "S1"
} ,
{
"name" : "a signature that is not CBOR" ,
"hex" : "a30071646174656b6579732d736563757269747901010241ff" ,
"signature" : "F1" ,
"seal" : "S0"
} ,
{
"name" : "a signature with a byte more" ,
"hex" : "a30071646174656b6579732d7365637572697479010102586aa3000101582011111111111111111111111111111111111111111111111111111111111111110258402222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222200" ,
"signature" : "F1" ,
"seal" : "S0"
} ,
{
"name" : "a seal of seal_type 0" ,
"hex" : "a30071646174656b6579732d73656375726974790101035826a200000158203333333333333333333333333333333333333333333333333333333333333333" ,
"signature" : "F0" ,
"seal" : "S2"
} ,
{
"name" : "a seal that breaks its schema, with an unknown seal_type" ,
"hex" : "a30071646174656b6579732d73656375726974790101035829a300186301582033333333333333333333333333333333333333333333333333333333333333330200" ,
"signature" : "F0" ,
"seal" : "S2"
} ,
{
"name" : "a seal that is not CBOR" ,
"hex" : "a30071646174656b6579732d736563757269747901010341ff" ,
"signature" : "F0" ,
"seal" : "S2"
} ,
{
"name" : "key 2 that is not a byte string" ,
"hex" : "a30071646174656b6579732d7365637572697479010102a10001" ,
"signature" : "X" ,
"seal" : "X"
} ,
{
"name" : "key 2 that is an empty byte string" ,
"hex" : "a30071646174656b6579732d736563757269747901010240" ,
"signature" : "X" ,
"seal" : "X"
} ,
{
"name" : "an unknown key 4" ,
"hex" : "a30071646174656b6579732d73656375726974790101044101" ,
"signature" : "X" ,
"seal" : "X"
} ,
{
"name" : "a byte more after the map" ,
"hex" : "a20071646174656b6579732d7365637572697479010100" ,
"signature" : "X" ,
"seal" : "X"
} ,
{
"name" : "version 2" ,
"hex" : "a20071646174656b6579732d73656375726974790102" ,
"signature" : "X" ,
"seal" : "X"
} ,
{
"name" : "the type tag of the head" ,
"hex" : "a2006d646174656b6579732d686561640101" ,
"signature" : "X" ,
"seal" : "X"
} ,
{
"name" : "keys 2 and 3 out of order" ,
"hex" : "a40071646174656b6579732d73656375726974790101035826a200010158203333333333333333333333333333333333333333333333333333333333333333025869a30001015820111111111111111111111111111111111111111111111111111111111111111102584022222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222" ,
"signature" : "X" ,
"seal" : "X"
} ,
{
"name" : "an array" ,
"hex" : "8271646174656b6579732d736563757269747901" ,
"signature" : "X" ,
"seal" : "X"
}
]
}