{ "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": "5cc1535476d42709b31643409dd1078484963cc6e38c973bad37e6413ee3278c", "files": [ "srt_listener_clean.wcl1" ], "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": "ebf32e01c2ad06441e573c0e8506602be52abd222170b09dc44bdcd85aaffa7e", "files": [ "srt_recovered.wcl1" ], "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": "ea851e5651b0b68723d22e0996618eeb8166f2b1bc45815767cbfbdba6ad5829", "files": [ "srt_last_outstanding.wcl1" ], "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": "21ed51a4b79ec2d86233683b9ff9c19ad61e4b449c0910a2e2e02d2efe55c34d", "files": [ "rist_simple.wcl1" ], "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": "92d3a4fda607d02fae34a9222e923e981e83b823df8d8de6ae7eb5c07c37bed1", "files": [ "rist_main_psk256.wcl1" ], "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": "3f96e8549fc72865290e5b1f7e2b96b1a7224619a338336b7da76636c4935fea", "files": [ "srt_caller_aes192.wcl1" ], "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": "5083887d3d099fc55b55d4a2744837ecc7ca1b4a5f522df341e74a63ce3d5f30", "files": [ "tracks_not_begun.wcl1" ], "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": "a8a01e673ce99aefddcef7aa8602b5e0e7ba6e6b113c490d59650c0dd3089a71", "files": [ "runs_truncated.wcl1" ], "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.wcl1" ], "kind": "part", "name": "too_large", "note": "one byte past the largest record", "outcome": "refuse", "reason": "record_too_large" }, { "files": [ "truncated.wcl1" ], "kind": "part", "name": "truncated", "note": "the signature's last byte missing", "outcome": "refuse", "reason": "truncated" }, { "files": [ "bad_magic.wcl1" ], "kind": "part", "name": "bad_magic", "note": "not WCL1", "outcome": "refuse", "reason": "malformed" }, { "files": [ "trailing_byte.wcl1" ], "kind": "part", "name": "trailing_byte", "note": "a byte after the signature", "outcome": "refuse", "reason": "malformed" }, { "files": [ "unknown_version.wcl1" ], "kind": "part", "name": "unknown_version", "note": "version 2", "outcome": "refuse", "reason": "unknown_version" }, { "files": [ "bad_key.wcl1" ], "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.wcl1" ], "kind": "part", "name": "bad_signature", "note": "a bit of the signature flipped", "outcome": "refuse", "reason": "bad_signature" }, { "files": [ "altered_count.wcl1" ], "kind": "part", "name": "altered_count", "note": "a count changed after signing", "outcome": "refuse", "reason": "bad_signature" }, { "files": [ "protocol_unknown.wcl1" ], "kind": "part", "name": "protocol_unknown", "note": "protocol 4", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "mode_unknown.wcl1" ], "kind": "part", "name": "mode_unknown", "note": "mode 3", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "rist_simple_encrypted.wcl1" ], "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.wcl1" ], "kind": "part", "name": "rist_main_aes192", "note": "PSK keys are 128 or 256 bits", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "srt_cipher_100.wcl1" ], "kind": "part", "name": "srt_cipher_100", "note": "no such key length", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "last_without_reason.wcl1" ], "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.wcl1" ], "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.wcl1" ], "kind": "part", "name": "reason_unknown", "note": "reason 9", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "empty_span.wcl1" ], "kind": "part", "name": "empty_span", "note": "start equals end", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "no_window.wcl1" ], "kind": "part", "name": "no_window", "note": "a window of 0 µs", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "first_part_with_parent.wcl1" ], "kind": "part", "name": "first_part_with_parent", "note": "part 0 names a parent", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "later_part_without_parent.wcl1" ], "kind": "part", "name": "later_part_without_parent", "note": "part 3 names none", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "tracks_unsorted.wcl1" ], "kind": "part", "name": "tracks_unsorted", "note": "the tracks out of order", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "track_head_without_groups.wcl1" ], "kind": "part", "name": "track_head_without_groups", "note": "a head with no group signed", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "track_zero_digest.wcl1" ], "kind": "part", "name": "track_zero_digest", "note": "a track digest of zero", "outcome": "refuse", "reason": "link_invalid" }, { "files": [ "count_mismatch.wcl1" ], "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.wcl1" ], "kind": "part", "name": "first_try_over_delivered", "note": "more at the first try than delivered", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "outstanding_not_last.wcl1" ], "kind": "part", "name": "outstanding_not_last", "note": "outstanding in a part that is not the last", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "recovery_samples.wcl1" ], "kind": "part", "name": "recovery_samples", "note": "one recovery sample more than recovered", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "rtt_disordered.wcl1" ], "kind": "part", "name": "rtt_disordered", "note": "the RTT's minimum above its median", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "rtt_empty_with_figures.wcl1" ], "kind": "part", "name": "rtt_empty_with_figures", "note": "no RTT sample, yet figures", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "margin_past_window.wcl1" ], "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.wcl1" ], "kind": "part", "name": "requested_below_requests", "note": "requests naming fewer sequence numbers than there are requests", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "runs_overlap.wcl1" ], "kind": "part", "name": "runs_overlap", "note": "two runs with no first-try packet between", "outcome": "refuse", "reason": "runs_invalid" }, { "files": [ "run_outside.wcl1" ], "kind": "part", "name": "run_outside", "note": "a run past the part's sequence numbers", "outcome": "refuse", "reason": "runs_invalid" }, { "files": [ "run_empty.wcl1" ], "kind": "part", "name": "run_empty", "note": "a run of no sequence number", "outcome": "refuse", "reason": "runs_invalid" }, { "files": [ "run_overfull.wcl1" ], "kind": "part", "name": "run_overfull", "note": "recovered and dropped more than the run holds", "outcome": "refuse", "reason": "runs_invalid" }, { "files": [ "runs_short.wcl1" ], "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.wcl1" ], "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.wcl1" ], "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.wcl1" ], "kind": "part", "name": "recovery_disordered", "note": "the recoveries' minimum above their median", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "recovery_empty_with_figures.wcl1" ], "kind": "part", "name": "recovery_empty_with_figures", "note": "no recovery sample, yet a maximum", "outcome": "refuse", "reason": "account_invalid" }, { "files": [ "tracks_past_bound.wcl1" ], "kind": "part", "name": "tracks_past_bound", "note": "more track heads than a record holds", "outcome": "refuse", "reason": "malformed" }, { "files": [ "runs_past_bound.wcl1" ], "kind": "part", "name": "runs_past_bound", "note": "513 runs listed", "outcome": "refuse", "reason": "malformed" }, { "files": [ "last_byte_two.wcl1" ], "kind": "part", "name": "last_byte_two", "note": "a last flag of 2", "outcome": "refuse", "reason": "malformed" }, { "files": [ "truncated_byte_two.wcl1" ], "kind": "part", "name": "truncated_byte_two", "note": "a truncated flag of 2", "outcome": "refuse", "reason": "malformed" }, { "files": [ "small_order_r.wcl1" ], "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.wcl1" ], "kind": "part", "name": "margin_without_recovery", "note": "a recovery margin with nothing recovered", "outcome": "refuse", "reason": "account_invalid" }, { "digest": "a446a02d0a5566f3967dc8137005a1403eebabb29a6a378998bb35bfc6420c7d", "files": [ "two_dropped.wcl1" ], "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.wcl1" ], "kind": "part", "name": "bytes_without_delivery", "note": "bytes delivered with nothing delivered", "outcome": "refuse", "reason": "account_invalid" }, { "digests": [ "ebf32e01c2ad06441e573c0e8506602be52abd222170b09dc44bdcd85aaffa7e", "c46bca400aa3c9c103a62994eed84d938c6e51082f6898aecee8f272350d32ce", "b281373cbf176c52ec7ab873b9da8bdb6cd58c1167fb1f4e72218b7a6273cbdc" ], "files": [ "series_three_parts.0.wcl1", "series_three_parts.1.wcl1", "series_three_parts.2.wcl1" ], "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.wcl1", "series_starts_late.1.wcl1" ], "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.wcl1", "series_wrong_parent.1.wcl1", "series_wrong_parent.2.wcl1" ], "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.wcl1", "series_skips_a_part.1.wcl1", "series_skips_a_part.2.wcl1" ], "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.wcl1", "series_other_session.1.wcl1" ], "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.wcl1", "series_head_moved_without_groups.1.wcl1" ], "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.wcl1", "series_track_dropped.1.wcl1" ], "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.wcl1", "series_part_after_last.1.wcl1" ], "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.wcl1", "series_sequence_gap.1.wcl1" ], "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.wcl1", "series_time_gap.1.wcl1" ], "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.wcl1", "series_other_hop.1.wcl1" ], "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.wcl1", "series_other_room.1.wcl1" ], "kind": "series", "name": "series_other_room", "note": "part 1 of another room", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_other_principal.0.wcl1", "series_other_principal.1.wcl1" ], "kind": "series", "name": "series_other_principal", "note": "part 1 of another owner", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_other_grant.0.wcl1", "series_other_grant.1.wcl1" ], "kind": "series", "name": "series_other_grant", "note": "part 1 under another grant", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_other_protocol.0.wcl1", "series_other_protocol.1.wcl1" ], "kind": "series", "name": "series_other_protocol", "note": "part 1 of another protocol", "outcome": "refuse", "reason": "chain_broken" }, { "at": 1, "files": [ "series_other_mode.0.wcl1", "series_other_mode.1.wcl1" ], "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.wcl1", "series_other_cipher.1.wcl1" ], "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.wcl1", "series_other_window.1.wcl1" ], "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.wcl1", "series_track_alias_changed.1.wcl1" ], "kind": "series", "name": "series_track_alias_changed", "note": "a track's receipt chain changed", "outcome": "refuse", "reason": "chain_broken" }, { "digests": [ "ebf32e01c2ad06441e573c0e8506602be52abd222170b09dc44bdcd85aaffa7e", "74a07b60ada43de0c44f22dfe3e0eab42fcb8167a9f7e1e32479a64235ddfcd1", "6d142f165bf08fb9710829861ffb971dab0adfa7a18bded95259d604bcc34f37" ], "files": [ "series_track_added.0.wcl1", "series_track_added.1.wcl1", "series_track_added.2.wcl1" ], "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 } ] } ] }