Specification 0.15: the release object, a release in hand and step 9.c
- SPEC_VERSION 0.15, version 0.4.0-dev; testdata synced from datekeys-go
at 3c3e737 (v0.15), which adds vectors/release.json and releases/ and
the field source of mutations.json.
- releaseobject.ts, without noble, as provider/release.go and archive.go
of Go: encodeRelease, decodeRelease with the layers of step 10 (size of
1 to 1024 bytes, type and version, schema), parseRelease, which reads
drand's JSON as encoding/json does, the ReleaseSupplier of a release in
hand (encodedRelease) and ReleaseArchive, the informative local archive,
whose failures are ERR_RELEASE_UNAVAILABLE; all with Go's texts.
- verifyRelease compares the chain hash a release names with the pinned
profile first (ERR_PROFILE_MISMATCH).
- open takes OpenOptions.release, exclusive with source: it is not compared
with the clock (step 9.c, option B), Opened.clockBehind reports a clock
behind it, and it is decoded at step 10; a network source is still never
asked before the round time. The verified release carries the chain hash
of the pinned profile.
- vectors.test.ts runs release.json and every file of releases/, and the
mutation corpus with the source of each case, as testkit's singleSource;
scripts/mutation-go-texts.go does the same, and testing/mutation-texts.json
is regenerated: the spec field, "round not reached yet" now ok, and the
four new cases.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
23 hours ago
{
"spec" : "0.15" ,
"description" : "The release object (spec v0.15, §47.1), and drand's JSON as the input of the caller, each checked against the pinned Quicknet profile and the round of a DateKey as step 10 of spec §63 checks a release that the caller supplies; and the lookups of a local release archive (spec v0.15, §50). See testdata/README.md." ,
Specification 0.15: the release object, a release in hand and step 9.c
- SPEC_VERSION 0.15, version 0.4.0-dev; testdata synced from datekeys-go
at 3c3e737 (v0.15), which adds vectors/release.json and releases/ and
the field source of mutations.json.
- releaseobject.ts, without noble, as provider/release.go and archive.go
of Go: encodeRelease, decodeRelease with the layers of step 10 (size of
1 to 1024 bytes, type and version, schema), parseRelease, which reads
drand's JSON as encoding/json does, the ReleaseSupplier of a release in
hand (encodedRelease) and ReleaseArchive, the informative local archive,
whose failures are ERR_RELEASE_UNAVAILABLE; all with Go's texts.
- verifyRelease compares the chain hash a release names with the pinned
profile first (ERR_PROFILE_MISMATCH).
- open takes OpenOptions.release, exclusive with source: it is not compared
with the clock (step 9.c, option B), Opened.clockBehind reports a clock
behind it, and it is decoded at step 10; a network source is still never
asked before the round time. The verified release carries the chain hash
of the pinned profile.
- vectors.test.ts runs release.json and every file of releases/, and the
mutation corpus with the source of each case, as testkit's singleSource;
scripts/mutation-go-texts.go does the same, and testing/mutation-texts.json
is regenerated: the spec field, "round not reached yet" now ok, and the
four new cases.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
23 hours ago
"profile" : "datekeys:quicknet:v1" ,
"objects" : [
{
"name" : "round 1000" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"release" : {
"round" : 1000 ,
"signature" : "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
} ,
"result" : "ok"
} ,
{
"name" : "round 1001" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e9045830b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41" ,
"round" : 1001 ,
"release" : {
"round" : 1001 ,
"signature" : "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
} ,
"result" : "ok"
} ,
{
"name" : "round 1004" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903ec045830a40658b820c0f8c10207524179a2031ba9537688a0d04e4851b58026be9a341fee3b96fb48ffad28483d84b40a5864aa" ,
"round" : 1004 ,
"release" : {
"round" : 1004 ,
"signature" : "a40658b820c0f8c10207524179a2031ba9537688a0d04e4851b58026be9a341fee3b96fb48ffad28483d84b40a5864aa" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
} ,
"result" : "ok"
} ,
{
"name" : "round 2000" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031907d0045830b6cb8f482a0b15d45936a4c4ea08e98a087e71787caee3f4d07a8a9843b1bc5423c6b3c22f446488b3137eaca799c77e" ,
"round" : 2000 ,
"release" : {
"round" : 2000 ,
"signature" : "b6cb8f482a0b15d45936a4c4ea08e98a087e71787caee3f4d07a8a9843b1bc5423c6b3c22f446488b3137eaca799c77e" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
} ,
"result" : "ok"
} ,
{
"name" : "no byte" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object of 0 bytes, outside 1..1024: ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "1025 bytes: the object of round 1000 followed by zeros" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object of 1025 bytes, outside 1..1024: ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "1025 bytes of an object of version 2: the size first" ,
"encoding" : "a20070646174656b6579732d72656c6561736501020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object of 1025 bytes, outside 1..1024: ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "type tag of the Provider Profile, version 2" ,
"encoding" : "a5007819646174656b6579732d70726f76696465722d70726f66696c65010202582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object: codec: type \"datekeys-provider-profile\", want \"datekeys-release\": ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "type tag in upper case" ,
"encoding" : "a50070444154454b4559532d52454c45415345010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object: codec: type \"DATEKEYS-RELEASE\", want \"datekeys-release\": ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "version 2" ,
"encoding" : "a50070646174656b6579732d72656c65617365010202582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"result" : "ERR_UNSUPPORTED_VERSION" ,
"text" : "provider: release object: codec: datekeys-release schema version 2, want 1: ERR_UNSUPPORTED_VERSION"
} ,
{
"name" : "version 2, an unknown key and another chain" ,
"encoding" : "a60070646174656b6579732d72656c65617365010202582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e970031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e390500" ,
"round" : 1000 ,
"result" : "ERR_UNSUPPORTED_VERSION" ,
"text" : "provider: release object: codec: datekeys-release schema version 2, want 1: ERR_UNSUPPORTED_VERSION"
} ,
{
"name" : "version 0" ,
"encoding" : "a50070646174656b6579732d72656c65617365010002582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"result" : "ERR_UNSUPPORTED_VERSION" ,
"text" : "provider: release object: codec: datekeys-release schema version 0, want 1: ERR_UNSUPPORTED_VERSION"
} ,
{
"name" : "keys 0 and 1 swapped" ,
"encoding" : "a501010070646174656b6579732d72656c6561736502582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object: codec: offset 2: map key 1 where key 0 was expected: ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "a byte after the object" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e3900" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object: codec: offset 111: 1 trailing bytes: ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "without the signature" ,
"encoding" : "a40070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object: 4 keys, want all 5: ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "a key 5" ,
"encoding" : "a60070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e390500" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object: codec: offset 1: map of 6 entries, at most 5: ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "chain hash of 31 bytes" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102581f52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e9031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object: key 2: codec: offset 24: a byte string of 31 bytes outside 32..32: ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "chain hash as text" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102784035326462396261373065306363306636656166373830336464303734343761316635343737373335666433663636313739326261393436303063383465393731031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object: key 2: codec: offset 22: a text string where a byte string was expected: ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "round 0" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e9710300045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object: key 3: round 0: ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "round 2^53" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031b0020000000000000045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object: key 3: codec: offset 66: unsigned integer 9007199254740992 above 9007199254740991: ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "round 1000 in four bytes" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031a000003e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object: key 3: codec: offset 57: 1000 is not in its shortest form (initial byte 0x1a): ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "signature of no byte" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e80440" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object: key 4: codec: offset 62: a byte string of 0 bytes outside 1..96: ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "signature of 97 bytes" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045861b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e3900" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object: key 4: codec: offset 63: a byte string of 97 bytes outside 1..96: ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "map of indefinite length" ,
"encoding" : "bf0070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39ff" ,
"round" : 1000 ,
"result" : "ERR_NON_CANONICAL_CBOR" ,
"text" : "provider: release object: codec: offset 0: indefinite length (initial byte 0xbf): ERR_NON_CANONICAL_CBOR"
} ,
{
"name" : "another chain" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e970031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"release" : {
"round" : 1000 ,
"signature" : "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e970"
} ,
"result" : "ERR_PROFILE_MISMATCH" ,
"text" : "provider: release of chain 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e970, the pinned profile datekeys:quicknet:v1 is chain 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971: ERR_PROFILE_MISMATCH"
} ,
{
"name" : "another chain, another round and a signature of no point" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e970031903e9045830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ,
"round" : 1000 ,
"release" : {
"round" : 1001 ,
"signature" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e970"
} ,
"result" : "ERR_PROFILE_MISMATCH" ,
"text" : "provider: release of chain 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e970, the pinned profile datekeys:quicknet:v1 is chain 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971: ERR_PROFILE_MISMATCH"
} ,
{
"name" : "round 1001 for a DateKey of round 1000" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e9045830b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41" ,
"round" : 1000 ,
"release" : {
"round" : 1001 ,
"signature" : "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
} ,
"result" : "ERR_ROUND_MISMATCH" ,
"text" : "provider: release for round 1001, expected 1000: ERR_ROUND_MISMATCH"
} ,
{
"name" : "another round and a signature of 47 bytes" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e904582fb33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa" ,
"round" : 1000 ,
"release" : {
"round" : 1001 ,
"signature" : "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
} ,
"result" : "ERR_ROUND_MISMATCH" ,
"text" : "provider: release for round 1001, expected 1000: ERR_ROUND_MISMATCH"
} ,
{
"name" : "the signature of round 1001 as round 1000" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41" ,
"round" : 1000 ,
"release" : {
"round" : 1000 ,
"signature" : "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
} ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: the signature is not a canonical point encoding, or does not verify as the BLS signature of round 1000 under datekeys:quicknet:v1: ERR_RELEASE_INVALID"
} ,
{
"name" : "signature of 47 bytes" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e804582fb44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e" ,
"round" : 1000 ,
"release" : {
"round" : 1000 ,
"signature" : "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
} ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: signature is 47 bytes, bls-unchained-g1-rfc9380 uses 48: ERR_RELEASE_INVALID"
} ,
{
"name" : "signature of 96 bytes, the size of G2" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045860b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"release" : {
"round" : 1000 ,
"signature" : "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
} ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: signature is 96 bytes, bls-unchained-g1-rfc9380 uses 48: ERR_RELEASE_INVALID"
} ,
{
"name" : "signature of zeros" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ,
"round" : 1000 ,
"release" : {
"round" : 1000 ,
"signature" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
} ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: the signature is not a canonical point encoding, or does not verify as the BLS signature of round 1000 under datekeys:quicknet:v1: ERR_RELEASE_INVALID"
} ,
{
"name" : "signature the point at infinity" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ,
"round" : 1000 ,
"release" : {
"round" : 1000 ,
"signature" : "c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
} ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: the signature is not a canonical point encoding, or does not verify as the BLS signature of round 1000 under datekeys:quicknet:v1: ERR_RELEASE_INVALID"
} ,
{
"name" : "signature with the infinity flag and a payload" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830d44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"release" : {
"round" : 1000 ,
"signature" : "d44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
} ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: the signature is not a canonical point encoding, or does not verify as the BLS signature of round 1000 under datekeys:quicknet:v1: ERR_RELEASE_INVALID"
} ,
{
"name" : "signature negated" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830944679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"round" : 1000 ,
"release" : {
"round" : 1000 ,
"signature" : "944679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
} ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: the signature is not a canonical point encoding, or does not verify as the BLS signature of round 1000 under datekeys:quicknet:v1: ERR_RELEASE_INVALID"
} ,
{
"name" : "signature of round 1004 with x + p" ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903ec045830be076aa25a40df5b4d22f9f7bcedaff30dcac20d94556107b8e652c7b54b2a440ce796f9fa53ad28023c84b40a580f55" ,
"round" : 1004 ,
"release" : {
"round" : 1004 ,
"signature" : "be076aa25a40df5b4d22f9f7bcedaff30dcac20d94556107b8e652c7b54b2a440ce796f9fa53ad28023c84b40a580f55" ,
"chain_hash" : "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
} ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: the signature is not a canonical point encoding, or does not verify as the BLS signature of round 1004 under datekeys:quicknet:v1: ERR_RELEASE_INVALID"
}
] ,
"json" : [
{
"name" : "the answer of a relay, API v2" ,
"input" : "{\"round\":1000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}" ,
"round" : 1000 ,
"release" : {
"round" : 1000 ,
"signature" : "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
} ,
"result" : "ok"
} ,
{
"name" : "with randomness, API v1" ,
"input" : "{\"round\":1000,\"randomness\":\"fe290beca10872ef2fb164d2aa4442de4566183ec51c56ff3cd603d930e54fdd\",\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}" ,
"round" : 1000 ,
"release" : {
"round" : 1000 ,
"signature" : "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
} ,
"result" : "ok"
} ,
{
"name" : "spaces and a line feed before and after" ,
"input" : " \n{\"round\": 1000, \"signature\": \"B44679B9A59AF2EC876B1A6B1AD52EA9B1615FC3982B19576350F93447CB1125E342B73A8DD2BACBE47E4B6B63ED5E39\"}\n" ,
"round" : 1000 ,
"release" : {
"round" : 1000 ,
"signature" : "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
} ,
"result" : "ok"
} ,
{
"name" : "randomness of another signature" ,
"input" : "{\"round\":1000,\"randomness\":\"b0a591ad1b9002cfc372ac6e30abd3da8d3088d4caae026961743474fb94235f\",\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}" ,
"round" : 1000 ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: drand JSON: randomness does not match the signature: ERR_RELEASE_INVALID"
} ,
{
"name" : "without signature" ,
"input" : "{\"round\":1000}" ,
"round" : 1000 ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
} ,
{
"name" : "without round" ,
"input" : "{\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}" ,
"round" : 1000 ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
} ,
{
"name" : "signature not in hexadecimal" ,
"input" : "{\"round\":1000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5ezz\"}" ,
"round" : 1000 ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: drand JSON: signature is not hex: ERR_RELEASE_INVALID"
} ,
{
"name" : "round as a string" ,
"input" : "{\"round\":\"1000\",\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}" ,
"round" : 1000 ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
} ,
{
"name" : "not JSON" ,
"input" : "{\"round\":1000," ,
"round" : 1000 ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
} ,
{
"name" : "8193 bytes" ,
"input" : "{\"round\":1000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\" }
"round" : 1000 ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: drand JSON of 8193 bytes, larger than 8192: ERR_RELEASE_INVALID"
} ,
{
"name" : "round 1001 for a DateKey of round 1000" ,
"input" : "{\"round\":1001,\"signature\":\"b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41\"}" ,
"round" : 1000 ,
"release" : {
"round" : 1001 ,
"signature" : "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41"
} ,
"result" : "ERR_ROUND_MISMATCH" ,
"text" : "provider: release for round 1001, expected 1000: ERR_ROUND_MISMATCH"
} ,
{
"name" : "the signature of round 1001 as round 1000" ,
"input" : "{\"round\":1000,\"signature\":\"b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41\"}" ,
"round" : 1000 ,
"release" : {
"round" : 1000 ,
"signature" : "b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41"
} ,
"result" : "ERR_RELEASE_INVALID" ,
"text" : "provider: the signature is not a canonical point encoding, or does not verify as the BLS signature of round 1000 under datekeys:quicknet:v1: ERR_RELEASE_INVALID"
}
] ,
"archive" : {
"file" : "releases/archive_1000_1004.bin" ,
"header" : "a5007818646174656b6579732d72656c656173652d61726368697665010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e80405" ,
"lookups" : [
{
"round" : 999 ,
"result" : "ERR_RELEASE_UNAVAILABLE"
} ,
{
"round" : 1000 ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e8045830b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39" ,
"result" : "ok"
} ,
{
"round" : 1001 ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903e9045830b33bf3667cbd5a82de3a24b4e0e9fe5513cc1a0e840368c6e31f5fcfa79bea03f73896b25883abf2853d10337fb8fa41" ,
"result" : "ok"
} ,
{
"round" : 1002 ,
"result" : "ERR_RELEASE_UNAVAILABLE"
} ,
{
"round" : 1003 ,
"result" : "ERR_RELEASE_UNAVAILABLE"
} ,
{
"round" : 1004 ,
"encoding" : "a50070646174656b6579732d72656c65617365010102582052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971031903ec045830a40658b820c0f8c10207524179a2031ba9537688a0d04e4851b58026be9a341fee3b96fb48ffad28483d84b40a5864aa" ,
"result" : "ok"
} ,
{
"round" : 1005 ,
"result" : "ERR_RELEASE_UNAVAILABLE"
}
]
}
}