{
 "additionalProperties": false,
 "definitions": {
  "DeriveKeyUsage": {
   "enum": [
    "TR31_B0_BASE_DERIVATION_KEY",
    "TR31_C0_CARD_VERIFICATION_KEY",
    "TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY",
    "TR31_E0_EMV_MKEY_APP_CRYPTOGRAMS",
    "TR31_E1_EMV_MKEY_CONFIDENTIALITY",
    "TR31_E2_EMV_MKEY_INTEGRITY",
    "TR31_E4_EMV_MKEY_DYNAMIC_NUMBERS",
    "TR31_E5_EMV_MKEY_CARD_PERSONALIZATION",
    "TR31_E6_EMV_MKEY_OTHER",
    "TR31_K0_KEY_ENCRYPTION_KEY",
    "TR31_K1_KEY_BLOCK_PROTECTION_KEY",
    "TR31_M3_ISO_9797_3_MAC_KEY",
    "TR31_M1_ISO_9797_1_MAC_KEY",
    "TR31_M6_ISO_9797_5_CMAC_KEY",
    "TR31_M7_HMAC_KEY",
    "TR31_P0_PIN_ENCRYPTION_KEY",
    "TR31_P1_PIN_GENERATION_KEY",
    "TR31_V1_IBM3624_PIN_VERIFICATION_KEY",
    "TR31_V2_VISA_PIN_VERIFICATION_KEY"
   ],
   "type": "string"
  },
  "KeyAlgorithm": {
   "enum": [
    "TDES_2KEY",
    "TDES_3KEY",
    "AES_128",
    "AES_192",
    "AES_256",
    "HMAC_SHA256",
    "HMAC_SHA384",
    "HMAC_SHA512",
    "HMAC_SHA224",
    "RSA_2048",
    "RSA_3072",
    "RSA_4096",
    "ECC_NIST_P256",
    "ECC_NIST_P384",
    "ECC_NIST_P521"
   ],
   "type": "string"
  },
  "KeyAttributes": {
   "additionalProperties": false,
   "properties": {
    "KeyAlgorithm": {
     "$ref": "#/definitions/KeyAlgorithm"
    },
    "KeyClass": {
     "$ref": "#/definitions/KeyClass"
    },
    "KeyModesOfUse": {
     "$ref": "#/definitions/KeyModesOfUse"
    },
    "KeyUsage": {
     "$ref": "#/definitions/KeyUsage"
    }
   },
   "required": [
    "KeyAlgorithm",
    "KeyClass",
    "KeyModesOfUse",
    "KeyUsage"
   ],
   "type": "object"
  },
  "KeyCheckValueAlgorithm": {
   "enum": [
    "CMAC",
    "ANSI_X9_24",
    "HMAC",
    "SHA_1"
   ],
   "type": "string"
  },
  "KeyClass": {
   "enum": [
    "SYMMETRIC_KEY",
    "ASYMMETRIC_KEY_PAIR",
    "PRIVATE_KEY",
    "PUBLIC_KEY"
   ],
   "type": "string"
  },
  "KeyModesOfUse": {
   "additionalProperties": false,
   "properties": {
    "Decrypt": {
     "default": false,
     "type": "boolean"
    },
    "DeriveKey": {
     "default": false,
     "type": "boolean"
    },
    "Encrypt": {
     "default": false,
     "type": "boolean"
    },
    "Generate": {
     "default": false,
     "type": "boolean"
    },
    "NoRestrictions": {
     "default": false,
     "type": "boolean"
    },
    "Sign": {
     "default": false,
     "type": "boolean"
    },
    "Unwrap": {
     "default": false,
     "type": "boolean"
    },
    "Verify": {
     "default": false,
     "type": "boolean"
    },
    "Wrap": {
     "default": false,
     "type": "boolean"
    }
   },
   "type": "object"
  },
  "KeyOrigin": {
   "enum": [
    "EXTERNAL",
    "AWS_PAYMENT_CRYPTOGRAPHY"
   ],
   "type": "string"
  },
  "KeyReplicationState": {
   "enum": [
    "IN_PROGRESS",
    "DELETE_IN_PROGRESS",
    "FAILED",
    "SYNCHRONIZED"
   ],
   "type": "string"
  },
  "KeyState": {
   "enum": [
    "CREATE_IN_PROGRESS",
    "CREATE_COMPLETE",
    "DELETE_PENDING",
    "DELETE_COMPLETE"
   ],
   "type": "string"
  },
  "KeyUsage": {
   "enum": [
    "TR31_B0_BASE_DERIVATION_KEY",
    "TR31_C0_CARD_VERIFICATION_KEY",
    "TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY",
    "TR31_D1_ASYMMETRIC_KEY_FOR_DATA_ENCRYPTION",
    "TR31_E0_EMV_MKEY_APP_CRYPTOGRAMS",
    "TR31_E1_EMV_MKEY_CONFIDENTIALITY",
    "TR31_E2_EMV_MKEY_INTEGRITY",
    "TR31_E4_EMV_MKEY_DYNAMIC_NUMBERS",
    "TR31_E5_EMV_MKEY_CARD_PERSONALIZATION",
    "TR31_E6_EMV_MKEY_OTHER",
    "TR31_K0_KEY_ENCRYPTION_KEY",
    "TR31_K1_KEY_BLOCK_PROTECTION_KEY",
    "TR31_K3_ASYMMETRIC_KEY_FOR_KEY_AGREEMENT",
    "TR31_M3_ISO_9797_3_MAC_KEY",
    "TR31_M1_ISO_9797_1_MAC_KEY",
    "TR31_M6_ISO_9797_5_CMAC_KEY",
    "TR31_M7_HMAC_KEY",
    "TR31_P0_PIN_ENCRYPTION_KEY",
    "TR31_P1_PIN_GENERATION_KEY",
    "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE",
    "TR31_V1_IBM3624_PIN_VERIFICATION_KEY",
    "TR31_V2_VISA_PIN_VERIFICATION_KEY",
    "TR31_K2_TR34_ASYMMETRIC_KEY"
   ],
   "type": "string"
  },
  "ReplicationStatus": {
   "additionalProperties": false,
   "patternProperties": {
    "^[a-z]{2}-[a-z]{1,16}-[0-9]+$": {
     "$ref": "#/definitions/ReplicationStatusType"
    }
   },
   "type": "object"
  },
  "ReplicationStatusType": {
   "additionalProperties": false,
   "properties": {
    "Status": {
     "$ref": "#/definitions/KeyReplicationState"
    },
    "StatusMessage": {
     "type": "string"
    }
   },
   "required": [
    "Status"
   ],
   "type": "object"
  },
  "Tag": {
   "additionalProperties": false,
   "properties": {
    "Key": {
     "maxLength": 128,
     "minLength": 1,
     "type": "string"
    },
    "Value": {
     "maxLength": 256,
     "minLength": 1,
     "type": "string"
    }
   },
   "required": [
    "Key",
    "Value"
   ],
   "type": "object"
  }
 },
 "primaryIdentifier": [
  "/properties/KeyIdentifier"
 ],
 "properties": {
  "DeriveKeyUsage": {
   "$ref": "#/definitions/DeriveKeyUsage"
  },
  "Enabled": {
   "type": "boolean"
  },
  "Exportable": {
   "type": "boolean"
  },
  "KeyAttributes": {
   "$ref": "#/definitions/KeyAttributes"
  },
  "KeyCheckValueAlgorithm": {
   "$ref": "#/definitions/KeyCheckValueAlgorithm"
  },
  "KeyIdentifier": {
   "maxLength": 322,
   "minLength": 7,
   "pattern": "^arn:aws:payment-cryptography:[a-z]{2}-[a-z]{1,16}-[0-9]+:[0-9]{12}:(key/[0-9a-zA-Z]{16,64}|alias/[a-zA-Z0-9/_-]+)$|^alias/[a-zA-Z0-9/_-]+$",
   "type": "string"
  },
  "KeyOrigin": {
   "$ref": "#/definitions/KeyOrigin"
  },
  "KeyState": {
   "$ref": "#/definitions/KeyState"
  },
  "ReplicationRegions": {
   "items": {
    "pattern": "^[a-z]{2}-[a-z]{1,16}-[0-9]+$",
    "type": "string"
   },
   "type": "array"
  },
  "ReplicationStatus": {
   "$ref": "#/definitions/ReplicationStatus"
  },
  "Tags": {
   "insertionOrder": false,
   "items": {
    "$ref": "#/definitions/Tag"
   },
   "maxItems": 200,
   "minItems": 0,
   "type": "array"
  }
 },
 "readOnlyProperties": [
  "/properties/KeyIdentifier",
  "/properties/KeyOrigin",
  "/properties/KeyState",
  "/properties/ReplicationStatus"
 ],
 "required": [
  "Exportable",
  "KeyAttributes"
 ],
 "tagging": {
  "cloudFormationSystemTags": true,
  "tagOnCreate": true,
  "tagProperty": "/properties/Tags",
  "tagUpdatable": true,
  "taggable": true
 },
 "typeName": "AWS::PaymentCryptography::Key",
 "writeOnlyProperties": [
  "/properties/ReplicationRegions"
 ]
}
