{
  "protocol": "DVeProto",
  "version": "2.0-alpha",
  "handshake_version": 32,
  "notes": [
    "NodeID = Ed25519 public key (32 bytes)",
    "ConnectionID = 8-byte random path/session id",
    "HKDF-SHA256 salt = client_nonce || server_nonce",
    "Labels: DVeProto-v2/c2s | DVeProto-v2/s2c | DVeProto-v2/finished",
    "Server signs SHA-256(ClientHello || ServerHello-without-signature)",
    "Finished MAC = HMAC-SHA256(finished_key, ClientHello||ServerHello)",
    "Mandatory for every implementation: Python, Browser, Node.js, \u2026"
  ],
  "node_identity": {
    "client_ed25519_sk": "c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1",
    "client_node_id": "acdcc8494d458f44a7aaac1d6a84ec624daee88436db2ae26e67ba645a106228",
    "server_ed25519_sk": "5151515151515151515151515151515151515151515151515151515151515151",
    "server_node_id": "c050c5637a44fa8629fff3cccce2300cb362a63d99d95fc54145266f4332445a"
  },
  "x25519": {
    "client_eph_sk": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
    "client_eph_pk": "8f40c5adb68f25624ae5b214ea767a6ec94d829d3d7b5e1ad1ba6f3e2138285f",
    "server_eph_sk": "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
    "server_eph_pk": "358072d6365880d1aeea329adf9121383851ed21a28e3b75e965d0d2cd166254",
    "shared_secret": "9663aa1da97e848a914a436d04163dfbb89178f107f1b5b77ed3854203382854"
  },
  "nonces": {
    "client_nonce": "1111111111111111111111111111111111111111111111111111111111111111",
    "server_nonce": "2222222222222222222222222222222222222222222222222222222222222222"
  },
  "connection_id": "abcdef0123456789",
  "client_hello_hex": "44482001abcdef01234567898f40c5adb68f25624ae5b214ea767a6ec94d829d3d7b5e1ad1ba6f3e2138285facdcc8494d458f44a7aaac1d6a84ec624daee88436db2ae26e67ba645a1062281111111111111111111111111111111111111111111111111111111111111111010001",
  "server_hello_unsigned_hex": "44482002abcdef0123456789358072d6365880d1aeea329adf9121383851ed21a28e3b75e965d0d2cd166254c050c5637a44fa8629fff3cccce2300cb362a63d99d95fc54145266f4332445a22222222222222222222222222222222222222222222222222222222222222220001",
  "transcript_hash": "c7f49df8bc49f5abf3758dfe689fb412b547ac4d8197b5b733887875a4db7bdb",
  "server_hello_hex": "44482002abcdef0123456789358072d6365880d1aeea329adf9121383851ed21a28e3b75e965d0d2cd166254c050c5637a44fa8629fff3cccce2300cb362a63d99d95fc54145266f4332445a22222222222222222222222222222222222222222222222222222222222222220001344b4c1f932f2f59f3b5c6e67a8e127cb5c2538420d309770bdd0350e01a2f168ef2b1d77c442879291d3dfc7dc9b2abc2379e2437db42aec7250b2dbccc2307",
  "server_hello_signature_hex": "344b4c1f932f2f59f3b5c6e67a8e127cb5c2538420d309770bdd0350e01a2f168ef2b1d77c442879291d3dfc7dc9b2abc2379e2437db42aec7250b2dbccc2307",
  "derived_keys": {
    "key_c2s": "e9463aa3954c3892744e2c056cf0e8996e387f9d3abbfc5406a418a59f08e7f6",
    "key_s2c": "c4a8cc16c2d94b45f4afc6c8dc9af0e9dc1fe7d97ccc103e9b63e0ea91c4e0a9",
    "finished_key": "9b35c4f6ba9a0a35a8288e00531f7f1c52b7cfef0b9c959c5359f86b5483500b"
  },
  "finished": {
    "transcript_hex": "44482001abcdef01234567898f40c5adb68f25624ae5b214ea767a6ec94d829d3d7b5e1ad1ba6f3e2138285facdcc8494d458f44a7aaac1d6a84ec624daee88436db2ae26e67ba645a106228111111111111111111111111111111111111111111111111111111111111111101000144482002abcdef0123456789358072d6365880d1aeea329adf9121383851ed21a28e3b75e965d0d2cd166254c050c5637a44fa8629fff3cccce2300cb362a63d99d95fc54145266f4332445a22222222222222222222222222222222222222222222222222222222222222220001344b4c1f932f2f59f3b5c6e67a8e127cb5c2538420d309770bdd0350e01a2f168ef2b1d77c442879291d3dfc7dc9b2abc2379e2437db42aec7250b2dbccc2307",
    "mac_hex": "ba976a2912bcd17c5975e20b17a17bcb8bf12069c1a1e659086f18b5a0af9aed",
    "message_hex": "44482003ba976a2912bcd17c5975e20b17a17bcb8bf12069c1a1e659086f18b5a0af9aed"
  },
  "wire_frame_c2s": {
    "cipher_suite": "0x0001 AES-256-GCM",
    "plaintext": "dveproto-2.0-interop",
    "plaintext_hex": "64766570726f746f2d322e302d696e7465726f70",
    "nonce": "000102030405060708090a0b",
    "aad_hex": "445620000001abcdef012345678900000000000000000000000000000014",
    "ciphertext_hex": "586de879af396e8306a916b0142b4066112d7ee6",
    "tag_hex": "420eb96b4ee49061c39bce89177180ee",
    "frame_hex": "445620000001abcdef012345678900000000000000000000000000000014000102030405060708090a0b586de879af396e8306a916b0142b4066112d7ee6420eb96b4ee49061c39bce89177180ee"
  },
  "wire_frame_s2c_pong": {
    "plaintext": "pong",
    "plaintext_hex": "706f6e67",
    "nonce": "f0f1f2f3f4f5f6f7f8f9fafb",
    "aad_hex": "445620000031abcdef012345678900000000000000000000000000000004",
    "ciphertext_hex": "2e085e50",
    "tag_hex": "620897ebd192b8704cef0f3af74c7c42",
    "frame_hex": "445620000031abcdef012345678900000000000000000000000000000004f0f1f2f3f4f5f6f7f8f9fafb2e085e50620897ebd192b8704cef0f3af74c7c42"
  }
}
