{
  "name": "OMDP39 negative validation test vectors",
  "version": "1.0.27",
  "warning": "Dummy data only. These vectors define expected failures and must never contain real seed material.",
  "targetOfflineArtifactVersion": "1.0.25",
  "metadataReleaseVersion": "1.0.27",
  "expectedErrorClasses": [
    "base24.invalidCharacter",
    "base24.invalidLength",
    "base24.nonCanonical",
    "share.unknownWord",
    "share.checksumMismatch",
    "share.payloadMutation",
    "share.nonZeroPadding",
    "share.setMismatch",
    "share.insufficientShares",
    "header.unsupportedVersion",
    "header.unsupportedVariant",
    "header.unsupportedMode",
    "header.invalidThreshold",
    "header.invalidShareCount"
  ],
  "cases": [
    {
      "id": "NEG-BASE24-Q",
      "name": "Base24 rejects Q",
      "kind": "base24-invalid-character",
      "input": "0RE7ENH1PGH5QE72A7N0F1NPD6F9KN403DHGEJ9K62741ARJ8KE2FP2P8GJ71606M5MN59C8N6NABA1NGK09G6KB2B6HDR70",
      "expectedErrorClass": "base24.invalidCharacter",
      "invalidCharacter": "Q",
      "mustFail": true
    },
    {
      "id": "NEG-BASE24-I",
      "name": "Base24 rejects I",
      "kind": "base24-invalid-character",
      "input": "IRE7ENH1PGH5NE72A7N0F1NPD6F9KN403DHGEJ9K62741ARJ8KE2FP2P8GJ71606M5MN59C8N6NABA1NGK09G6KB2B6HDR70",
      "expectedErrorClass": "base24.invalidCharacter",
      "invalidCharacter": "I",
      "mustFail": true
    },
    {
      "id": "NEG-BASE24-L",
      "name": "Base24 rejects L",
      "kind": "base24-invalid-character",
      "input": "LRE7ENH1PGH5NE72A7N0F1NPD6F9KN403DHGEJ9K62741ARJ8KE2FP2P8GJ71606M5MN59C8N6NABA1NGK09G6KB2B6HDR70",
      "expectedErrorClass": "base24.invalidCharacter",
      "invalidCharacter": "L",
      "mustFail": true
    },
    {
      "id": "NEG-BASE24-O",
      "name": "Base24 rejects O",
      "kind": "base24-invalid-character",
      "input": "ORE7ENH1PGH5NE72A7N0F1NPD6F9KN403DHGEJ9K62741ARJ8KE2FP2P8GJ71606M5MN59C8N6NABA1NGK09G6KB2B6HDR70",
      "expectedErrorClass": "base24.invalidCharacter",
      "invalidCharacter": "O",
      "mustFail": true
    },
    {
      "id": "NEG-BASE24-LEN",
      "name": "Base24 rejects wrong length",
      "kind": "base24-wrong-length",
      "input": "0RE7ENH1PGH5NE72A7N0F1NP",
      "expectedErrorClass": "base24.invalidLength",
      "expectedCanonicalLength": 96,
      "mustFail": true
    },
    {
      "id": "NEG-RECOVERY-TOO-FEW",
      "name": "Too few shares for threshold",
      "kind": "recovery-insufficient-shares",
      "sharesTotal": 5,
      "threshold": 3,
      "sharesUsed": [
        "celery wheat keep vague army muffin mean robot thumb fly zebra trophy royal enemy turn benefit decorate aerobic client abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon",
        "celery wheat keep vague around gravity impulse cluster bracket tag certain speed tone print clinic blouse visit whip defense abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon"
      ],
      "expectedErrorClass": "share.insufficientShares",
      "mustFail": true
    },
    {
      "id": "NEG-RECOVERY-MIXED-SET",
      "name": "Mixed SetID / mixed share set",
      "kind": "recovery-mixed-set",
      "sharesUsed": [
        "celery wheat keep vague army muffin mean robot thumb fly zebra trophy royal enemy turn benefit decorate aerobic client abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon",
        "celery wheat keep vague around gravity impulse cluster bracket tag certain speed tone print clinic blouse visit whip defense abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon",
        "calm minor fiscal spare amount marine agent embark stage cloud canoe couple brass grace vessel satoshi more alarm pepper length abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon"
      ],
      "expectedErrorClass": "share.setMismatch",
      "mustFail": true
    },
    {
      "id": "NEG-SHARE-UNKNOWN-WORD",
      "name": "Unknown BIP39 word in share",
      "kind": "share-unknown-word",
      "shareWords": "notaword wheat keep vague army muffin mean robot thumb fly zebra trophy royal enemy turn benefit decorate aerobic client abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon",
      "expectedErrorClass": "share.unknownWord",
      "mustFail": true
    },
    {
      "id": "NEG-SHARE-CHECKSUM-MUTATION",
      "name": "Share word mutation must fail checksum validation",
      "kind": "share-checksum-mutation",
      "originalShareWords": "celery wheat keep vague army muffin mean robot thumb fly zebra trophy royal enemy turn benefit decorate aerobic client abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon",
      "mutatedShareWords": "celery wheat keep vague army muffin mean robot thumb fly abandon trophy royal enemy turn benefit decorate aerobic client abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon",
      "expectedErrorClass": "share.checksumMismatch",
      "mustFail": true
    },
    {
      "id": "NEG-SHARE-PAYLOAD-MUTATION",
      "name": "Payload-area mutation must not recover the original secret",
      "kind": "share-payload-mutation",
      "originalShareWords": "celery wheat keep vague army muffin mean robot thumb fly zebra trophy royal enemy turn benefit decorate aerobic client abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon",
      "mutatedShareWords": "celery wheat keep vague army muffin mean robot thumb fly zebra trophy royal enemy turn benefit decorate aerobic client abandon ability abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon",
      "expectedErrorClass": "share.payloadMutation",
      "mustFail": true
    },
    {
      "id": "NEG-SHARE-PADDING-B24",
      "name": "Base24 mutation in trailing encoded area must fail canonical share validation",
      "kind": "share-padding-or-canonical-mutation",
      "originalBase24": "0RE7ENH1PGH5NE72A7N0F1NPD6F9KN403DHGEJ9K62741ARJ8KE2FP2P8GJ71606M5MN59C8N6NABA1NGK09G6KB2B6HDR70",
      "mutatedBase24": "0RE7ENH1PGH5NE72A7N0F1NPD6F9KN403DHGEJ9K62741ARJ8KE2FP2P8GJ71606M5MN59C8N6NABA1NGK09G6KB2B6HDR71",
      "expectedErrorClass": "share.nonZeroPadding",
      "alternateExpectedErrorClass": "share.checksumMismatch",
      "mustFail": true
    },
    {
      "id": "NEG-HEADER-VERSION",
      "name": "Unsupported header version must be rejected",
      "kind": "header-unsupported-version",
      "headerFields": {
        "version": 7,
        "variant": 0,
        "mode": 0,
        "n": 3,
        "t": 2,
        "shareIndex": 1
      },
      "expectedErrorClass": "header.unsupportedVersion",
      "mustFail": true
    },
    {
      "id": "NEG-HEADER-VARIANT",
      "name": "Unsupported header variant must be rejected",
      "kind": "header-unsupported-variant",
      "headerFields": {
        "version": 1,
        "variant": 3,
        "mode": 0,
        "n": 3,
        "t": 2,
        "shareIndex": 1
      },
      "expectedErrorClass": "header.unsupportedVariant",
      "mustFail": true
    },
    {
      "id": "NEG-HEADER-MODE",
      "name": "Unsupported header mode must be rejected",
      "kind": "header-unsupported-mode",
      "headerFields": {
        "version": 1,
        "variant": 0,
        "mode": 1,
        "n": 3,
        "t": 2,
        "shareIndex": 1
      },
      "expectedErrorClass": "header.unsupportedMode",
      "mustFail": true
    },
    {
      "id": "NEG-HEADER-T1",
      "name": "T=1 is outside the public v1.0.25 web scope",
      "kind": "header-invalid-threshold",
      "headerFields": {
        "version": 1,
        "variant": 0,
        "mode": 0,
        "n": 5,
        "t": 1,
        "shareIndex": 1
      },
      "expectedErrorClass": "header.invalidThreshold",
      "mustFail": true
    },
    {
      "id": "NEG-HEADER-N64",
      "name": "N=64 is not encodable in the current 6-bit public field semantics",
      "kind": "header-invalid-share-count",
      "headerFields": {
        "version": 1,
        "variant": 0,
        "mode": 0,
        "n": 64,
        "t": 3,
        "shareIndex": 1
      },
      "expectedErrorClass": "header.invalidShareCount",
      "mustFail": true
    }
  ]
}