ELE message support API

This module contains support for EdgeLock Enclave messages system.

Module with the EdgeLock Enclave messages

EdgeLock Enclave Message.

class spsdk.ele.ele_message.EleMessage

Bases: object

Base class for any EdgeLock Enclave Message.

Message contains a header - tag, command id, size and version.

Class object initialized.

CMD = 0
COMMAND_HEADER_WORDS_COUNT = 1
COMMAND_PAYLOAD_WORDS_COUNT = 0
ELE_MSG_ALIGN = 8
HEADER_FORMAT = '<BBBB'
MAX_COMMAND_DATA_SIZE = 0
MAX_RESPONSE_DATA_SIZE = 0
RESPONSE_HEADER_WORDS_COUNT = 2
RESPONSE_PAYLOAD_WORDS_COUNT = 0
RSP_TAG = 225
TAG = 23
VERSION = 6
property command_address: int

Command address in target memory space.

Return type

int

property command_data: bytes

Command data to be loaded into target memory space.

Return type

bytes

property command_data_address: int

Command data address in target memory space.

Return type

int

property command_data_size: int

Command data address in target memory space.

Return type

int

property command_words_count: int

Command Words count.

Return type

int

decode_response(response)

Decode response from target.

Parameters

response (bytes) – Data of response.

Raises

SPSDKParsingError – Response parse detect some error.

Return type

None

decode_response_data(response_data)

Decode response data from target.

Note

The response data are specific per command.

Parameters

response_data (bytes) – Data of response.

Return type

None

export()

Exports message to final bytes array.

Return type

bytes

Returns

Bytes representation of message object.

static get_msg_crc(payload)

Compute message CRC.

Parameters

payload (bytes) – The input data to compute CRC on them. Must be 4 bytes aligned.

Return type

bytes

Returns

4 bytes of CRC in little endian format.

property has_command_data: bool

Check if command has additional data.

Return type

bool

property has_response_data: bool

Check if response has additional data.

Return type

bool

header_export()

Exports message header to bytes.

Return type

bytes

Returns

Bytes representation of message header.

info()

Print information including live data.

Return type

str

Returns

Information about the message.

property response_address: int

Response address in target memory space.

Return type

int

property response_data_address: int

Response data address in target memory space.

Return type

int

property response_data_size: int

Response data address in target memory space.

Return type

int

response_status()

Print the response status information.

Return type

str

Returns

String with response status.

property response_words_count: int

Response Words count.

Return type

int

set_buffer_params(buff_addr, buff_size)

Set the communication buffer parameters to allow command update addresses inside command payload.

Parameters
  • buff_addr (int) – Real address of communication buffer in target memory space

  • buff_size (int) – Size of communication buffer in target memory space

Return type

None

property status_string: str

Get status in readable string format.

Return type

str

validate()

Validate message.

Return type

None

validate_buffer_params()

Validate communication buffer parameters.

raises SPSDKValueError: Invalid buffer parameters.

Return type

None

class spsdk.ele.ele_message.EleMessageEleFwAuthenticate(ele_fw_address)

Bases: spsdk.ele.ele_message.EleMessage

Ele firmware authenticate request.

Constructor.

Be aware to have ELE FW in accessible memory for ROM, and do not use the RAM memory used to communicate with ELE.

Parameters

ele_fw_address (int) – Address in target memory with ele firmware.

CMD = 2
COMMAND_PAYLOAD_WORDS_COUNT = 3
export()

Exports message to final bytes array.

Return type

bytes

Returns

Bytes representation of message object.

class spsdk.ele.ele_message.EleMessageGenerateKeyBLob(key_identifier, algorithm, key)

Bases: spsdk.ele.ele_message.EleMessage

ELE Message Generate KeyBlob.

Constructor of Generate Key Blob class.

Parameters
  • key_identifier (int) – ID of key

  • algorithm (int) – Select supported algorithm

  • key (bytes) – Key to be wrapped

CMD = 175
COMMAND_PAYLOAD_WORDS_COUNT = 7
KEYBLOB_NAME = 'Unknown'
KEYBLOB_TAG = 129
KEYBLOB_VERSION = 0
MAX_RESPONSE_DATA_SIZE = 512
SUPPORTED_ALGORITHMS: Dict[int, List[int]] = {}
decode_response_data(response_data)

Decode response data from target.

Note

The response data are specific per command.

Parameters

response_data (bytes) – Data of response.

Raises

SPSDKParsingError – Invalid response detected.

Return type

None

export()

Exports message to final bytes array.

Return type

bytes

Returns

Bytes representation of message object.

classmethod get_supported_algorithms()

Get the list of supported algorithms.

Return type

List[str]

Returns

List of supported algorithm names.

classmethod get_supported_key_sizes()

Get table with supported key sizes per algorithm.

Return type

str

Returns

Table with supported key size in text.

info()

Print information including live data.

Return type

str

Returns

Information about the message.

validate()

Validate generate keyblob message data.

Raises

SPSDKValueError – Invalid used key size or encryption algorithm

Return type

None

class spsdk.ele.ele_message.EleMessageGenerateKeyBLobDek(key_identifier, algorithm, key)

Bases: spsdk.ele.ele_message.EleMessageGenerateKeyBLob

ELE Message Generate DEK KeyBlob.

Constructor of Generate Key Blob class.

Parameters
  • key_identifier (int) – ID of key

  • algorithm (int) – Select supported algorithm

  • key (bytes) – Key to be wrapped

KEYBLOB_NAME = 'DEK'
SUPPORTED_ALGORITHMS: Dict[int, List[int]] = {3: [128, 192, 256], 43: [128]}
property command_data: bytes

Command data to be loaded into target memory space.

Return type

bytes

class spsdk.ele.ele_message.EleMessageGenerateKeyBLobIee(key_identifier, algorithm, key, ctr_mode, aes_counter, page_offset, region_number, bypass=False, locked=False)

Bases: spsdk.ele.ele_message.EleMessageGenerateKeyBLob

ELE Message Generate IEE KeyBlob.

Constructor of generate IEE keyblob class.

Parameters
  • key_identifier (int) – ID of key

  • algorithm (int) – Used algorithm

  • key (bytes) – IEE key

  • ctr_mode (int) – In case of AES CTR algorithm, the CTR mode must be selected

  • aes_counter (bytes) – AES counter in case of AES CTR algorithm

  • page_offset (int) – IEE page offset

  • region_number (int) – Region number

  • bypass (bool) – Encryption bypass flag, defaults to False

  • locked (bool) – Locked flag, defaults to False

KEYBLOB_NAME = 'IEE'
SUPPORTED_ALGORITHMS: Dict[int, List[int]] = {4: [128, 256], 55: [256, 512]}
property command_data: bytes

Command data to be loaded into target memory space.

Return type

bytes

info()

Print information including live data.

Return type

str

Returns

Information about the message.

class spsdk.ele.ele_message.EleMessageGenerateKeyBLobOtfad(key_identifier, key, aes_counter, start_address, end_address, read_only=True, decryption_enabled=True, configuration_valid=True)

Bases: spsdk.ele.ele_message.EleMessageGenerateKeyBLob

ELE Message Generate OTFAD KeyBlob.

Constructor of generate OTFAD keyblob class.

Parameters
  • key_identifier (int) – ID of Key

  • key (bytes) – OTFAD key

  • aes_counter (bytes) – AES counter value

  • start_address (int) – Start address in memory to be encrypted

  • end_address (int) – End address in memory to be encrypted

  • read_only (bool) – Read only flag, defaults to True

  • decryption_enabled (bool) – Decryption enable flag, defaults to True

  • configuration_valid (bool) – Configuration valid flag, defaults to True

KEYBLOB_NAME = 'OTFAD'
SUPPORTED_ALGORITHMS: Dict[int, List[int]] = {4: [128]}
property command_data: bytes

Command data to be loaded into target memory space.

Return type

bytes

info()

Print information including live data.

Return type

str

Returns

Information about the message.

validate()

Validate generate OTFAD keyblob.

Return type

None

class spsdk.ele.ele_message.EleMessageGetFwStatus

Bases: spsdk.ele.ele_message.EleMessage

ELE Message Get FW status.

Class object initialized.

CMD = 197
RESPONSE_PAYLOAD_WORDS_COUNT = 1
decode_response(response)

Decode response from target.

Parameters

response (bytes) – Data of response.

Raises

SPSDKParsingError – Response parse detect some error.

Return type

None

response_info()

Print specific information of ELE.

Return type

str

Returns

Information about the ELE.

class spsdk.ele.ele_message.EleMessageGetFwVersion

Bases: spsdk.ele.ele_message.EleMessage

ELE Message Get FW version.

Class object initialized.

CMD = 157
RESPONSE_PAYLOAD_WORDS_COUNT = 2
decode_response(response)

Decode response from target.

Parameters

response (bytes) – Data of response.

Raises

SPSDKParsingError – Response parse detect some error.

Return type

None

response_info()

Print specific information of ELE.

Return type

str

Returns

Information about the ELE.

class spsdk.ele.ele_message.EleMessageGetInfo

Bases: spsdk.ele.ele_message.EleMessage

ELE Message Get Info.

Class object initialized.

CMD = 218
COMMAND_PAYLOAD_WORDS_COUNT = 3
MAX_RESPONSE_DATA_SIZE = 256
decode_response_data(response_data)

Decode response data from target.

Note

The response data are specific per command.

Parameters

response_data (bytes) – Data of response.

Return type

None

export()

Exports message to final bytes array.

Return type

bytes

Returns

Bytes representation of message object.

response_info()

Print specific information of ELE.

Return type

str

Returns

Information about the ELE.

class spsdk.ele.ele_message.EleMessageGetTrngState

Bases: spsdk.ele.ele_message.EleMessage

ELE Message Get True Random Generator State.

Class object initialized.

CMD = 163
RESPONSE_PAYLOAD_WORDS_COUNT = 1
decode_response(response)

Decode response from target.

Parameters

response (bytes) – Data of response.

Raises

SPSDKParsingError – Response parse detect some error.

Return type

None

response_info()

Print specific information of ELE.

Return type

str

Returns

Information about the TRNG.

class spsdk.ele.ele_message.EleMessagePing

Bases: spsdk.ele.ele_message.EleMessage

ELE Message Ping.

Class object initialized.

CMD = 1
class spsdk.ele.ele_message.EleMessageReadCommonFuse(index)

Bases: spsdk.ele.ele_message.EleMessage

ELE Message Read common fuse.

Constructor.

Read common fuse.

Parameters

index (int) – Fuse ID.

CMD = 151
COMMAND_PAYLOAD_WORDS_COUNT = 1
RESPONSE_PAYLOAD_WORDS_COUNT = 1
decode_response(response)

Decode response from target.

Parameters

response (bytes) – Data of response.

Raises

SPSDKParsingError – Response parse detect some error.

Return type

None

export()

Exports message to final bytes array.

Return type

bytes

Returns

Bytes representation of message object.

response_info()

Print fuse value.

Return type

str

Returns

Read fuse value.

class spsdk.ele.ele_message.EleMessageReadShadowFuse(index)

Bases: spsdk.ele.ele_message.EleMessageReadCommonFuse

ELE Message Read shadow fuse.

Constructor.

Read common fuse.

Parameters

index (int) – Fuse ID.

CMD = 243
export()

Exports message to final bytes array.

Return type

bytes

Returns

Bytes representation of message object.

class spsdk.ele.ele_message.EleMessageReleaseContainer

Bases: spsdk.ele.ele_message.EleMessage

ELE Message Release container.

Class object initialized.

CMD = 137
class spsdk.ele.ele_message.EleMessageReset

Bases: spsdk.ele.ele_message.EleMessage

ELE Message Reset.

Class object initialized.

CMD = 199
RESPONSE_HEADER_WORDS_COUNT = 0
class spsdk.ele.ele_message.EleMessageSigned(signed_msg)

Bases: spsdk.ele.ele_message.EleMessage

ELE Message Signed.

Class object initialized.

Parameters

signed_msg (bytes) – Signed message container.

COMMAND_PAYLOAD_WORDS_COUNT = 2
property command_data: bytes

Command data to be loaded into target memory space.

Return type

bytes

export()

Exports message to final bytes array.

Return type

bytes

Returns

Bytes representation of message object.

info()

Print information including live data.

Return type

str

Returns

Information about the message.

class spsdk.ele.ele_message.EleMessageStartTrng

Bases: spsdk.ele.ele_message.EleMessage

ELE Message Start True Random Generator.

Class object initialized.

CMD = 163
class spsdk.ele.ele_message.EleMessageWriteFuse(bit_position, bit_length, lock, payload)

Bases: spsdk.ele.ele_message.EleMessage

Write Fuse request.

Constructor.

This command allows to write to the fuses. OEM Fuses are accessible depending on the chip lifecycle.

Parameters
  • bit_position (int) – Fuse identifier expressed as its position in bit in the fuse map.

  • bit_length (int) – Number of bits to be written.

  • lock (bool) – Write lock requirement. When set to 1, fuse words are locked. When unset, no write lock is done.

  • payload (int) – Data to be written

CMD = 214
COMMAND_PAYLOAD_WORDS_COUNT = 2
export()

Exports message to final bytes array.

Return type

bytes

Returns

Bytes representation of message object.

class spsdk.ele.ele_message.EleMessageWriteShadowFuse(index, value)

Bases: spsdk.ele.ele_message.EleMessage

Write shadow fuse request.

Constructor.

This command allows to write to the shadow fuses.

Parameters
  • index (int) – Fuse identifier expressed as its position in bit in the fuse map.

  • value (int) – Data to be written.

CMD = 242
COMMAND_PAYLOAD_WORDS_COUNT = 2
export()

Exports message to final bytes array.

Return type

bytes

Returns

Bytes representation of message object.

Module with the EdgeLock Enclave message handler with mBoot

EdgeLock Enclave Message handler.

class spsdk.ele.ele_comm.EleMessageHandler(mboot, family, revision='latest')

Bases: object

EdgeLock Enclave Message Handler over MCUBoot.

This class can send the ELE message into target over mBoot and decode the response.

Class object initialized.

Parameters
  • mboot (McuBoot) – mBoot device.

  • family (str) – Target family name.

  • revision (str) – Target revision, default is use ‘latest’ revision.

static get_supported_families()

Get list of supported target families.

Return type

List[str]

Returns

List of supported families.

send_message(msg)

Send message and receive response.

Parameters

msg (EleMessage) – EdgeLock Enclave message

Raises
  • SPSDKError – Invalid response status detected.

  • SPSDKLengthError – Invalid read back length detected.

Return type

None

Module with the EdgeLock Enclave message constants

EdgeLock Enclave Message constants.

class spsdk.ele.ele_constants.EleCsalState

Bases: spsdk.utils.easy_enum.Enum

ELE CSAL state.

ELE_CSAL_ERROR = 3
ELE_CSAL_NOT_READY = 0
ELE_CSAL_ON_GOING = 1
ELE_CSAL_READY = 2
class spsdk.ele.ele_constants.EleFwStatus

Bases: spsdk.utils.easy_enum.Enum

ELE Firmware status.

ELE_FW_STATUS_IN_PLACE = 1
ELE_FW_STATUS_NOT_IN_PLACE = 0
class spsdk.ele.ele_constants.EleTrngState

Bases: spsdk.utils.easy_enum.Enum

ELE TRNG state.

ELE_TRNG_ERROR = 4
ELE_TRNG_GENERATING_ENTROPY = 1
ELE_TRNG_PROGRAM = 1
ELE_TRNG_READY = 3
class spsdk.ele.ele_constants.KeyBlobEncryptionAlgorithm

Bases: spsdk.utils.easy_enum.Enum

ELE KeyBlob encryption algorithms.

AES_CBC = 3
AES_CTR = 4
AES_XTS = 55
SM4_CBC = 43
class spsdk.ele.ele_constants.KeyBlobEncryptionIeeCtrModes

Bases: spsdk.utils.easy_enum.Enum

IEE Keyblob mode attributes.

AesCTRWAddress = 2
AesCTRWOAddress = 3
AesCTRkeystream = 4
class spsdk.ele.ele_constants.LifeCycle

Bases: spsdk.utils.easy_enum.Enum

ELE life cycles.

LC_BLANK = 2
LC_BRICKED = 1024
LC_FAB = 4
LC_NXP_FR = 256
LC_NXP_PROV = 8
LC_OEM_CLSD = 64
LC_OEM_FR = 128
LC_OEM_LCKD = 512
LC_OEM_OPEN = 16
LC_OEM_SWC = 32
class spsdk.ele.ele_constants.MessageIDs

Bases: spsdk.utils.easy_enum.Enum

ELE Messages ID.

ELE_FW_AUTH_REQ = 2
ELE_RELEASE_CONTAINER_REQ = 137
GENERATE_KEY_BLOB_REQ = 175
GET_FW_STATUS_REQ = 197
GET_FW_VERSION_REQ = 157
GET_INFO_REQ = 218
GET_TRNG_STATE_REQ = 163
PING_REQ = 1
READ_COMMON_FUSE = 151
READ_SHADOW_FUSE = 243
RESET_REQ = 199
RETURN_LIFECYCLE_UPDATE_REQ = 160
START_RNG_REQ = 163
WRITE_FUSE = 214
WRITE_SEC_FUSE_REQ = 145
WRITE_SHADOW_FUSE = 242
class spsdk.ele.ele_constants.ResponseIndication

Bases: spsdk.utils.easy_enum.Enum

ELE Message Response indication.

ELE_ABORT_IND = 255
ELE_APC_ALREADY_ENABLED_FAILURE_IND = 203
ELE_AUTH_SKIPPED_OR_FAILED_FAILURE_IND = 187
ELE_BAD_CERTIFICATE_FAILURE_IND = 252
ELE_BAD_CONTAINER_FAILURE_IND = 247
ELE_BAD_FUSE_ID_FAILURE_IND = 246
ELE_BAD_HASH_FAILURE_IND = 241
ELE_BAD_ID_FAILURE_IND = 191
ELE_BAD_IMAGE_ADDR_FAILURE_IND = 196
ELE_BAD_IMAGE_NUM_FAILURE_IND = 195
ELE_BAD_IMAGE_PARAM_FAILURE_IND = 197
ELE_BAD_IMAGE_TYPE_FAILURE_IND = 198
ELE_BAD_KEY_HASH_FAILURE_IND = 250
ELE_BAD_MONOTONIC_COUNTER_FAILURE_IND = 254
ELE_BAD_PAYLOAD_FAILURE_IND = 177
ELE_BAD_SIGNATURE_FAILURE_IND = 240
ELE_BAD_SRK_SET_FAILURE_IND = 239
ELE_BAD_UID_FAILURE_IND = 253
ELE_BAD_VALUE_FAILURE_IND = 245
ELE_BAD_VERSION_FAILURE_IND = 248
ELE_CORRUPTED_SRK_FAILURE_IND = 208
ELE_CRC_ERROR_IND = 185
ELE_CSTM_FAILURE_IND = 207
ELE_DECRYPTION_FAILURE_IND = 169
ELE_DISABLED_FEATURE_FAILURE_IND = 182
ELE_DMA_FAILURE_IND = 181
ELE_ENCRYPTION_FAILURE_IND = 168
ELE_FW_PING_FAILURE_IND = 26
ELE_INCONSISTENT_PAR_FAILURE_IND = 188
ELE_INVALID_KEY_FAILURE_IND = 249
ELE_INVALID_LIFECYCLE_IND = 242
ELE_INVALID_MESSAGE_FAILURE_IND = 244
ELE_INVALID_OPERATION_FAILURE_IND = 192
ELE_LOCKED_REG_FAILURE_IND = 190
ELE_MSG_TRUNCATED_IND = 194
ELE_MUST_ATTEST_FAILURE_IND = 183
ELE_MUST_SIGNED_FAILURE_IND = 224
ELE_NON_SECURE_STATE_FAILURE_IND = 193
ELE_NO_AUTHENTICATION_FAILURE_IND = 238
ELE_NO_VALID_CONTAINER_FAILURE_IND = 251
ELE_OLD_VERSION_FAILURE_IND = 206
ELE_OTP_INVALID_IDX_FAILURE_IND = 173
ELE_OTP_LOCKED_FAILURE_IND = 171
ELE_OTP_PROGFAIL_FAILURE_IND = 170
ELE_OUT_OF_MEMORY_IND = 209
ELE_PERMISSION_DENIED_FAILURE_IND = 243
ELE_RNG_INST_FAILURE_IND = 189
ELE_RNG_NOT_STARTED_FAILURE_IND = 184
ELE_ROM_PING_FAILURE_IND = 10
ELE_RTC_ALREADY_ENABLED_FAILURE_IND = 204
ELE_TIME_OUT_FAILURE_IND = 176
ELE_UNALIGNED_PAYLOAD_FAILURE_IND = 166
ELE_WRONG_ADDRESS_FAILURE_IND = 180
ELE_WRONG_BOOT_MODE_FAILURE_IND = 205
ELE_WRONG_SIZE_FAILURE_IND = 167
class spsdk.ele.ele_constants.ResponseStatus

Bases: spsdk.utils.easy_enum.Enum

ELE Message Response status.

ELE_FAILURE_IND = 41
ELE_SUCCESS_IND = 214