{ "format": "wai-live-contribution-links/1", "hop": "ed6a47a39da869b5446155e40b2d93f1e3f0167be26732bae7a3ef9d8e3a3fd3", "hop_seed": "5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c", "reasons": [ "record_too_large", "truncated", "malformed", "unknown_version", "bad_key", "bad_signature", "link_invalid", "account_invalid", "runs_invalid", "chain_broken", "sequence_gap" ], "vectors": [ { "digest": "a5d6c2b598610a96191a37dd049fa1f1b774142a4f57b86d5b787f4fd135d465", "files": [ "srt_listener_clean.wlk1" ], "kind": "part", "name": "srt_listener_clean", "note": "SRT, the gateway listening, AES-128: every packet at the first try", "outcome": "accept", "summary": { "bytes": 52640, "cipher": 128, "delivered": 40, "dropped": 0, "ended": 0, "first_try": 40, "last": false, "mode": 1, "outstanding": 0, "part": 0, "protocol": 1, "recovered": 0, "runs": 0, "seq_count": 40, "seq_first": 42, "size": 575 } }, { "digest": "a8f1966aed84ab2153c5d0a7dd3f1fdfbabe08847d7c30674b39473c1282f7df", "files": [ "srt_recovered.wlk1" ], "kind": "part", "name": "srt_recovered", "note": "SRT: losses found and recovered within the window, one dropped", "outcome": "accept", "summary": { "bytes": 40796, "cipher": 128, "delivered": 31, "dropped": 1, "ended": 0, "first_try": 25, "last": false, "mode": 1, "outstanding": 0, "part": 0, "protocol": 1, "recovered": 6, "runs": 4, "seq_count": 32, "seq_first": 1000000, "size": 655 } }, { "digest": "0a8cfad3a410a2071d36ada160872eb18ca648d05e5cf2cafdb0d7a613c91ca9", "files": [ "srt_last_outstanding.wlk1" ], "kind": "part", "name": "srt_last_outstanding", "note": "a session of one part, its last: three sequence numbers outstanding when the caller shut down", "outcome": "accept", "summary": { "bytes": 9212, "cipher": 0, "delivered": 7, "dropped": 0, "ended": 1, "first_try": 6, "last": true, "mode": 1, "outstanding": 3, "part": 0, "protocol": 1, "recovered": 1, "runs": 3, "seq_count": 10, "seq_first": 7, "size": 635 } }, { "digest": "08781b0991e605e199019c84ea0f0b5c54c7b4dc38e47a20c0246b43f561d1c1", "files": [ "rist_simple.wlk1" ], "kind": "part", "name": "rist_simple", "note": "RIST Simple Profile, in the clear (the profile has no encryption)", "outcome": "accept", "summary": { "bytes": 19740, "cipher": 0, "delivered": 15, "dropped": 1, "ended": 0, "first_try": 11, "last": false, "mode": 1, "outstanding": 0, "part": 0, "protocol": 2, "recovered": 4, "runs": 2, "seq_count": 16, "seq_first": 65536, "size": 615 } }, { "digest": "39d08881c7b2eda1a17023a713bb83a78b65a183172386098ce5dd4301da3d68", "files": [ "rist_main_psk256.wlk1" ], "kind": "part", "name": "rist_main_psk256", "note": "RIST Main Profile under PSK with a 256-bit key", "outcome": "accept", "summary": { "bytes": 13160, "cipher": 256, "delivered": 10, "dropped": 0, "ended": 0, "first_try": 8, "last": false, "mode": 1, "outstanding": 0, "part": 0, "protocol": 3, "recovered": 2, "runs": 2, "seq_count": 10, "seq_first": 70000, "size": 615 } }, { "digest": "21e4a0b1ef6f31e4f2be3472370a3314e15741271eb85d793de30696ed3efb42", "files": [ "srt_caller_aes192.wlk1" ], "kind": "part", "name": "srt_caller_aes192", "note": "SRT, the gateway calling the publisher's listener, AES-192", "outcome": "accept", "summary": { "bytes": 13160, "cipher": 192, "delivered": 10, "dropped": 0, "ended": 0, "first_try": 9, "last": false, "mode": 2, "outstanding": 0, "part": 0, "protocol": 1, "recovered": 1, "runs": 1, "seq_count": 10, "seq_first": 9, "size": 595 } }, { "digest": "ecdceee1052cba16c818a9d6bafc02cd24dc3af8feda1d980bcea0394f115991", "files": [ "tracks_not_begun.wlk1" ], "kind": "part", "name": "tracks_not_begun", "note": "no group signed yet on either track: each head zero", "outcome": "accept", "summary": { "bytes": 3948, "cipher": 128, "delivered": 3, "dropped": 0, "ended": 0, "first_try": 3, "last": false, "mode": 1, "outstanding": 0, "part": 0, "protocol": 1, "recovered": 0, "runs": 0, "seq_count": 3, "seq_first": 5, "size": 575 } }, { "digest": "ab3c8f287643436d1aa81658b0570b4e11afdad85975e4e7a1465161a73d88de", "files": [ "runs_truncated.wlk1" ], "kind": "part", "name": "runs_truncated", "note": "more loss runs than a part lists: the first 512, marked truncated, the sums at most the part's", "outcome": "accept", "summary": { "bytes": 1452864, "cipher": 128, "delivered": 1104, "dropped": 0, "ended": 0, "first_try": 552, "last": false, "mode": 1, "outstanding": 0, "part": 0, "protocol": 1, "recovered": 552, "runs": 512, "seq_count": 1104, "seq_first": 100, "size": 10815 } }, { "files": [ "too_large.wlk1" ], "kind": "part", "name": "too_large", "note": "one byte past the largest record", "outcome": "refuse", "reason": "record_too_large" }, { "files": [ "truncated.wlk1" ], "kind": "part", "name": "truncated", "note": "the signature's last byte missing", "outcome": "refuse", "reason": "truncated" }, { "files": [ "bad_magic.wlk1" ], "kind": "part", "name": "bad_magic", "note": "not WLK1", "outcome": "refuse", "reason": "malformed" }, { "files": [ "clip_record_magic.wlk1" ], "kind": "part", "name": "clip_record_magic", "note": "the clip record's magic, WCL1 (live-recording §5.1)", "outcome": "refuse", "reason": "malformed" }, { "files": [ "trailing_byte.wlk1" ], "kind": "part", "name": "trailing_byte", "note": "a byte after the signature", "outcome": "refuse", "reason": "malformed" }, { "files": [ "unknown_version.wlk1" ], "kind": "part", "name": "unknown_version", "note": "version 2", "outcome": "refuse", "reason": "unknown_version" }, { "files": [ "bad_key.wlk1" ], "kind": "part", "name": "bad_key", "note": "the hop's key is the identity point, of small order", "outcome": "refuse", "reason": "bad_key" }, { "files": [ "bad_signature.wlk1" ], "kind": "part", "name": "bad_signature", "note": "a bit of the signature flipped", "outcome": "refuse", "reason": "bad_signature" }, { "files": [ "altered_count.wlk1" ], "kind": "part", "name": "altered_count", "note": "a count changed after signing", "outcome": "refuse", "reason": "bad_signature" }, { "files": [ "protocol_unknown.wlk1" ], "kind": "part", "name": "protocol_unknown", "note": "protocol 4", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "mode_unknown.wlk1" ], "kind": "part", "name": "mode_unknown", "note": "mode 3", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "rist_simple_encrypted.wlk1" ], "kind": "part", "name": "rist_simple_encrypted", "note": "the Simple Profile has no encryption, yet the cipher is 128", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "rist_main_aes192.wlk1" ], "kind": "part", "name": "rist_main_aes192", "note": "PSK keys are 128 or 256 bits", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "srt_cipher_100.wlk1" ], "kind": "part", "name": "srt_cipher_100", "note": "no such key length", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "last_without_reason.wlk1" ], "kind": "part", "name": "last_without_reason", "note": "the last part names no reason the session ended", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "reason_without_last.wlk1" ], "kind": "part", "name": "reason_without_last", "note": "a reason on a part that is not the last", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "reason_unknown.wlk1" ], "kind": "part", "name": "reason_unknown", "note": "reason 9", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "empty_span.wlk1" ], "kind": "part", "name": "empty_span", "note": "start equals end", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "no_window.wlk1" ], "kind": "part", "name": "no_window", "note": "a window of 0 µs", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "first_part_with_parent.wlk1" ], "kind": "part", "name": "first_part_with_parent", "note": "part 0 names a parent", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "later_part_without_parent.wlk1" ], "kind": "part", "name": "later_part_without_parent", "note": "part 3 names none", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "tracks_unsorted.wlk1" ], "kind": "part", "name": "tracks_unsorted", "note": "the tracks out of order", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "track_head_without_groups.wlk1" ], "kind": "part", "name": "track_head_without_groups", "note": "a head with no group signed", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "track_zero_digest.wlk1" ], "kind": "part", "name": "track_zero_digest", "note": "a track digest of zero", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "count_mismatch.wlk1" ], "kind": "part", "name": "count_mismatch", "note": "delivered + dropped + outstanding is one short of the count", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "first_try_over_delivered.wlk1" ], "kind": "part", "name": "first_try_over_delivered", "note": "more at the first try than delivered", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "outstanding_not_last.wlk1" ], "kind": "part", "name": "outstanding_not_last", "note": "outstanding in a part that is not the last", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "recovery_samples.wlk1" ], "kind": "part", "name": "recovery_samples", "note": "one recovery sample more than recovered", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "rtt_disordered.wlk1" ], "kind": "part", "name": "rtt_disordered", "note": "the RTT's minimum above its median", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "rtt_empty_with_figures.wlk1" ], "kind": "part", "name": "rtt_empty_with_figures", "note": "no RTT sample, yet figures", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "margin_past_window.wlk1" ], "kind": "part", "name": "margin_past_window", "note": "a recovered packet's margin larger than the window", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "requested_below_requests.wlk1" ], "kind": "part", "name": "requested_below_requests", "note": "requests naming fewer sequence numbers than there are requests", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "runs_overlap.wlk1" ], "kind": "part", "name": "runs_overlap", "note": "two runs with no first-try packet between", "outcome": "refuse", "reason": "runs_invalid" }, { "files": [ "run_outside.wlk1" ], "kind": "part", "name": "run_outside", "note": "a run past the part's sequence numbers", "outcome": "refuse", "reason": "runs_invalid" }, { "files": [ "run_empty.wlk1" ], "kind": "part", "name": "run_empty", "note": "a run of no sequence number", "outcome": "refuse", "reason": "runs_invalid" }, { "files": [ "run_overfull.wlk1" ], "kind": "part", "name": "run_overfull", "note": "recovered and dropped more than the run holds", "outcome": "refuse", "reason": "runs_invalid" }, { "files": [ "runs_short.wlk1" ], "kind": "part", "name": "runs_short", "note": "the runs do not sum to the part's losses", "outcome": "refuse", "reason": "runs_invalid" }, { "files": [ "truncated_not_full.wlk1" ], "kind": "part", "name": "truncated_not_full", "note": "marked truncated with fewer runs than a part lists", "outcome": "refuse", "reason": "runs_invalid" }, { "files": [ "run_overfull_alone.wlk1" ], "kind": "part", "name": "run_overfull_alone", "note": "a run's recovered and dropped past its count, every sum still right", "outcome": "refuse", "reason": "runs_invalid" }, { "files": [ "recovery_disordered.wlk1" ], "kind": "part", "name": "recovery_disordered", "note": "the recoveries' minimum above their median", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "recovery_empty_with_figures.wlk1" ], "kind": "part", "name": "recovery_empty_with_figures", "note": "no recovery sample, yet a maximum", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "tracks_past_bound.wlk1" ], "kind": "part", "name": "tracks_past_bound", "note": "more track heads than a record holds", "outcome": "refuse", "reason": "malformed" }, { "files": [ "runs_past_bound.wlk1" ], "kind": "part", "name": "runs_past_bound", "note": "513 runs listed", "outcome": "refuse", "reason": "malformed" }, { "files": [ "last_byte_two.wlk1" ], "kind": "part", "name": "last_byte_two", "note": "a last flag of 2", "outcome": "refuse", "reason": "malformed" }, { "files": [ "truncated_byte_two.wlk1" ], "kind": "part", "name": "truncated_byte_two", "note": "a truncated flag of 2", "outcome": "refuse", "reason": "malformed" }, { "files": [ "small_order_r.wlk1" ], "kind": "part", "name": "small_order_r", "note": "the signature's R is the identity point, of small order", "outcome": "refuse", "reason": "bad_signature" }, { "files": [ "margin_without_recovery.wlk1" ], "kind": "part", "name": "margin_without_recovery", "note": "a recovery margin with nothing recovered", "outcome": "refuse", "reason": "account_invalid" }, { "digest": "950215c0432843c0acf4c1ba3616a430773a59e73158ae8bf1b59f83dcbb05de", "files": [ "two_dropped.wlk1" ], "kind": "part", "name": "two_dropped", "note": "two of four dropped, none recovered", "outcome": "accept", "summary": { "bytes": 2632, "cipher": 128, "delivered": 2, "dropped": 2, "ended": 0, "first_try": 2, "last": false, "mode": 1, "outstanding": 0, "part": 0, "protocol": 1, "recovered": 0, "runs": 1, "seq_count": 4, "seq_first": 42, "size": 595 } }, { "files": [ "bytes_without_delivery.wlk1" ], "kind": "part", "name": "bytes_without_delivery", "note": "bytes delivered with nothing delivered", "outcome": "refuse", "reason": "account_invalid" }, { "digests": [ "a8f1966aed84ab2153c5d0a7dd3f1fdfbabe08847d7c30674b39473c1282f7df", "0645d19776ea12ed4b540904c6c969c441fe9aeb90c7cbdd4e92ff2b143749a2", "a51671b15792e2c2f57dee35f2fc08f086113d7f1f9dd25e8816035494d6bb1a" ], "files": [ "series_three_parts.0.wlk1", "series_three_parts.1.wlk1", "series_three_parts.2.wlk1" ], "kind": "series", "name": "series_three_parts", "note": "a session of three parts, each chained to the one before, the last ended by DELETE", "outcome": "accept", "summaries": [ { "bytes": 40796, "cipher": 128, "delivered": 31, "dropped": 1, "ended": 0, "first_try": 25, "last": false, "mode": 1, "outstanding": 0, "part": 0, "protocol": 1, "recovered": 6, "runs": 4, "seq_count": 32, "seq_first": 1000000, "size": 655 }, { "bytes": 21056, "cipher": 128, "delivered": 16, "dropped": 0, "ended": 0, "first_try": 15, "last": false, "mode": 1, "outstanding": 0, "part": 1, "protocol": 1, "recovered": 1, "runs": 1, "seq_count": 16, "seq_first": 1000032, "size": 595 }, { "bytes": 11844, "cipher": 128, "delivered": 9, "dropped": 0, "ended": 3, "first_try": 9, "last": true, "mode": 1, "outstanding": 1, "part": 2, "protocol": 1, "recovered": 0, "runs": 1, "seq_count": 10, "seq_first": 1000048, "size": 595 } ] }, { "at": 0, "files": [ "series_starts_late.0.wlk1", "series_starts_late.1.wlk1" ], "kind": "series", "name": "series_starts_late", "note": "a series whose first part is not part 0", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_wrong_parent.0.wlk1", "series_wrong_parent.1.wlk1", "series_wrong_parent.2.wlk1" ], "kind": "series", "name": "series_wrong_parent", "note": "part 1 names another parent", "outcome": "refuse", "reason": "chain_broken" }, { "at": 2, "files": [ "series_skips_a_part.0.wlk1", "series_skips_a_part.1.wlk1", "series_skips_a_part.2.wlk1" ], "kind": "series", "name": "series_skips_a_part", "note": "part 1 then part 3", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_other_session.0.wlk1", "series_other_session.1.wlk1" ], "kind": "series", "name": "series_other_session", "note": "part 1 of another session", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_head_moved_without_groups.0.wlk1", "series_head_moved_without_groups.1.wlk1" ], "kind": "series", "name": "series_head_moved_without_groups", "note": "a track's head changed with no group signed since", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_track_dropped.0.wlk1", "series_track_dropped.1.wlk1" ], "kind": "series", "name": "series_track_dropped", "note": "a track of part 0 missing from part 1", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_part_after_last.0.wlk1", "series_part_after_last.1.wlk1" ], "kind": "series", "name": "series_part_after_last", "note": "a part after the session's last", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_sequence_gap.0.wlk1", "series_sequence_gap.1.wlk1" ], "kind": "series", "name": "series_sequence_gap", "note": "a sequence number between part 0 and part 1 accounted for by neither", "outcome": "refuse", "reason": "sequence_gap" }, { "at": 1, "files": [ "series_time_gap.0.wlk1", "series_time_gap.1.wlk1" ], "kind": "series", "name": "series_time_gap", "note": "part 1 begins a microsecond after part 0 ended", "outcome": "refuse", "reason": "sequence_gap" }, { "at": 1, "files": [ "series_other_hop.0.wlk1", "series_other_hop.1.wlk1" ], "kind": "series", "name": "series_other_hop", "note": "part 1 signed by another gateway", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_other_room.0.wlk1", "series_other_room.1.wlk1" ], "kind": "series", "name": "series_other_room", "note": "part 1 of another room", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_other_principal.0.wlk1", "series_other_principal.1.wlk1" ], "kind": "series", "name": "series_other_principal", "note": "part 1 of another owner", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_other_grant.0.wlk1", "series_other_grant.1.wlk1" ], "kind": "series", "name": "series_other_grant", "note": "part 1 under another grant", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_other_protocol.0.wlk1", "series_other_protocol.1.wlk1" ], "kind": "series", "name": "series_other_protocol", "note": "part 1 of another protocol", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_other_mode.0.wlk1", "series_other_mode.1.wlk1" ], "kind": "series", "name": "series_other_mode", "note": "part 1 says the gateway called", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_other_cipher.0.wlk1", "series_other_cipher.1.wlk1" ], "kind": "series", "name": "series_other_cipher", "note": "part 1 under another key length", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_other_window.0.wlk1", "series_other_window.1.wlk1" ], "kind": "series", "name": "series_other_window", "note": "part 1 with another window", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_track_alias_changed.0.wlk1", "series_track_alias_changed.1.wlk1" ], "kind": "series", "name": "series_track_alias_changed", "note": "a track's receipt chain changed", "outcome": "refuse", "reason": "chain_broken" }, { "digests": [ "a8f1966aed84ab2153c5d0a7dd3f1fdfbabe08847d7c30674b39473c1282f7df", "36d657afd9b50a0d97286fbf2dbaee13232d481a12b0cba5ae3612a66540e22e", "04835ff14f0279fc3cd2340119151438a5864f9d80df6088788530625b8b0ed6" ], "files": [ "series_track_added.0.wlk1", "series_track_added.1.wlk1", "series_track_added.2.wlk1" ], "kind": "series", "name": "series_track_added", "note": "a track that begins in part 1, named again in part 2", "outcome": "accept", "summaries": [ { "bytes": 40796, "cipher": 128, "delivered": 31, "dropped": 1, "ended": 0, "first_try": 25, "last": false, "mode": 1, "outstanding": 0, "part": 0, "protocol": 1, "recovered": 6, "runs": 4, "seq_count": 32, "seq_first": 1000000, "size": 655 }, { "bytes": 21056, "cipher": 128, "delivered": 16, "dropped": 0, "ended": 0, "first_try": 15, "last": false, "mode": 1, "outstanding": 0, "part": 1, "protocol": 1, "recovered": 1, "runs": 1, "seq_count": 16, "seq_first": 1000032, "size": 675 }, { "bytes": 11844, "cipher": 128, "delivered": 9, "dropped": 0, "ended": 3, "first_try": 9, "last": true, "mode": 1, "outstanding": 1, "part": 2, "protocol": 1, "recovered": 0, "runs": 1, "seq_count": 10, "seq_first": 1000048, "size": 675 } ] } ] }