{
  "_comment": "Frozen test vectors for the webhook signing algorithm. Pinned by app/services/webhook_signer.py tests AND by the participant verifier package (packages/competition_webhooks/tests). Changing any value here is a breaking change for downstream verifier consumers. Single-signature vectors carry a scalar 'secret'; rotation-overlap vectors carry a 'secrets' list (current secret first) and an 'expected_signature_header' with one space-delimited 'v1,...' signature per secret.",
  "vectors": [
    {
      "name": "minimal payload, single signature",
      "secret": "whsec_dGVzdC1zZWNyZXQtMzItYnl0ZXMtZm9yLXRlc3R2ZWN0",
      "webhook_id": "evt_01HX7M9TESTVECTORID",
      "timestamp": 1714850123,
      "raw_body": "{\"id\":\"evt_01HX7M9TESTVECTORID\",\"event_id\":\"e1\"}",
      "expected_signature_header": "v1,vIYng2J6M2XsRpNnxCKxc178O2qAxCx9m/umiJLOtho="
    },
    {
      "name": "rotation overlap, two signatures (current secret first)",
      "secrets": [
        "whsec_cm90YXRpb24tY3VycmVudC1zZWNyZXQtMzItYnl0ZXM",
        "whsec_cm90YXRpb24tcHJldmlvdXMtc2VjcmV0LTMyYnl0ZSE"
      ],
      "webhook_id": "evt_01HX7M9ROTATIONVECTOR",
      "timestamp": 1714850123,
      "raw_body": "{\"id\":\"evt_01HX7M9ROTATIONVECTOR\",\"event_id\":\"e2\"}",
      "expected_signature_header": "v1,wCGWQpJklrBow2HfEQIXZl9MLbBpV6eKhAXZ03OoqTA= v1,8axRlr9R2kFkemPuZjd2iV0YcCpw+qqUy30rV18iR3I="
    }
  ]
}
