{
  "description": "X25519 ECDH (RFC 7748). AVP uses X25519 with raw 32-byte little-endian keys; the agreement output is the raw 32-byte shared secret, UNHASHED (SPEC §4 step 2). 'scalarHex' is the private scalar, 'uCoordinateHex' the peer public u-coordinate, 'outputHex' the shared secret, all lowercase hex, little-endian. Cases rfc7748-vec1/vec2 are the published RFC 7748 §5.2 single-iteration test vectors and are reproduced byte-for-byte by the runner. Case rfc7748-dh is the RFC 7748 §6.1 Diffie-Hellman example (Alice scalar against Bob's public key) and is the same construction reused, with the non-clamped scalar as it appears in the RFC; it shares its keys with key-wrap.json so the wrap composition is anchored to a published vector.",
  "cases": [
    {
      "name": "rfc7748-vec1",
      "source": "RFC 7748 §5.2 (first X25519 test vector)",
      "scalarHex": "a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4",
      "uCoordinateHex": "e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c",
      "outputHex": "c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552"
    },
    {
      "name": "rfc7748-vec2",
      "source": "RFC 7748 §5.2 (second X25519 test vector). NOTE: the RFC prints this input u-coordinate as e5210f...c715a493, whose most-significant bit (top bit of the last byte, 0x93) is set. RFC 7748 §5 mandates masking that bit before decoding; the value below is already masked (last byte 0x93 -> 0x13) so every conformant X25519 decoder agrees byte-for-byte regardless of whether it masks internally. The expected output is the RFC's published result for this vector. In AVP all X25519 public keys are valid curve points whose u-coordinate is < 2^255, so the high bit is never set in practice.",
      "scalarHex": "4b66e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba0d",
      "uCoordinateHex": "e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a413",
      "outputHex": "95cbde9476e8907d7aade45cb4b873f88b595a68799fa152e6f8f7647aac7957"
    },
    {
      "name": "rfc7748-dh",
      "source": "RFC 7748 §6.1 (Alice's private key against Bob's public key); identical Alice keypair is reused as the recipient in key-wrap.json",
      "scalarHex": "77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a",
      "uCoordinateHex": "de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f",
      "outputHex": "4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742"
    }
  ]
}
