Add documentation for the JSON structure outputted by 'pvimg info --format=json ...'. Created with assistance from IBM Bob AI. Reviewed-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>
9.3 KiB
pvimg info JSON Output Documentation
This document describes the JSON output format for the pvimg info command when
using --format=json, --format=json:minify or --format=json:pretty.
Overview
The pvimg info command outputs information about IBM Secure Execution (SE)
images in JSON format. The output conforms to the JSON schema defined in
info-v1.schema.json.
Getting the JSON Schema
To retrieve the JSON schema programmatically, use:
pvimg info --print-schema json
This outputs the complete JSON schema that can be used for validation and documentation purposes.
Output Structure
The JSON output has the following top-level structure:
{
"meta": {
"api_level": 1,
"version": "2.x.x",
"host": "hostname",
"time_epoch": 1234567890,
"time": "YYYY-MM-DD HH:MM:SS+ZZZZ"
},
"data": {
// SE header data (see below)
}
}
Top-Level Fields
meta(object, required): Metadata about the s390-tools version and execution environment.api_level(integer, required): API level version, currently always1.version(string, required): Version of s390-tools.host(string, required): Hostname where the command was executed.time_epoch(integer, required): Unix timestamp (seconds since epoch) when the command was executed.time(string, required): Human-readable timestamp in format 'YYYY-MM-DD HH:MM:SS+ZZZZ'.
data(object, required): Contains the Secure Execution header information.
SE Header Data Types
The data object can represent three different states of the SE header:
- Decrypted SE Header (with
--hdr-keyand--show-secrets) - Encrypted SE Header (Verified) (with
--hdr-key) - Encrypted SE Header (Not Verified) (without
--hdr-key)
Common Fields
All three types share these common fields:
| Field | Type | Description |
|---|---|---|
kind |
string | Type of header: "decrypted_se_hdr" or "se_hdr" |
verified |
boolean | Whether the SE header integrity and authenticity verified with the header protection key |
magic_hex |
string | Magic number identifying SE header (hex) |
version |
string | SE header version (e.g., "V1") |
sehs |
integer | SE header size in bytes |
iv_hex |
string | Initialization vector (hex) |
nks |
integer | Number of key slots |
sea |
integer | Encrypted area size in bytes |
nep |
integer | Number of (encrypted) component pages |
pcf_hex |
string | Plaintext control flags (hex) |
cust_pub_key |
object | Customer public key |
pld_hex |
string | PLD (Page content List Digest) hash (hex) |
ald_hex |
string | ALD (Address List Digest) hash (hex) |
tld_hex |
string | TLD (Tweak List Digest) hash (hex) |
keyslots |
array | Array of key slot objects |
tag_hex |
string | SE header authentication tag (hex) |
Customer Public Key Object
{
"coord_hex": "string" // EC public key coordinates (hex)
}
Key Slot Object
{
"phkh_hex": "string", // Hash of the public target key (hex)
"wrpk_hex": "string", // Wrapped SE header protection key (hex)
"kst_hex": "string" // Key slot authentication tag (hex)
}
1. Decrypted SE Header
When using --hdr-key with --show-secrets, the output includes decrypted
secrets:
{
"meta": {
"api_level": 1,
"version": "2.x.x",
"host": "hostname",
"time_epoch": 1234567890,
"time": "2026-01-15 10:30:45+0100"
},
"data": {
"kind": "decrypted_se_hdr",
"verified": true,
"magic_hex": "49424d5365634578",
"version": "V1",
"sehs": 640,
"iv_hex": "...",
"nks": 1,
"sea": 128,
"nep": 4,
"pcf_hex": "00000000000000e0",
"cust_pub_key": {
"coord_hex": "..."
},
"pld_hex": "...",
"ald_hex": "...",
"tld_hex": "...",
"keyslots": [
{
"phkh_hex": "...",
"wrpk_hex": "...",
"kst_hex": "..."
}
],
"tag_hex": "...",
"psw": {
"mask_hex": "...",
"addr_hex": "..."
},
"scf_hex": "...",
"cck_hex": "...",
"xts_hex": "..."
}
}
Additional fields for decrypted headers:
| Field | Type | Description |
|---|---|---|
psw |
object | Program Status Word with mask_hex and addr_hex |
scf_hex |
string | Secret control flags (hex) |
cck_hex |
string | Customer communication key (CCK) (hex) |
xts_hex |
string | Components encryption key (hex) |
Note: The cipher_data_b64 field is NOT present in decrypted headers.
2. Encrypted SE Header (Verified)
When using --hdr-key without --show-secrets:
{
"meta": {
"api_level": 1,
"version": "2.x.x",
"host": "hostname",
"time_epoch": 1234567890,
"time": "2026-01-15 10:30:45+0100"
},
"data": {
"kind": "se_hdr",
"verified": true,
"magic_hex": "49424d5365634578",
"version": "V1",
"sehs": 640,
"iv_hex": "...",
"nks": 1,
"sea": 128,
"nep": 4,
"pcf_hex": "00000000000000e0",
"cust_pub_key": {
"coord_hex": "..."
},
"pld_hex": "...",
"ald_hex": "...",
"tld_hex": "...",
"keyslots": [
{
"phkh_hex": "...",
"wrpk_hex": "...",
"kst_hex": "..."
}
],
"tag_hex": "...",
"cipher_data_b64": "..."
}
}
Additional field:
| Field | Type | Description |
|---|---|---|
cipher_data_b64 |
string | Base64-encoded encrypted header data |
3. Encrypted SE Header (Not Verified)
When NOT using --hdr-key:
{
"meta": {
"api_level": 1,
"version": "2.x.x",
"host": "hostname",
"time_epoch": 1234567890,
"time": "2026-01-15 10:30:45+0100"
},
"data": {
"kind": "se_hdr",
"verified": false,
"magic_hex": "49424d5365634578",
"version": "V1",
"sehs": 640,
"iv_hex": "...",
"nks": 1,
"sea": 128,
"nep": 4,
"pcf_hex": "00000000000000e0",
"cust_pub_key": {
"coord_hex": "..."
},
"pld_hex": "...",
"ald_hex": "...",
"tld_hex": "...",
"keyslots": [
{
"phkh_hex": "...",
"wrpk_hex": "...",
"kst_hex": "..."
}
],
"tag_hex": "...",
"cipher_data_b64": "..."
}
}
Warning: When verified is false, the data has NOT been verified and should not be trusted without proper authentication.
Field Details
Hex String Format
All fields ending in _hex contain hexadecimal strings (characters 0-9, a-f, A-F) without the 0x prefix.
Base64 String Format
The cipher_data_b64 field contains standard Base64-encoded data (characters A-Z, a-z, 0-9, +, /, with optional padding =).
Plaintext Control Flags (PCF)
The pcf_hex field is a hexadecimal string representing control flags. These flags control various SE features, e.g.:
- Dumping support
- CCK extension secret requirement
- CCK update support
- PCKMO key encryption functions (DEA, TDEA, AES, ECC)
- PCKMO HMAC support
- Backup target keys support
- Image component encryption
Refer to the IBM Secure Execution documentation for detailed flag meanings.
Secret Control Flags (SCF)
The scf_hex field (only in decrypted headers) contains secret control flags that are encrypted in the SE header.
Usage Examples
Basic Info (No Authentication)
pvimg info se-image.img --format=json
Output will have verified: false and include cipher_data_b64.
Verified Info
pvimg info se-image.img --format=json --hdr-key header.key
Output will have verified: true and include cipher_data_b64.
Decrypted Info with Secrets
pvimg info se-image.img --format=json --hdr-key header.key --show-secrets
Output will have verified: true, kind: "decrypted_se_hdr", and include decrypted fields (psw, scf_hex, cck_hex, xts_hex) instead of cipher_data_b64.
Pretty-Printed JSON
pvimg info se-image.img --format=json:pretty --hdr-key header.key
Outputs formatted JSON with indentation for better readability.
Get JSON Schema
pvimg info --print-schema json > info-schema.json
Saves the JSON schema to a file for validation purposes.
Validation
The output can be validated against the JSON schema using standard JSON schema validators:
# Get the schema
pvimg info --print-schema json > schema.json
# Generate output
pvimg info se-image.img --format=json > output.json
# Validate (using a JSON schema validator tool)
check-jsonschema -i output.json schema.json
Security Considerations
-
Verification Required: Always use
--hdr-keyto verify the SE header authenticity. Without verification (verified: false), the data cannot be trusted. -
Secrets Protection: The
--show-secretsoption exposes sensitive cryptographic material. Only use this option in secure environments and never share the output containing secrets. -
Key Protection: The header key file specified with
--hdr-keymust be kept secure. It was used for the image creation withpvimg create --hdr-key <HDR_KEY>.
Version History
- API Level 1: Initial JSON output format for SE header V1
See Also
info-v1.schema.json- JSON Schema definitionpvimg info --help- Command-line helpman pvimg-info- Manual page- IBM Secure Execution documentation