# Byte vectors of the co-op wire format, protocol 2. Written by `python tests/coop_relay_test.py --write-vectors`,
# read by tests/coop_relay_test.py and by runtime/coop_probe.c (--probe-coop); each side checks its codec against them.
# Hex is lower case, "-" is empty. Fields are tokens; a name is hex of its UTF-8 bytes.
#
# hmac <name> <key> <message> <HMAC-SHA256>                  RFC 4231 cases and a locator as the key
# secret <canonical|-> <text, the rest of the line>          normalisation: the secret a text means, - for none
# keys <secret> <locator> <message key>                      BLAKE2b keyed with the secret (coop_proto.h)
# dgram <name> <secret|-> <ver> <type> <room> <src> <dst> <seq> <payload> <datagram>   parse, verify the tag with the
#                                                            secret's locator (- : a zero tag), pack again
# badtag <name> <secret> <datagram>                          parses, and the tag does not verify
# connect|challenge|roster|joined|error|kick ...             one message payload: parse, check the fields, pack again
# sealed <name> <secret> <src> <dst> <session> <counter> <kind> <message> <payload>   opens to kind and message, seals
#                                                            to the same bytes
# pos <name> <payload> <pseq> <t_ms> <flags> <area> <x> <y> <z> <yaw> <node:frame>...   a POS (the message after its
#                                                            kind byte): parse, check the fields, pack again
# reject <kind> <name> <bytes>                               parse must fail
hmac rfc4231-1 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b 4869205468657265 b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7
hmac rfc4231-2 4a656665 7768617420646f2079612077616e7420666f72206e6f7468696e673f 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843
hmac rfc4231-6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b6579202d2048617368204b6579204669727374 60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54
hmac locator fc4cd2239930b86edfecd4da8b83e9d6 000102030405060708090a0b0c0d0e0f10111213141516171819 42ba9d60a8d078abc7dc0d56693013f027ed42415b19b3624563e3939a8d84a0
hmac empty e15751bff9c5734c17af60d9028975bf - a5eb888727aa1acf14896b6ac56df6cdca6df201be0d370e30e5c665dda275b9
secret H7K3WMBCDFGH234567 h7k3wm-bcdfgh-234567
secret H7K3WMBCDFGH234567  H7K 3WM BCD FGH 234 567 
secret H7K3WMBCDFGH234567 H7K3WMBCDFGH234567
secret - H7K3WMBCDFGH23456
secret - H7K3WMBCDFGH2345678
secret - H7K3WMBCDFGH23456E
secret - H7K3WMBCDFGH23456Q
secret - H7K3WMBCDFGH234560
secret - H7K3WM.BCDFGH234567
secret - 
keys H7K3WMBCDFGH234567 fc4cd2239930b86edfecd4da8b83e9d6 1f1e9bacbbdecdf42c996b5ceed8d0ee00b365fc083b38976ac5faa410d580d2
keys 23BCDF23BCDF23BCDF e15751bff9c5734c17af60d9028975bf 61bf28cf7c9a7352c6f0760bc290a9cbc4088529604549ba4a194b69d07fb0f2
keys ZZZZZZZZZZZZZZZZZZ a5b67e4a3b31acd59d91075a950fe08b 1b832c032d001b1582d5d940e7af25456c2776f2fadc968469618575bcc150d5
dgram connect-create H7K3WMBCDFGH234567 2 1 0 0 0 7 0100fc4cd2239930b86edfecd4da8b83e9d6efcdab8967452301887766554433221100ffeeddccbbaa9905416c6963650000000000000000000000000000000000000000000000000000000000000000 4e43020100000000000050000700000005e25e108234ba2b0100fc4cd2239930b86edfecd4da8b83e9d6efcdab8967452301887766554433221100ffeeddccbbaa9905416c6963650000000000000000000000000000000000000000000000000000000000000000
dgram connect-join H7K3WMBCDFGH234567 2 1 0 0 0 7 0200fc4cd2239930b86edfecd4da8b83e9d6efcdab8967452301887766554433221100ffeeddccbbaa9903426f62a0a1a2a3a4a5a6a7a8a9aaabacadaeaf303132333435363738393a3b3c3d3e3f 4e4302010000000000004e0007000000e27557d80346f66c0200fc4cd2239930b86edfecd4da8b83e9d6efcdab8967452301887766554433221100ffeeddccbbaa9903426f62a0a1a2a3a4a5a6a7a8a9aaabacadaeaf303132333435363738393a3b3c3d3e3f
dgram challenge H7K3WMBCDFGH234567 2 2 0 0 0 1 00ffeeddccbbaa99a0a1a2a3a4a5a6a7a8a9aaabacadaeaf 4e430202000000000000180001000000b6d92fe0328ccb5a00ffeeddccbbaa99a0a1a2a3a4a5a6a7a8a9aaabacadaeaf
dgram joined H7K3WMBCDFGH234567 2 3 3405643777 0 2 2 0200ffeeddccbbaa99303132333435363738393a3b3c3d3e3f020102887766554433221105416c69636502010700000000000000045a6fc3ab 4e4302030100feca0002390002000000367a7ec9d8226b970200ffeeddccbbaa99303132333435363738393a3b3c3d3e3f020102887766554433221105416c69636502010700000000000000045a6fc3ab
dgram error H7K3WMBCDFGH234567 2 5 0 0 0 3 0100ffeeddccbbaa990c6e6f207375636820726f6f6d 4e4302050000000000001600030000004decf2596a67e08d0100ffeeddccbbaa990c6e6f207375636820726f6f6d
dgram roster H7K3WMBCDFGH234567 2 6 3405643777 0 1 4 020102887766554433221105416c69636502010700000000000000045a6fc3ab 4e4302060100feca00012000040000003a125ec4034e095c020102887766554433221105416c69636502010700000000000000045a6fc3ab
dgram ping H7K3WMBCDFGH234567 2 7 3405643777 3 0 99 efbeadde 4e4302070100feca0300040063000000ccc370c727afd881efbeadde
dgram pong H7K3WMBCDFGH234567 2 8 3405643777 0 3 100 efbeadde 4e4302080100feca000304006400000067c59c7e243fc04defbeadde
dgram leave H7K3WMBCDFGH234567 2 9 3405643777 3 0 101 - 4e4302090100feca0300000065000000447675f8e1fef961
dgram kick H7K3WMBCDFGH234567 2 11 3405643777 1 0 102 020700000000000000 4e43020b0100feca01000900660000002b0bcf6376d31a69020700000000000000
dgram data-sealed H7K3WMBCDFGH234567 2 16 3405643777 3 255 103 01efcdab896745230101000000d2244219967816dfefab11d765441dbffe22c6b5b160 4e4302100100feca03ff2300670000005b9f21795c3c7e4101efcdab896745230101000000d2244219967816dfefab11d765441dbffe22c6b5b160
dgram data-max H7K3WMBCDFGH234567 2 16 1 8 255 0 00070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef5fc030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8ff060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf4fb020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7fe050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa01080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6fd040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f900070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef5fc030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8ff060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf4fb020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7fe050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa01080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6fd040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f900070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef5fc030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8ff060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf4fb020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7fe050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa01080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6fd040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f900070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef5fc030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8ff060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf4fb020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7fe050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa01080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6fd040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f900070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef5fc030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8ff060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf4fb020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7fe050c131a21 4e4302100100000008ff980400000000ce73d251ac722a7300070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef5fc030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8ff060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf4fb020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7fe050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa01080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6fd040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f900070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef5fc030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8ff060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf4fb020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7fe050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa01080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6fd040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f900070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef5fc030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8ff060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf4fb020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7fe050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa01080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6fd040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f900070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef5fc030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8ff060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf4fb020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7fe050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa01080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6fd040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f900070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef5fc030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8ff060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf4fb020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7fe050c131a21
badtag flipped-tag H7K3WMBCDFGH234567 4e4302100100feca03ff2300670000005a9f21795c3c7e4101efcdab896745230101000000d2244219967816dfefab11d765441dbffe22c6b5b160
badtag wrong-secret 23BCDF23BCDF23BCDF 4e4302100100feca03ff2300670000005b9f21795c3c7e4101efcdab896745230101000000d2244219967816dfefab11d765441dbffe22c6b5b160
dgram other-version - 1 7 0 0 0 5 00000000 4e430107000000000000040005000000000000000000000000000000
connect create 1 0 fc4cd2239930b86edfecd4da8b83e9d6 0123456789abcdef 1122334455667788 99aabbccddeeff00 416c696365 00000000000000000000000000000000 00000000000000000000000000000000 0100fc4cd2239930b86edfecd4da8b83e9d6efcdab8967452301887766554433221100ffeeddccbbaa9905416c6963650000000000000000000000000000000000000000000000000000000000000000
connect join 2 0 fc4cd2239930b86edfecd4da8b83e9d6 0123456789abcdef 1122334455667788 99aabbccddeeff00 5a6fc3ab a0a1a2a3a4a5a6a7a8a9aaabacadaeaf 303132333435363738393a3b3c3d3e3f 0200fc4cd2239930b86edfecd4da8b83e9d6efcdab8967452301887766554433221100ffeeddccbbaa99045a6fc3aba0a1a2a3a4a5a6a7a8a9aaabacadaeaf303132333435363738393a3b3c3d3e3f
connect long-name 2 1 fc4cd2239930b86edfecd4da8b83e9d6 0000000000000001 0000000000000002 0000000000000003 787878787878787878787878787878787878787878787878 a0a1a2a3a4a5a6a7a8a9aaabacadaeaf 303132333435363738393a3b3c3d3e3f 0201fc4cd2239930b86edfecd4da8b83e9d601000000000000000200000000000000030000000000000018787878787878787878787878787878787878787878787878a0a1a2a3a4a5a6a7a8a9aaabacadaeaf303132333435363738393a3b3c3d3e3f
challenge one 00ffeeddccbbaa99a0a1a2a3a4a5a6a7a8a9aaabacadaeaf 99aabbccddeeff00 a0a1a2a3a4a5a6a7a8a9aaabacadaeaf
roster two 020102887766554433221105416c69636502010700000000000000045a6fc3ab 1:2:1122334455667788:416c696365 2:1:0000000000000007:5a6fc3ab
roster empty 00
roster full 080100010000000000000002503102000200000000000000025032030003000000000000000250330400040000000000000002503405000500000000000000025035060006000000000000000250360700070000000000000002503708000800000000000000025038 1:0:0000000000000001:5031 2:0:0000000000000002:5032 3:0:0000000000000003:5033 4:0:0000000000000004:5034 5:0:0000000000000005:5035 6:0:0000000000000006:5036 7:0:0000000000000007:5037 8:0:0000000000000008:5038
joined two 0200ffeeddccbbaa99303132333435363738393a3b3c3d3e3f020102887766554433221105416c69636502010700000000000000045a6fc3ab 2 99aabbccddeeff00 303132333435363738393a3b3c3d3e3f 1:2:1122334455667788:416c696365 2:1:0000000000000007:5a6fc3ab
error no-room 0100ffeeddccbbaa990c6e6f207375636820726f6f6d 1 99aabbccddeeff00 6e6f207375636820726f6f6d
error bare 06000000000000000000 6 0000000000000000 -
kick two 028877665544332211 2 1122334455667788
sealed test H7K3WMBCDFGH234567 3 255 0123456789abcdef 1 240 68656c6c6f 01efcdab896745230101000000d2244219967816dfefab11d765441dbffe22c6b5b160
sealed empty H7K3WMBCDFGH234567 1 2 fedcba9876543210 4294967295 3 - 011032547698badcfeffffffffe5632ae3fe1043b0359b661003ee21dbb9
pos walk 020700000040e20100020b487972756c654669656c6400509a44000061c2004845440000c03f020457616c6b000040410a4c6f7765725f57616c6b00006040 7 123456 2 487972756c654669656c64 1234.5 -56.25 789.125 1.5 57616c6b:12.0 4c6f7765725f57616c6b:3.5
pos adult-no-slots 02ffffffffffffffff030c466f7265737454656d706c650000000000000000000000bf000040c000 4294967295 4294967295 3 466f7265737454656d706c65 0.0 0.0 -0.5 -3.0
pos loading 02010000000200000000000000000000000000000000000000000000 1 2 0 - 0.0 0.0 0.0 0.0
pos long-names 020900000009000000022f61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161610000803f00000040000040400000803e042f6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e000000002f6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e0000803f2f6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e000000402f6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e00004040 9 9 2 6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161 1.0 2.0 3.0 0.25 6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e:0.0 6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e:1.0 6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e:2.0 6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e:3.0
reject dgram short 0000000000000000000000000000000000000000000000
reject dgram magic 00000207000000000000040001000000000000000000000061626364
reject dgram length-long 4e430207000000000000050001000000000000000000000061626364
reject dgram trailing 4e43020700000000000004000100000000000000000000006162636478
reject connect name-too-long 0200fc4cd2239930b86edfecd4da8b83e9d601000000000000000200000000000000030000000000000019000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
reject connect no-token 0200fc4cd2239930b86edfecd4da8b83e9d601000000000000000200000000000000030000000000000003426f6200000000000000000000000000000000000000000000000000000000000000
reject connect cut 0200fc4cd2239930b86edfecd4da8b83e9d60100000000000000
reject challenge long 00000000000000000000000000000000000000000000000000
reject challenge short 0000000000000000000000000000000000000000000000
reject roster count-9 0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
reject roster cut-name 010100000000000000000009616263
reject roster cut-entry 020100000000000000000001410200
reject joined cut 010000000000000000000000000000000000000000
reject error cut-text 01000000000000000009616263
reject error cut 010000000000000000
reject kick long 00000000000000000000
reject sealed short 0100000000000000000000000000000000000000000000000000000000
reject sealed version 0200000000000000000000000000000000000000000000000000000000000000000000000000000000
reject pos version-1 010700000040e20100020b487972756c654669656c6400509a44000061c2004845440000c03f020457616c6b000040410a4c6f7765725f57616c6b00006040
reject pos cut 020700000040e20100020b487972756c654669656c6400509a44000061c2004845440000c03f020457616c6b000040410a4c6f7765725f57616c6b000060
reject pos trailing 020700000040e20100020b487972756c654669656c6400509a44000061c2004845440000c03f020457616c6b000040410a4c6f7765725f57616c6b0000604078
reject pos area-48 02000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
reject pos slots-5 0200000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000
reject pos node-48 020000000000000000000000000000000000000000000000000000013000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
reject pos area-newline 020100000002000000020c487972756c650a4669656c640000000000000000000000000000000000
reject pos area-utf8 02010000000200000002045a6fc3ab0000000000000000000000000000000000
reject pos node-nul 020100000002000000020b487972756c654669656c640000000000000000000000000000000001045761006b0000803f
reject pos x-nan 020100000002000000020b487972756c654669656c640000c07f00000000000000000000000000
reject pos yaw-inf 020100000002000000020b487972756c654669656c640000000000000000000000000000807f00
reject pos frame-inf 020100000002000000020b487972756c654669656c6400000000000000000000000000000000010457616c6b000080ff
reject pos empty -
