Message Format
Versal AI Edge Series Gen 2 and Versal Prime Series Gen 2 Auth JTAG Message format always includes PPK and SPK. In comparison to Versal, following is the new format for Versal AI Edge Series Gen 2 and Versal Prime Series Gen 2 devices.
| Offset | Size | Fields | Descriptions |
|---|---|---|---|
| 0x00 | 4 B | Id Word (0x58414A47 //XAJG) | Magic identification word. Fixed value 0x58414A47, ASCII Fixed value 0x58414A47, ASCII "XAJG". The PLM uses this to recognise the buffer as an Auth JTAG image. |
| 0x04 | 4 B | Auth JTAG Message Length | Total length of the entire Auth JTAG image, in bytes (0xC80 = 3200 for RSA-4096). Written by Bootgen as sizeof(AuthenticatedJtagRSA-ImageStructure). |
| 0x08 | 4 B | Authentication Header | Authentication Certificate header word identifying the algorithm and hash. For RSA-4096 + SHA-3 it is AUTH_HDR_TELLURIDE_RSA_4096. |
| 0x0C | 4 B | Total PPK Size (includes key alignment length in case, else = actual PPK Size) | PPK size including any trailing alignment padding. For RSA-4096: 1028 + 12 = 1040 bytes. |
| 0x10 | 4 B | Actual PPK Size | Raw PPK size without alignment padding. For RSA-4096: 1028 bytes (Modulus N = 512, R = 512, Exponent = 4). |
| 0x14 | 4 B | Total Auth JTAG Message Signature Size (includes sign alignment length in case, else = actual Hash Block Signature Size) | Auth JTAG Message Signature size including any alignment padding. For RSA-4096: 512 bytes (already 16-byte aligned). |
| 0x18 | 4 B | Actual Auth JTAG Message Signature Size | Raw Auth JTAG Message Signature size without alignment padding. For RSA-4096: 512 bytes. |
| 0x1C | 4 B | Auth Jtag Message Revocation ID | Partition-level revocation ID for this Auth JTAG
image, taken from revoke_id in the
authjtag_config { } BIF block. PLM rejects the
image if the matching eFUSE revoke bit is programmed. Default
0. |
| 0x20 | 4 B | Attributes | Bit-field of feature enables. Bit 0 (user Device
DNA mask) is set when device_dna is provided in the
BIF; other bits reserved. |
| 0x24 | 16 B | Device DNA | 128-bit eFUSE Device DNA the image is bound to. Set from device_dna in the authjtag_config { } BIF block. All-zero when no DNA binding is requested. |
| 0x34 | 4 B | JTAG Timeout | Session timeout in milliseconds, from jtag_timeout in the authjtag_config { } BIF block. A value of 0 disables the timeout (session stays open until reset). |
| 0x38 | 8 B | alignment | Reserved padding (two 32-bit words) ensuring the PPK that follows starts on a 0x40 (64-byte) boundary. Always zero. |
| 0x40 | 1028 B | PPK | Primary Public Key. For RSA-4096: 512-byte modulus N, 512-byte modular reduction R, 4-byte exponent E. Stored in the device-native (re-arranged) byte order. |
| 12 B | PPK Alignment (for 16-byte alignment) Note: PPK
and SPK key and signatures lengths can vary based on
algorithm.
|
Three 32-bit words of padding bringing the next field to a 16-byte boundary (0x450). Always zero. | |
| 4 B | Total SPK Size (includes key alignment length in case, else = actual PPK Size) | SPK size including any trailing alignment padding. For RSA-4096: 1028 + 12 = 1040 bytes. | |
| 4 B | Actual SPK Size | Raw SPK size without alignment padding. For RSA-4096: 1028 bytes. | |
| 4 B | Total SPK Signature Size (includes sign alignment length in case, else = actual Hash Block Signature Size) | SPK Signature size including any alignment padding. For RSA-4096: 512 bytes (already 16-byte aligned). | |
| 4 B | Actual SPK Signature Size | Raw SPK Signature size without alignment padding. For RSA-4096: 512 bytes. | |
| 4 B | SPK Revocation ID | SPK-level revocation ID from spk_revoke_id in the authjtag_config { } BIF block. PLM rejects the image if the matching eFUSE bit is programmed. Default 0. | |
| 12 B | SPK Header Alignment | Three 32-bit words of padding bringing the SPK that follows to a 16-byte boundary (0x470). Always zero. | |
| 1028 B | SPK | Secondary Public Key. Same layout as PPK (512-byte N, 512-byte R, 4-byte E for RSA-4096). Stored in device-native byte order. | |
| 12 B | SPK Alignment | Three 32-bit words of padding bringing the SPK Signature to a 16-byte boundary (0x880). Always zero. | |
| 512 B | SPK Signature | Signature over the SPK header block (fields at offsets 0x450 through 0x87F, that is, from Total SPK Size through SPK Alignment). Generated with the PSK using RSA-PSS / SHA-384. In the HSM flow this is the signature returned for spk.<sha>.. | |
| 0 B | SPK Signature Alignment | Logical placeholder; no padding is required for RSA-4096 because the 512-byte SPK Signature is already 16-byte aligned. For algorithms whose signature size is not a multiple of 16 bytes (for example, ECDSA-P521), this field carries the alignment padding. | |
| 512 B | Auth JTAG Message Signature | Signature over the entire image from offset 0x00 through the end of SPK Signature Alignment (offset 0xA7F for RSA-4096), that is, everything in the image except this signature itself. Generated with the SSK using RSA-PSS / SHA-384. In the HSM flow this is the signature returned for authJtag.<sha> and pointed to by the authjtag_sign attribute in the Stage 2 BIF. |
| Auth Header | |||
|---|---|---|---|
| Bits | Size in bits | Field | Description |
| [31:18] | 14 | Reserved | Reserved |
| [17:16] | 2 | PPK Key Sel |
0: PPK 0 Selection in Efuse 1: PPK 1 Selection in Efuse 2: PPK 2 Selection in Efuse 3: Reserved |
| [15:14] | 2 | Authentication certificate Format | 00: RSASSA-PSS |
| [13:12] | 2 | Authentication certificate Version | 00: Current AC |
| 11 | 1 | PPK Key Type | 0: Hash Key |
| [10:9] | 2 | PPK Key source | 0: eFuse |
| 8 | 1 | SPK Enable | 1: SPK Enabled |
| [7:4] | 4 | HASH Algorithm |
0: SHA2-384 (not supported for TROM) 1: SHA3/384 2 to 16: Reserved for future use |
| [3:0] | 4 | Public Algorithm |
0: Non-Secure 1: RSA4096 2: ECDSAp384 3: ECDSAp521 (only for PLM loadable partitions) 4: LMS with HSS 5: LMS 16 to 6: Reserved for future |
Example
all:
{
pskfile = primary.lms.prv
ppkfile = primary.lms.pub
sskfile = secondary.lms.prv
spkfile = secondary.lms.pub
authjtag_config { revoke_id = 0x23 device_dna = 112233445566778899AABBCCDDEEFF11 jtag_timeout = 0x11223344 }
}
Command: ./bootgen -arch versal_2ve_2vm -image test.bif -authenticatedjtag
lms-sha256 authJtag-lms-sha256.bin -log trace.
Options available for authenticatedjtag: rsa/ ecdsa/ lms-sha256/
lms-shake256/ hss-sha256/ hss-shake256.