mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
Add a new '--print-schema <FORMAT>' option to the 'pvimg info' command that prints the schema, if available, describing the given output format. For example, 'pvimg info --print-schema json' prints the JSON schema for the 'pvimg info' command output. Acked-by: Steffen Eiden <seiden@linux.ibm.com> Signed-off-by: Marc Hartmayer <marc@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
322 lines
8.8 KiB
JSON
322 lines
8.8 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"title": "'pvimg info' JSON output schema",
|
|
"description": "JSON schema for the 'pvimg info' command output. This schema describes the structure of IBM Secure Execution (SE) image header information in three states: decrypted (with secrets), encrypted (verified), and encrypted (not verified).",
|
|
"type": "object",
|
|
"required": [
|
|
"meta",
|
|
"data"
|
|
],
|
|
"properties": {
|
|
"meta": {
|
|
"type": "object",
|
|
"description": "Metadata about the s390-tools version and execution environment.",
|
|
"required": [
|
|
"api_level",
|
|
"version",
|
|
"host",
|
|
"time_epoch",
|
|
"time"
|
|
],
|
|
"properties": {
|
|
"api_level": {
|
|
"type": "integer",
|
|
"const": 1,
|
|
"description": "API level version, currently always 1."
|
|
},
|
|
"version": {
|
|
"type": "string",
|
|
"description": "Version of s390-tools."
|
|
},
|
|
"host": {
|
|
"type": "string",
|
|
"description": "Hostname where the command was executed."
|
|
},
|
|
"time_epoch": {
|
|
"type": "integer",
|
|
"description": "Unix timestamp (seconds since epoch) when the command was executed."
|
|
},
|
|
"time": {
|
|
"type": "string",
|
|
"description": "Human-readable timestamp in format 'YYYY-MM-DD HH:MM:SS+ZZZZ'."
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"data": {
|
|
"type": "object",
|
|
"description": "Contains the Secure Execution header information.",
|
|
"required": [
|
|
"kind",
|
|
"verified",
|
|
"magic_hex",
|
|
"version",
|
|
"sehs",
|
|
"iv_hex",
|
|
"nks",
|
|
"sea",
|
|
"nep",
|
|
"pcf_hex",
|
|
"cust_pub_key",
|
|
"pld_hex",
|
|
"ald_hex",
|
|
"tld_hex",
|
|
"keyslots",
|
|
"tag_hex"
|
|
],
|
|
"properties": {
|
|
"kind": {
|
|
"type": "string",
|
|
"enum": [
|
|
"decrypted_se_hdr",
|
|
"se_hdr"
|
|
],
|
|
"description": "Type of SE header."
|
|
},
|
|
"verified": {
|
|
"type": "boolean",
|
|
"description": "Indicates whether the SE header authenticity was verified."
|
|
},
|
|
"magic_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "Magic value identifying the SE header."
|
|
},
|
|
"version": {
|
|
"type": "string",
|
|
"description": "SE header version string."
|
|
},
|
|
"sehs": {
|
|
"type": "integer",
|
|
"description": "SE header size in bytes."
|
|
},
|
|
"iv_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "Initialization vector for SE header encryption."
|
|
},
|
|
"nks": {
|
|
"type": "integer",
|
|
"description": "Number of key slots."
|
|
},
|
|
"sea": {
|
|
"type": "integer",
|
|
"description": "Size of encrypted area of the SE header in bytes."
|
|
},
|
|
"nep": {
|
|
"type": "integer",
|
|
"description": "Number of (encrypted) component pages."
|
|
},
|
|
"pcf_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "Plaintext control flags."
|
|
},
|
|
"cust_pub_key": {
|
|
"$ref": "#/definitions/custPubKey",
|
|
"description": "Customer public key."
|
|
},
|
|
"pld_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "PLD (Page content List Digest) hash."
|
|
},
|
|
"ald_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "ALD (Address List Digest) hash."
|
|
},
|
|
"tld_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "TLD (Tweak List Digest) hash."
|
|
},
|
|
"keyslots": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"description": "Array of key slot entries.",
|
|
"items": {
|
|
"$ref": "#/definitions/keyslot"
|
|
}
|
|
},
|
|
"cipher_data_b64": {
|
|
"$ref": "#/definitions/base64String",
|
|
"description": "Encrypted SE header data (only for encrypted headers)."
|
|
},
|
|
"psw": {
|
|
"$ref": "#/definitions/psw",
|
|
"description": "Program Status Word (only for decrypted headers)."
|
|
},
|
|
"scf_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "Secret control flags (only for decrypted headers)."
|
|
},
|
|
"cck_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "Customer communication key (CCK) (only for decrypted headers)."
|
|
},
|
|
"xts_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "Components encryption key (only for decrypted headers)."
|
|
},
|
|
"tag_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "SE Header authentication tag."
|
|
}
|
|
},
|
|
"oneOf": [
|
|
{
|
|
"title": "Decrypted SE Header",
|
|
"description": "SE header with decrypted secrets.",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "decrypted_se_hdr"
|
|
},
|
|
"verified": {
|
|
"const": true
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"verified",
|
|
"psw",
|
|
"scf_hex",
|
|
"cck_hex",
|
|
"xts_hex"
|
|
],
|
|
"not": {
|
|
"anyOf": [
|
|
{
|
|
"required": [
|
|
"cipher_data_b64"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"title": "Encrypted SE Header (Verified)",
|
|
"description": "Encrypted SE header integrity and authenticity checked with --hdr-key.",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "se_hdr"
|
|
},
|
|
"verified": {
|
|
"const": true
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"verified",
|
|
"cipher_data_b64"
|
|
]
|
|
},
|
|
{
|
|
"title": "Encrypted SE Header (Not Verified)",
|
|
"description": "Encrypted SE header without integrity and authenticity verification.",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "se_hdr"
|
|
},
|
|
"verified": {
|
|
"const": false
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"verified"
|
|
],
|
|
"not": {
|
|
"anyOf": [
|
|
{
|
|
"required": [
|
|
"psw"
|
|
]
|
|
},
|
|
{
|
|
"required": [
|
|
"scf_hex"
|
|
]
|
|
},
|
|
{
|
|
"required": [
|
|
"cck_hex"
|
|
]
|
|
},
|
|
{
|
|
"required": [
|
|
"xts_hex"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"definitions": {
|
|
"hexString": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-fA-F]+$",
|
|
"description": "Hexadecimal string without 0x prefix."
|
|
},
|
|
"base64String": {
|
|
"type": "string",
|
|
"pattern": "^[A-Za-z0-9+/]+={0,2}$",
|
|
"description": "Standard Base64-encoded string."
|
|
},
|
|
"custPubKey": {
|
|
"type": "object",
|
|
"description": "Customer public key.",
|
|
"required": [
|
|
"coord_hex"
|
|
],
|
|
"properties": {
|
|
"coord_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "EC public key coordinates in hex."
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"keyslot": {
|
|
"type": "object",
|
|
"description": "Wrapped SE header protection key for a specific target key.",
|
|
"required": [
|
|
"phkh_hex",
|
|
"wrpk_hex",
|
|
"kst_hex"
|
|
],
|
|
"properties": {
|
|
"phkh_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "Hash of the public target key."
|
|
},
|
|
"wrpk_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "Wrapped SE header protection key."
|
|
},
|
|
"kst_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "Key slot authentication tag."
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"psw": {
|
|
"type": "object",
|
|
"required": [
|
|
"mask_hex",
|
|
"addr_hex"
|
|
],
|
|
"description": "Program Status Word (PSW) defining the initial CPU state in the protected mode.",
|
|
"properties": {
|
|
"mask_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "Initial PSW mask."
|
|
},
|
|
"addr_hex": {
|
|
"$ref": "#/definitions/hexString",
|
|
"description": "Initial PSW address."
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|