You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DateKeys/testdata/vectors/release.json

673 lines
49 KiB

Release object, release in hand and step 9.c option B (spec v0.15 draft) The release of a round becomes a file, .dkr: a release object in deterministic CBOR, {0: "datekeys-release", 1: 1, 2: chain_hash, 3: round, 4: signature}, which provider.EncodeRelease writes and DecodeRelease reads with its layers (size, type and version, schema). provider.ParseRelease also reads drand's JSON as the input of the caller. Verify checks the chain hash a release names before its round and its signature, with ERR_PROFILE_MISMATCH. provider.Archive reads a local release archive, the informative format of the draft. capsule.OpenOptions.Release takes a release in hand, a provider.Supplier, exclusive with Source: Open does not compare it with the clock (step 9.c, option B) and reports a clock behind it in Opened.ClockBehind; a network source is still never asked before the round time. The CLI gains decrypt -release FILE (.dkr, drand's JSON or a local archive), decrypt -save-release FILE.dkr and the command release, which fetches, verifies and saves the .dkr without opening the capsule. Test data: vectors/release.json, releases/<round>.dkr for rounds 1000, 1001, 1004 and 2000, and a local archive of rounds 1000 to 1004. In mutations.json every case says its source, "supplied" or "network"; the case "round not reached yet", a release in hand, now opens, and four cases are added: the same with a network source, a release of another round from a network source, and two release objects of another chain. SpecVersion stays 0.14 until the author approves the draft. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 day ago
{
"spec": "0.16",
"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.",
Release object, release in hand and step 9.c option B (spec v0.15 draft) The release of a round becomes a file, .dkr: a release object in deterministic CBOR, {0: "datekeys-release", 1: 1, 2: chain_hash, 3: round, 4: signature}, which provider.EncodeRelease writes and DecodeRelease reads with its layers (size, type and version, schema). provider.ParseRelease also reads drand's JSON as the input of the caller. Verify checks the chain hash a release names before its round and its signature, with ERR_PROFILE_MISMATCH. provider.Archive reads a local release archive, the informative format of the draft. capsule.OpenOptions.Release takes a release in hand, a provider.Supplier, exclusive with Source: Open does not compare it with the clock (step 9.c, option B) and reports a clock behind it in Opened.ClockBehind; a network source is still never asked before the round time. The CLI gains decrypt -release FILE (.dkr, drand's JSON or a local archive), decrypt -save-release FILE.dkr and the command release, which fetches, verifies and saves the .dkr without opening the capsule. Test data: vectors/release.json, releases/<round>.dkr for rounds 1000, 1001, 1004 and 2000, and a local archive of rounds 1000 to 1004. In mutations.json every case says its source, "supplied" or "network"; the case "round not reached yet", a release in hand, now opens, and four cases are added: the same with a network source, a release of another round from a network source, and two release objects of another chain. SpecVersion stays 0.14 until the author approves the draft. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 day 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"
},
{
"name": "round twice",
"input": "{\"round\":1000,\"round\":1001,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "round twice, once escaped as round",
"input": "{\"round\":1000,\"round\":1000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "round twice, the second null",
"input": "{\"round\":1000,\"round\":null,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "round escaped as round",
"input": "{\"round\":1000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"release": {
"round": 1000,
"signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
},
"result": "ok"
},
{
"name": "Round instead of round",
"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": "ROUND beside round: another name, ignored",
"input": "{\"round\":1000,\"ROUND\":1001,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"release": {
"round": 1000,
"signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
},
"result": "ok"
},
{
"name": "round null",
"input": "{\"round\":null,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "round 1000.0",
"input": "{\"round\":1000.0,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "round 1e3",
"input": "{\"round\":1e3,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "round -1000",
"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": "round 0",
"input": "{\"round\":0,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "round 2^53",
"input": "{\"round\":9007199254740992,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "round 2^53 - 1 for a DateKey of round 1000",
"input": "{\"round\":9007199254740991,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"release": {
"round": 9007199254740991,
"signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
},
"result": "ERR_ROUND_MISMATCH",
"text": "provider: release for round 9007199254740991, expected 1000: ERR_ROUND_MISMATCH"
},
{
"name": "round with a leading zero",
"input": "{\"round\":01000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "signature twice",
"input": "{\"round\":1000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\",\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "signature null",
"input": "{\"round\":1000,\"signature\":null}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "randomness empty",
"input": "{\"round\":1000,\"randomness\":\"\",\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: randomness does not match the signature: ERR_RELEASE_INVALID"
},
{
"name": "randomness null",
"input": "{\"round\":1000,\"randomness\":null,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "another name twice",
"input": "{\"round\":1000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\",\"note\":1,\"note\":2}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "a name twice in a nested object",
"input": "{\"round\":1000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\",\"meta\":{\"a\":1,\"a\":2}}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "nested objects and arrays, ignored",
"input": "{\"round\":1000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\",\"meta\":{\"a\":[1,{\"a\":2}],\"b\":{},\"c\":[]}}",
"round": 1000,
"release": {
"round": 1000,
"signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
},
"result": "ok"
},
{
"name": "a lone surrogate in another name",
"input": "{\"round\":1000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\",\"\\ud800\":1}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "a lone low surrogate in a value",
"input": "{\"round\":1000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\",\"note\":\"\\udc00\"}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "a surrogate pair in a value",
"input": "{\"round\":1000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\",\"note\":\"😀\"}",
"round": 1000,
"release": {
"round": 1000,
"signature": "b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39"
},
"result": "ok"
},
{
"name": "a tab inside a string",
"input": "{\"round\":1000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\",\"note\":\"a\tb\"}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
},
{
"name": "something after the object",
"input": "{\"round\":1000,\"signature\":\"b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39\"}{}",
"round": 1000,
"result": "ERR_RELEASE_INVALID",
"text": "provider: drand JSON: malformed, or without round or signature: ERR_RELEASE_INVALID"
Release object, release in hand and step 9.c option B (spec v0.15 draft) The release of a round becomes a file, .dkr: a release object in deterministic CBOR, {0: "datekeys-release", 1: 1, 2: chain_hash, 3: round, 4: signature}, which provider.EncodeRelease writes and DecodeRelease reads with its layers (size, type and version, schema). provider.ParseRelease also reads drand's JSON as the input of the caller. Verify checks the chain hash a release names before its round and its signature, with ERR_PROFILE_MISMATCH. provider.Archive reads a local release archive, the informative format of the draft. capsule.OpenOptions.Release takes a release in hand, a provider.Supplier, exclusive with Source: Open does not compare it with the clock (step 9.c, option B) and reports a clock behind it in Opened.ClockBehind; a network source is still never asked before the round time. The CLI gains decrypt -release FILE (.dkr, drand's JSON or a local archive), decrypt -save-release FILE.dkr and the command release, which fetches, verifies and saves the .dkr without opening the capsule. Test data: vectors/release.json, releases/<round>.dkr for rounds 1000, 1001, 1004 and 2000, and a local archive of rounds 1000 to 1004. In mutations.json every case says its source, "supplied" or "network"; the case "round not reached yet", a release in hand, now opens, and four cases are added: the same with a network source, a release of another round from a network source, and two release objects of another chain. SpecVersion stays 0.14 until the author approves the draft. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 day ago
}
],
"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"
}
]
}
}

Powered by TurnKey Linux.