{
  "service": "i-Free Money Mock Service — Subscription Service (подписки)",
  "purpose": "Тест-векторы подписи HMAC-SHA256 Subscription Service. Реализуйте функцию подписи и прогоните эти векторы ДО первого сетевого вызова. Если вектор не сошёлся — сравните ваш message с напечатанным: различие будет в порядке конкатенации или в том, что вы применили формулу разовых платежей (два прохода с логином) вместо формулы подписок. / Implement the signature function and run these vectors BEFORE the first network call.",
  "algorithm": {
    "formula": "signature = lowercase(hex(HMAC_SHA256(key=SecretKey, message=SubscriptionProjectID + Now)))",
    "encoding": "UTF-8. Один проход HMAC, без логина и без промежуточного inner — это ДРУГАЯ формула, не та, что у разовых платежей Callisto.",
    "now_format": "yyyyMMddHHmmss UTC (поле Now в теле запроса)",
    "timestamp_window_minutes": 20,
    "body_is_signed": false,
    "body_note": "Остальные поля запроса в подпись НЕ входят — только SubscriptionProjectID и Now."
  },
  "credentials_note": "Проект 2001 / subs_secret_key — публичные seed-доступы песочницы; после локальной сверки векторов те же значения работают в живых запросах.",
  "docs": "https://subs-sandbox.digitalspb.com/help#auth",
  "vectors": [
    {
      "id": "subs-valid",
      "valid": true,
      "subscription_project_id": "2001",
      "secret_key": "subs_secret_key",
      "now": "20260210175637",
      "message": "200120260210175637",
      "signature": "7b61d6943253d43f1318d9bf251d599f8e6d1a3608123b0178732d4828d436a6"
    },
    {
      "id": "subs-negative-reversed",
      "valid": false,
      "why_invalid": "Конкатенация в обратном порядке: Now + SubscriptionProjectID. Порядок фиксирован — сначала SubscriptionProjectID, затем Now.",
      "subscription_project_id": "2001",
      "secret_key": "subs_secret_key",
      "now": "20260210175637",
      "signature": "b49249dc3accfa0e4a55a0b576ee0aac08394d87407e7283ddcb7df3b937b2dc"
    },
    {
      "id": "subs-negative-md5-legacy",
      "valid": false,
      "why_invalid": "MD5(SubscriptionProjectID + Now + SecretKey) — формула из редакций спецификации до 2026.05.01. Больше не принимается; если ваша подпись 32 символа вместо 64 — вы работаете по устаревшему документу.",
      "subscription_project_id": "2001",
      "secret_key": "subs_secret_key",
      "now": "20260210175637",
      "signature": "8d03ad158808ed83bb5ba5381ab3ae1c"
    }
  ]
}
