Key Manager HWIP Technical Specification
Overview
This document specifies the functionality of the OpenTitan key manager.
Features
- One-way key and identity (working) state hidden from software.
- Version controlled identity and key generation.
- Key generation for both software consumption and hardware sideload.
- Support for DICE open profile.
Description
The key manager implements the hardware component of the identities and root keys strategy of OpenTitan.
It enables the system to shield critical assets from software directly and provides a simple model for software to use derived key and identity outputs.
Theory of Operation
Key manager behavior can be summarized by the functional model below.
In the diagram, the red boxes represent the working state and the associated internal key, the black ovals represent derivation functions, the green squares represent software inputs, and the remaining green / purple shapes represent outputs to both software and hardware.
In OpenTitan, the derivation method selected is KMAC. Each valid operation involves a KMAC invocation using the key manager internal key and other HW / SW supplied inputs as data. While KMAC can generate outputs of arbitrary length, this design fixes the size to 256b.
Effectively, the key manager behavior is divided into 3 classes of functions
-
Key manager state advancement
- The results are never visible to software and not directly usable by any software controlled hardware
-
Output key generation
- Results can be visible to software or consumed by hardware (sideload)
-
Identity / seed generation
- Results are always visible to software and used for asymmetric cryptography
In general, the key generation and seed generation functions are identical. They differ only in how software chooses to deploy the outputs.
For clarity, all commands issued to the key manager by software are referred to as operations. Transactions refer to the interaction between key manager and KMAC if a valid operation is issued.
Key Manager State
The key manager working state (red boxes in the functional model) represents both the current state of the key manager as well as its related internal key.
Each valid state (Initialized
/ CreatorRootKey
/ OwnerIntermediateKey
/ OwnerRootKey
), supplies its secret material as the “key” input to a KMAC operation.
Invalid states, such as Reset / Disabled
on the other hand, either do not honor operation requests, or supplies random data when invoked.
The data input is dependent on each state, see below.
Reset
To begin operation, the state must first transition to Initialize.
The advancement from Reset
to Initialized
is irreversible during the current power cycle.
Until the initialize command is invoked, the key manager rejects all other software commands.
Initialized
When transitioning from Reset
to Initialized
, random values obtained from the entropy source are used to populate the internal key first.
Then the root key stored in OTP, if valid, is loaded into the internal key.
This ensures that the hamming delta from the previous value to the next value is non-deterministic.
The advancement from Initialized
to CreatorRootKey
is irreversible during the current power cycle.
CreatorRootKey
CreatorRootKey
is the first operational state of the key manager.
When transitioning from Initialized
to this state, a KMAC operation is invoked using the RootKey
as the key (from OTP), and the remaining inputs as data.
The output of the KMAC operation replaces the previous value of the internal key, and the new value becomes the CreatorRootKey
.
Inputs to the derivation function are:
DiversificationKey
: Secret seed from flashHealthMeasurement
: Current life cycle state- To avoid a state value corresponding to each life cycle state, the raw life cycle value is not used.
- Instead, certain life cycle states diversify the same way.
- Please see the life cycle controller for more details.
DeviceIdentifier
: Unique device identification.HardwareRevisionSecret
: A global design time constant.
Other than the DiversificationKey
and HardwareRevisionSecret
, none of the values above are considered secret.
Once the CreatorRootKey
is reached, software can request key manager to advance state, generate output key or generate output identity.
The key used for all 3 functions is the CreatorRootKey
.
The advancement from CreatorRootKey
to the OwnerIntermediateKey
is irreversible during the current power cycle.
While in the CreatorRootKey state, the key from OTP is continuously captured and sensed. This provides some security benefit as the key is constantly background checked by the OTP. When an operation begins, the sampling is stopped. If at the conclusion of the operation the key manager stays in the same state, sampling begins again. If on the other hand key manager transitions to another state, OTP sampling is stopped until reset.
OwnerIntermediateKey
This is the second operational state of the key manager.
This state is reached through another invocation of the KMAC operation using the previous internal key, and other inputs as data.
The output of the KMAC operation replaces the previous value of the internal key, and the new value becomes the OwnerIntermediateKey
.
The relevant data inputs are:
OwnerRootSecret
: Secret seed from flash.SoftwareBinding
: A software programmed value representing the first owner code to be run.
Once the OwnerIntermediateKey
is created, software can request key manager to advance state, generate output key or generate output identity.
The key used for all 3 functions is the OwnerIntermediateKey
.
The advancement from OwnerIntermediateKey
to the OwnerRootKey
is irreversible during the current power cycle.
OwnerRootKey
This is the last operational state of the key manager.
This state is reached through another invocation of the KMAC operation using the previous internal key, and other inputs as data.
The output of the KMAC operation replaces the previous value of the internal key, and the new value becomes the OwnerRootKey
.
The relevant inputs are:
SoftwareBinding
- A software programmed value representing the owner kernel code.
Once the OwnerRootKey
is created, software can request key manager to advance state, generate output key or generate output identity.
An advance command invoked from OwnerRootKey
state simply moves the state to Disabled
.
The generate output and generate identity functions use OwnerRootKey
as the KMAC key.
The advancement from OwnerRootKey
to the Disabled
is irreversible during the current power cycle.
Disabled
Disabled
is a state where the key manager is no longer operational.
Upon Disabled
entry, the internal key is updated with KMAC computed random values; however, previously generated sideload key slots and software key slots are preserved.
This allows the software to keep the last valid keys while preventing the system from further advancing the valid key.
When advance and generate calls are invoked from this state, the outputs and keys are indiscriminately updated with randomly computed values. Key manager enters disabled state based on direct invocation by software:
- Advance from
OwnerRootKey
- Disable operation
Invalid
Invalid
state is entered whenever key manager is deactivated through the life cycle connection or when an operation encounters a fault .
Upon Invalid
entry, the internal key, the sideload key slots and the software keys are all wiped with entropy directly.
Invalid Entry Wiping
Since the life cycle controller can deactivate the key manager at any time, the key manager attempts to gracefully handle the wiping process. When deactivated, the key manager immediately begins wiping all keys (internal key, hardware sideload key, software key) with entropy. However, if an operation was already ongoing, the key manager waits for the operation to complete gracefully before transitioning to invalid state.
While waiting for the operation to complete, the key manager continuously wipes all keys with entropy.
Invalid and Disabled State
Invalid
and Disabled
states are functionally very similar.
The main difference between the two is “how” the states were reached and the entry behavior.
Disabled
state is reached through intentional software commands where the sideload key slots and software key are not wiped, while Invalid
state is reached through life cycle deactivation or operational faults where the internal key, sideload key slots and software key are wiped.
This also means that only Invalid
is a terminal state.
If after entering Disabled
life cycle is deactivated or a fault is encountered, the same invalid entry procedure is followed to bring the system to a terminal Invalid
state.
If ever multiple conditions collide (a fault is detected at the same time software issues disable command), the Invalid
entry path always takes precedence.
Life Cycle Connection
The function of the key manager is directly managed by the life cycle controller.
Until the life cycle controller activates the key manager, the key manager does not accept any software commands. Once the key manager is activated by the life cycle controller, it is then allowed to transition to the various states previously described.
When the life cycle controller deactivates the key manager, the key manager transitions to the Invalid
state.
Commands in Each State
During each state, there are 3 valid commands software can issue:
- Advance state
- Output generation
- Identity generation
The software is able to select a command and trigger the key manager FSM to process one of the commands. If a command is valid during the current working state, it is processed and acknowledged when complete.
If a command is invalid, the behavior depends on the current state.
If the current state is Reset
, the invalid command is immediately rejected as the key manager FSM has not yet been initialized.
If the current state is any other state, the key manager sequences random, dummy data to the KMAC module, but does not update internal key, sideload key slots or software keys.
For each valid command, a set of inputs are selected and sequenced to the KMAC module.
During Disable
and Invalid
states, the internal key, sideload key slots and software key are updated based on the input commands as with normal states.
There are however a few differences:
- The updates are made regardless of any error status to ensure their values are further scrambled.
- Instead of normal input data, random data is selected for KMAC processing.
- All operations return an invalid operations error, in addition to any other error that might naturally occur.
Generating Output Key
The generate output command is composed of 2 options
- Generate output key for software, referred to as
generate-output-sw
- Generate output key for hardware, referred to as
generate-output-hw
The hardware option is meant specifically for symmetric side load use cases. When this option is issued, the output of the KMAC invocation is not stored in software visible registers, but instead in hardware registers that directly output to symmetric primitives such as AES, KMAC and OTBN.
KMAC Operations
All invoked KMAC operations expect the key in two shares.
This means the internal key, even though functionally 256b, is maintained as 512b.
The KMAC processed outputs are also in 2-shares.
For generate-output-sw
commands, software is responsible for determining whether the key manager output should be preserved in shares or combined.
Errors, Faults and Alerts
The key manager has two overall categories of errors:
- Recoverable errors
- Fatal errors
Recoverable errors are those likely to have been introduced by software and not fatal to the key manager or the system. Fatal errors are logically impossible errors that have a high likelihood of being a fault and thus fatal.
Each category of error can be further divided into two:
- Synchronous errors
- Asynchronous errors
Synchronous errors happen only during a key manager operation. Asynchronous errors can happen at any time.
Given the above, we have 4 total categories of errors:
- Synchronous recoverable errors
- Asynchronous recoverable errors
- Synchronous fatal errors
- Asynchronous fatal errors
All recoverable errors (synchronous and asynchronous) are captured in ERR_CODE. All fatal errors (synchronous and asynchronous) are captured in FAULT_STATUS.
Recoverable errors cause a recoverable alert to be sent from the key manager. Fatal errors cause a fatal alert to be sent from the key manager.
Below, the behavior of each category and its constituent errors are described in detail.
Synchronous Recoverable Errors
These errors can only happen when a key manager operation is invoked and are typically associated with incorrect software programming. At the end of the operation, key manager reports whether there was an error in ERR_CODE and sends a recoverable alert.
- ERR_CODE.INVALID_OP Software issued an invalid operation given the current key manager state.
- ERR_CODE.INVALID_KMAC_INPUT Software supplied invalid input (for example a key greater than the max version) for a key manager operation.
Asynchronous Recoverable Errors
These errors can happen at any time regardless of whether there is a key manager operation. The error is reported in ERR_CODE and the key manager sends a recoverable alert.
- ERR_CODE.INVALID_SHADOW_UPDATE Software performed an invalid sequence while trying to update a key manager shadow register.
Synchronous Fatal Errors
These errors can only happen when a key manager operation is invoked and receives malformed operation results that are not logically possible. At the end of the operation, key manager reports whether there was an error in FAULT_STATUS and continuously sends fatal alerts .
Note, these errors are synchronous from the perspective of the key manager, but they may be asynchronous from the perspective of another module.
Asynchronous Fatal Errors
These errors can happen at any time regardless of whether there is a key manager operation. The error is reported in FAULT_STATUS and the key manager continuously sends fatal alerts.
Faults and Operational Faults
When a fatal error is encountered, the key manager transitions to the Invalid
state.
The following are a few examples of when the error occurs and how the key manager behaves.
Example 1: Fault During Operation
The key manager is running a generate operation and a non-onehot command was observed by the KMAC interface.
Since the non-onehot condition is a fault, it is reflected in
FAULT_STATUS and a fatal alert is generated.
The key manager transitions to Invalid
state, wipes internal storage and reports an invalid operation in
ERR_CODE.INVALID_OP.
Example 2: Fault During Idle
The key manager is NOT running an operation and is idle.
During this time, a fault is observed on the regfile (shadow storage error) and FSM (control FSM integrity error).
The faults are reflected in
FAULT_STATUS.
The key manager transitions to Invalid
state, wipes internal storage but does not report an invalid operation.
Example 3: Operation after Fault Detection
Continuing from the example above, the key manager now begins an operation.
Since the key manager is already in Invalid
state, it does not wipe internal storage and reports an invalid operation in
ERR_CODE.INVALID_OP.
Additional Details on Invalid Input
What is considered invalid input changes based on current state and operation.
When an advance operation is invoked:
- The internal key is checked for all 0’s and all 1’s.
- During
Initialized
state, creator seed, device ID and health state data is checked for all 0’s and all 1’s. - During
CreatorRootKey
state, the owner seed is checked for all 0’s and all 1’s. - During all other states, nothing is explicitly checked.
When a generate output key operation is invoked:
- The internal key is checked for all 0’s and all 1’s.
- The key version is less than or equal to the max key version.
When a generate output identity is invoked:
- The internal key is checked for all 0’s and all 1’s.
Invalid Operation
The table below enumerates the legal operations in a given state.
When an illegal operation is supplied, the error code is updated and the operation is flagged as done with error
.
Current State | Legal Operations |
---|---|
Reset | Advance |
Initialized | Disable / Advance |
CreatorRootKey | Disable / Advance / Generate |
OwnerIntKey | Disable / Advance / Generate |
OwnerRootKey | Disable / Advance / Generate |
Invalid/Disabled | None |
- All operations invoked during
Invalid
andDisabled
states lead to invalid operation error.
Error Response
In addition to alerts and interrupts, key manager may also update the internal key and relevant outputs based on current state. See the tables below for an enumeration.
Current State | Invalid States | Invalid Output | Invalid Input | Invalid Operation |
---|---|---|---|---|
Reset | Not Possible | Not Possible | Not possible | Not updated |
Initialized | Updated | Updated | Not updated | Not updated |
CreatorRootKey | Updated | Updated | Not updated | Not possible |
OwnerIntKey | Updated | Updated | Not updated | Not possible |
OwnerRootKey | Updated | Updated | Not updated | Not possible |
Invalid/Disabled | Updated | Updated | Updated | Updated |
- During
Reset
state, the KMAC module is never invoked, thus certain errors are not possible. - During
Initialized
,CreatorRootKey
,OwnerIntermediateKey
andOwnerRootKey
states, a fault error causes the relevant key / outputs to be updated; however an operational error does not. - During
Invalid
andDisabled
states, the relevant key / outputs are updated regardless of the error. - Only the relevant collateral is updated -> ie, advance / disable command leads to working key update, and generate command leads to software or sideload key update.
- During
Disabled
state, if life cycle deactivation or an operational fault is encountered, the key manager transitions toInvalid
state, see here
DICE Support
The key manager supports DICE open profile. Specifically, the open profile has two compound device identifiers.
- Attestation CDI
- Sealing CDI
The attestation CDI is used to attest hardware and software configuration and is thus expected to change between updates. The sealing CDI on the other hand, is used to attest the authority of the hardware and software configuration. The sealing version is thus expected to remain stable across software updates.
To support these features, the key manager maintains two versions of the working state and associated internal key. There is one version for attestation and one version for sealing.
The main difference between the two CDIs is the different usage of SW_BINDING
.
For the Sealing CDI, the
SEALING_SW_BINDING is used, all other inputs are the same.
For the Attestation CDI, the
ATTEST_SW_BINDING is used, all other inputs are the same.
When invoking an advance operation, both versions are advanced, one after the other. There are thus two KMAC transactions. The first trasnaction uses the Sealing CDI internal key, SEALING_SW_BINDING and other common inputs. The second transaction uses the Attestation CDI internal key, ATTEST_SW_BINDING and other common inputs.
When invoking a generate operation, the software must specify which CDI to use as the source key. This is done through CONTROL.CDI_SEL. Unlike the advance operation, there is only 1 KMAC transaction since we pick a specific CDI to operate.
When disabling, both versions are disabled together.
Block Diagram
The following is a high level block diagram of the key manager.
Design Details
Key manager is primarily composed of two components:
- keymgr_ctrl
- keymgr_kmac_if
Key Manager Control
The key manager control block manages the working state, sideload key updates, as well as what commands are valid in each state.
It also handles the life cycle keymgr_en
input, which deactivates the entire key manager function in the event of an escalation.
KMAC Interface Control
The KMAC interface control represents the bulk of key manager logic. Based on input from key manager control, this module selects the inputs for each given command and sequences the data to KMAC.
The KMAC interface works on a simple valid / ready
protocol.
When there is data to send, the KMAC interface sends out a valid
and keeps it active.
When the destination accepts the transaction, the ready
is asserted.
Note just like with any bus interface, the ready
may already be asserted when valid
asserts, or it may assert some time later, there are no restrictions.
Since the data to be sent is always pre-buffered in key manager, the valid, once asserted, does not de-assert until the entire transaction is complete.
The data interface itself is 64b wide. However, there may not always be 64b multiple aligned data to be sent. In these situations, the last transfer beat sent to KMAC has a byte mask / strobe attached. The byte mask indicates on the last beat which bytes are actually valid, and which are not. Not beats prior to the last always have fully asserted byte masks.
Once KMAC receives all the required data and the last indication, it begins processing the data into a digest.
This process may take an arbitrary number of cycles.
When this process is complete, a done
indication pulse is sent back with the digest.
Note, the acceptance of done
has no back-pressure and keymgr
must accept it within one cycle.
See diagram below for an example transfer:
Side Load Keys
There are three sideload keys.
One for AES, one for KMAC and one for OTBN.
When a sideload key is generated successfully through the generate-output-hw
command, the derived data is loaded into key storage registers.
There is a set of storage registers for each destination.
The KMAC key however is further overloaded as it is the main derivation mechanism for key manager internal stage. The KMAC key thus has two possible outputs, one is the sideload key, and the other is internal state key.
When a valid operation is called, the internal state key is sent over the KMAC key. During all other times, the sideloaded value is presented. Note, there may not be a valid key in the sideload register if it has been cleared or never generated. The sideload key can be overwritten with another generate command, or cleared with entropy through SIDELOAD_CLEAR.
The clearing can be done one slot at a time, or all at once.
The following diagram illustrates an example when there is no valid key in the KMAC sideload registers and an operation is called. During the duration of the operation, the key is valid and shows the internal key state. Once the operation is complete, it falls back to the sideload key state, which is invalid in this case.
The following diagram illustrates an example when there is a valid key in the KMAC sideload registers and an operation is called. During the duration of the operation, the key is valid and shows the internal key state. Once the operation is complete, it falls back to the sideload key state, which is valid and contains a different value.
Software Binding
The identities flow employs an idea called software binding to ensure that a particular key derivation scheme is only reproducible for a given software configuration. The binding is created through the secure boot flow, where each stage sets the binding used for the next verified stage before advancing to it. The software binding is used during the following state transitions only:
Initialized
toCreatorRootKey
CreatorRootKey
toOwnerIntermedaiteKey
OwnerIntermediateKey
toOwnerRootKey
In order to save on storage and not have a duplicate copy per stage, the software binding registers SOFTWARE_BINDING are shared between key manager stages.
Software sets the appropriate values and locks it by clearing
SOFT_BINDING_EN.
When later a successful advance
call is made, the key manager then unlocks by setting
SOFT_BINDING_EN to 1.
An unsuccessful advance call (errors) does not unlock the binding.
This allows the next stage of software to re-use the binding registers.
Custom Security Checks
The keymgr has several custom security checks.
One-Hot Command Check
The command received by the KMAC interface must always be in one-hot form and unchanging during the life time of a KMAC transaction. If this check fails, an error is reflected in FAULT_STATUS.CMD.
Unexpected KMAC Done
The kmac_done
signal can only happen during the expected transaction window.
If this check fails, an error is reflected in
FAULT_STATUS.KMAC_DONE.
Control State Machine Check
This error checks for two things:
- The key manager can advance to one of the key states (e.g. RootKey, OwnerIntermediateKey) only when there is a legal advanced operation.
- The key manager can issue an advance or generate operation to the KMAC interface only if the original software request is an advanced or generate command.
If these checks fail, an error is reflected in FAULT_STATUS.CTRL_FSM_CHK.
Sideload Select Check
A sideload key slot is selected for update only if the original software request targeted that key slot.
If this check fails, an error is reflected in FAULT_STATUS.SIDE_CTRL_SEL.
Hardware Interfaces
Referring to the Comportable guideline for peripheral device functionality, the module KEYMGR
has the following hardware interfaces defined.
Primary Clock: clk_i
Other Clocks: clk_edn_i
Bus Device Interfaces (TL-UL): tl
Bus Host Interfaces (TL-UL): none
Peripheral Pins for Chip IO: none
Interrupts:
Interrupt Name | Description |
---|---|
op_done | Operation complete |
Security Alerts:
Alert Name | Description |
---|---|
recov_operation_err | Alert for key manager operation errors. These errors could have been caused by software |
fatal_fault_err | Alert for key manager faults. These errors cannot be caused by software |
Security Countermeasures:
Countermeasure ID | Description |
---|---|
KEYMGR.BUS.INTEGRITY | End-to-end bus integrity scheme. |
KEYMGR.CONFIG.SHADOW | Various critical registers are shadowed: including operation control, reseed interval, and key max version (creator, owner intermediate, owner). |
KEYMGR.OP.CONFIG.REGWEN | Various controls locked during the duration of an operation: including operation start, operation control, sideload clear, salt and key version. |
KEYMGR.RESEED.CONFIG.REGWEN | Reseed interval is software lockable. |
KEYMGR.SW_BINDING.CONFIG.REGWEN | Software binding is lockable by software in each stage. When keymgr successfully advances, the lock is released to allow the next stage the freedom to program. |
KEYMGR.MAX_KEY_VER.CONFIG.REGWEN | Max key version is software lockable. |
KEYMGR.LC_CTRL.INTERSIG.MUBI | Life cycle control signal is multibit |
KEYMGR.CONSTANTS.CONSISTENCY | Basic consistency checks (all 0's or all 1's) for keymgr diversification constants |
KEYMGR.INTERSIG.CONSISTENCY | Basic consistency checks (all 0's or all 1's) for otp diversification inputs |
KEYMGR.HW.KEY.SW_NOACCESS | Sideload keys are not directly accessible by software. |
KEYMGR.OUTPUT_KEYS.CTRL.REDUN | Software and sideload keys are redundantly controlled. One valid controls the write enable, the other controls the input data (muxed to random). |
KEYMGR.CTRL.FSM.SPARSE | Main control fsm is sparsely encoded. |
KEYMGR.DATA.FSM.SPARSE | Control data fsm (for redundant data control) is sparsely encoded. |
KEYMGR.CTRL.FSM.LOCAL_ESC | Main control fsm locally escalates based on any detected fault in keymgr. When a fault is detected (sync or async) the fsm transitions to invalid state to prevent further legal operations from executing. |
KEYMGR.CTRL.FSM.CONSISTENCY | Main and operational fsm transitions are consistent with software commands. |
KEYMGR.CTRL.FSM.GLOBAL_ESC | When the system globally escalates, the main control fsm also transitions to invalid state to prevent further legal operations from executing. |
KEYMGR.CTRL.CTR.REDUN | Primary count is duplicated. |
KEYMGR.KMAC_IF.FSM.SPARSE | kmac interface fsm is sparsely encoded. |
KEYMGR.KMAC_IF.CTR.REDUN | Primary count uses cross count. |
KEYMGR.KMAC_IF_CMD.CTRL.CONSISTENCY | One hot check for kmac interface commands. |
KEYMGR.KMAC_IF_DONE.CTRL.CONSISTENCY | Spurious kmac done check. |
KEYMGR.RESEED.CTR.REDUN | Primary count is duplicated. |
KEYMGR.SIDE_LOAD_SEL.CTRL.CONSISTENCY | Sideload key slot select is checked for consistency against original software command. |
KEYMGR.CTRL.KEY.INTEGRITY | Internal secret key is protected with ECC. |
Programmers Guide
Initialize
Advance or Generate
Software selects a command and triggers a “start”. If the command is valid and successful, key manager indicates done and no errors. If the command is invalid or unsuccessful, key manager indicates done with error. Regardless of the validity of the command, the hardware sequences are triggered to avoid leaking timing information.
The software is able to read the current state of key manager, however it never has access to the associated internal key.
When issuing the generate-output-hw
command, software must select a destination primitive (AES, KMAC or OTBN).
At the conclusion of the command, key and valid signals are forwarded by the key manager to the selected destination primitive.
The key and valid signals remain asserted to the selected destination until software explicitly disables the output via another command, or issues another generate-output-hw
command with a different destination primitive.
Caveats
The keymgr
WORKING_STATE register allows software to discover the current state of keymgr
.
However, since these values are not hardened, they can be attacked.
As such, software should be careful to not make critical system decisions based on these registers.
They are meant generally for informational or debug purposes.
Register Table
KEYMGR.INTR_STATE @ 0x0
Interrupt State Register Reset default = 0x0, mask 0x1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | rw1c | 0x0 | op_done | Operation complete |
KEYMGR.INTR_ENABLE @ 0x4
Interrupt Enable Register Reset default = 0x0, mask 0x1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | rw | 0x0 | op_done | Enable interrupt when |
KEYMGR.INTR_TEST @ 0x8
Interrupt Test Register Reset default = 0x0, mask 0x1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | wo | 0x0 | op_done | Write 1 to force |
KEYMGR.ALERT_TEST @ 0xc
Alert Test Register Reset default = 0x0, mask 0x3
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | wo | 0x0 | recov_operation_err | Write 1 to trigger one alert event of this kind. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | wo | 0x0 | fatal_fault_err | Write 1 to trigger one alert event of this kind. |
KEYMGR.CFG_REGWEN @ 0x10
Key manager configuration enable Reset default = 0x1, mask 0x1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | ro | 0x1 | EN | key manager configuration enable. When key manager operation is started (see CONTROL), registers protected by this EN are no longer modifiable until the operation completes. |
KEYMGR.START @ 0x14
Key manager operation start Reset default = 0x0, mask 0x1
Register enable = CFG_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | rw | 0x0 | EN | Start key manager operations
Other values are reserved. |
KEYMGR.CONTROL_SHADOWED @ 0x18
Key manager operation controls Reset default = 0x10, mask 0x30f0
Register enable = CFG_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3:0 | Reserved | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6:4 | rw | 0x1 | OPERATION | Key manager operation selection. All values not enumerated below behave the same as disable
Other values are reserved. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7 | rw | 0x0 | CDI_SEL | When the OPERATION field is programmed to generate output, this field selects the appropriate CDI to use. This field should be programmed for both hw / sw generation.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11:8 | Reserved | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13:12 | rw | 0x0 | DEST_SEL | When the OPERATION field is programmed to generate output, this field selects the appropriate crypto cipher target. This field should be programmed for both hw / sw generation, as this helps diverisifies the output.
|
KEYMGR.SIDELOAD_CLEAR @ 0x1c
sideload key slots clear Reset default = 0x0, mask 0x7
Register enable = CFG_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2:0 | rw | 0x0 | VAL | Depending on the value programmed, a different side load key slot is cleared. If the value programmed is not one of the enumerated values below, ALL side load key slots are continuously cleared.
Other values are reserved. |
KEYMGR.RESEED_INTERVAL_REGWEN @ 0x20
regwen for reseed interval Reset default = 0x1, mask 0x1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | rw0c | 0x1 | EN | Configuration enable for reseed interval |
KEYMGR.RESEED_INTERVAL_SHADOWED @ 0x24
Reseed interval for key manager entropy reseed Reset default = 0x100, mask 0xffff
Register enable = RESEED_INTERVAL_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
15:0 | rw | 0x100 | VAL | Number of key manager cycles before the entropy is reseeded |
KEYMGR.SW_BINDING_REGWEN @ 0x28
Register write enable for SOFTWARE_BINDING Reset default = 0x1, mask 0x1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | rw0c | 0x1 | EN | Software binding register write enable. This is locked by software and unlocked by hardware upon a successful advance call. Software binding resets to 1, and its value cannot be altered by software until advancement to Init state. |
KEYMGR.SEALING_SW_BINDING_0 @ 0x2c
Software binding input to sealing portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_0 | Software binding value |
KEYMGR.SEALING_SW_BINDING_1 @ 0x30
Software binding input to sealing portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_1 | For KEYMGR1 |
KEYMGR.SEALING_SW_BINDING_2 @ 0x34
Software binding input to sealing portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_2 | For KEYMGR2 |
KEYMGR.SEALING_SW_BINDING_3 @ 0x38
Software binding input to sealing portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_3 | For KEYMGR3 |
KEYMGR.SEALING_SW_BINDING_4 @ 0x3c
Software binding input to sealing portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_4 | For KEYMGR4 |
KEYMGR.SEALING_SW_BINDING_5 @ 0x40
Software binding input to sealing portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_5 | For KEYMGR5 |
KEYMGR.SEALING_SW_BINDING_6 @ 0x44
Software binding input to sealing portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_6 | For KEYMGR6 |
KEYMGR.SEALING_SW_BINDING_7 @ 0x48
Software binding input to sealing portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_7 | For KEYMGR7 |
KEYMGR.ATTEST_SW_BINDING_0 @ 0x4c
Software binding input to the attestation portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_0 | Software binding value |
KEYMGR.ATTEST_SW_BINDING_1 @ 0x50
Software binding input to the attestation portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_1 | For KEYMGR1 |
KEYMGR.ATTEST_SW_BINDING_2 @ 0x54
Software binding input to the attestation portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_2 | For KEYMGR2 |
KEYMGR.ATTEST_SW_BINDING_3 @ 0x58
Software binding input to the attestation portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_3 | For KEYMGR3 |
KEYMGR.ATTEST_SW_BINDING_4 @ 0x5c
Software binding input to the attestation portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_4 | For KEYMGR4 |
KEYMGR.ATTEST_SW_BINDING_5 @ 0x60
Software binding input to the attestation portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_5 | For KEYMGR5 |
KEYMGR.ATTEST_SW_BINDING_6 @ 0x64
Software binding input to the attestation portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_6 | For KEYMGR6 |
KEYMGR.ATTEST_SW_BINDING_7 @ 0x68
Software binding input to the attestation portion of the key manager. This register is lockable and shared between key manager stages. This binding value is not considered secret, however its integrity is very important. Reset default = 0x0, mask 0xffffffff
Register enable = SW_BINDING_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The software binding is locked by software and unlocked by hardware upon a successful advance operation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_7 | For KEYMGR7 |
KEYMGR.Salt_0 @ 0x6c
Salt value used as part of output generation Reset default = 0x0, mask 0xffffffff
Register enable = CFG_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_0 | Salt value |
KEYMGR.Salt_1 @ 0x70
Salt value used as part of output generation Reset default = 0x0, mask 0xffffffff
Register enable = CFG_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_1 | For KEYMGR1 |
KEYMGR.Salt_2 @ 0x74
Salt value used as part of output generation Reset default = 0x0, mask 0xffffffff
Register enable = CFG_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_2 | For KEYMGR2 |
KEYMGR.Salt_3 @ 0x78
Salt value used as part of output generation Reset default = 0x0, mask 0xffffffff
Register enable = CFG_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_3 | For KEYMGR3 |
KEYMGR.Salt_4 @ 0x7c
Salt value used as part of output generation Reset default = 0x0, mask 0xffffffff
Register enable = CFG_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_4 | For KEYMGR4 |
KEYMGR.Salt_5 @ 0x80
Salt value used as part of output generation Reset default = 0x0, mask 0xffffffff
Register enable = CFG_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_5 | For KEYMGR5 |
KEYMGR.Salt_6 @ 0x84
Salt value used as part of output generation Reset default = 0x0, mask 0xffffffff
Register enable = CFG_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_6 | For KEYMGR6 |
KEYMGR.Salt_7 @ 0x88
Salt value used as part of output generation Reset default = 0x0, mask 0xffffffff
Register enable = CFG_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_7 | For KEYMGR7 |
KEYMGR.KEY_VERSION @ 0x8c
Version used as part of output generation Reset default = 0x0, mask 0xffffffff
Register enable = CFG_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL_0 | Key version |
KEYMGR.MAX_CREATOR_KEY_VER_REGWEN @ 0x90
Register write enable for MAX_CREATOR_KEY_VERSION Reset default = 0x1, mask 0x1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | rw0c | 0x1 | EN | MAX_CREATOR_KEY_VERSION configure enable. |
KEYMGR.MAX_CREATOR_KEY_VER_SHADOWED @ 0x94
Max creator key version Reset default = 0x0, mask 0xffffffff
Register enable = MAX_CREATOR_KEY_VER_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL | Max key version. Any key version up to the value specificed in this register is valid. |
KEYMGR.MAX_OWNER_INT_KEY_VER_REGWEN @ 0x98
Register write enable for MAX_OWNER_INT_KEY_VERSION Reset default = 0x1, mask 0x1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | rw0c | 0x1 | EN | MAX_OWNER_INTERMEDIATE_KEY configure enable. |
KEYMGR.MAX_OWNER_INT_KEY_VER_SHADOWED @ 0x9c
Max owner intermediate key version Reset default = 0x1, mask 0xffffffff
Register enable = MAX_OWNER_INT_KEY_VER_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x1 | VAL | Max key version. Any key version up to the value specificed in this register is valid. |
KEYMGR.MAX_OWNER_KEY_VER_REGWEN @ 0xa0
Register write enable for MAX_OWNER_KEY_VERSION Reset default = 0x1, mask 0x1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | rw0c | 0x1 | EN | MAX_OWNER_KEY configure enable. |
KEYMGR.MAX_OWNER_KEY_VER_SHADOWED @ 0xa4
Max owner key version Reset default = 0x0, mask 0xffffffff
Register enable = MAX_OWNER_KEY_VER_REGWEN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rw | 0x0 | VAL | Max key version. Any key version up to the value specificed in this register is valid. |
KEYMGR.SW_SHARE0_OUTPUT_0 @ 0xa8
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_0 | Software output value |
KEYMGR.SW_SHARE0_OUTPUT_1 @ 0xac
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_1 | For KEYMGR1 |
KEYMGR.SW_SHARE0_OUTPUT_2 @ 0xb0
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_2 | For KEYMGR2 |
KEYMGR.SW_SHARE0_OUTPUT_3 @ 0xb4
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_3 | For KEYMGR3 |
KEYMGR.SW_SHARE0_OUTPUT_4 @ 0xb8
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_4 | For KEYMGR4 |
KEYMGR.SW_SHARE0_OUTPUT_5 @ 0xbc
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_5 | For KEYMGR5 |
KEYMGR.SW_SHARE0_OUTPUT_6 @ 0xc0
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_6 | For KEYMGR6 |
KEYMGR.SW_SHARE0_OUTPUT_7 @ 0xc4
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_7 | For KEYMGR7 |
KEYMGR.SW_SHARE1_OUTPUT_0 @ 0xc8
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_0 | Software output value |
KEYMGR.SW_SHARE1_OUTPUT_1 @ 0xcc
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_1 | For KEYMGR1 |
KEYMGR.SW_SHARE1_OUTPUT_2 @ 0xd0
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_2 | For KEYMGR2 |
KEYMGR.SW_SHARE1_OUTPUT_3 @ 0xd4
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_3 | For KEYMGR3 |
KEYMGR.SW_SHARE1_OUTPUT_4 @ 0xd8
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_4 | For KEYMGR4 |
KEYMGR.SW_SHARE1_OUTPUT_5 @ 0xdc
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_5 | For KEYMGR5 |
KEYMGR.SW_SHARE1_OUTPUT_6 @ 0xe0
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_6 | For KEYMGR6 |
KEYMGR.SW_SHARE1_OUTPUT_7 @ 0xe4
Key manager software output. Reset default = 0x0, mask 0xffffffff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
When a software output operation is selected, the results of the operation are placed here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31:0 | rc | 0x0 | VAL_7 | For KEYMGR7 |
KEYMGR.WORKING_STATE @ 0xe8
Key manager working state. Reset default = 0x0, mask 0x7
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
This is a readout of the current key manager working state | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2:0 | ro | 0x0 | STATE | Key manager control state
Other values are reserved. |
KEYMGR.OP_STATUS @ 0xec
Key manager status. Reset default = 0x0, mask 0x3
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Hardware sets the status based on software initiated operations. This register must be explicitly cleared by software. Software clears by writing back whatever it reads. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1:0 | rw1c | 0x0 | STATUS | Operation status.
|
KEYMGR.ERR_CODE @ 0xf0
Key manager error code. This register must be explicitly cleared by software. Reset default = 0x0, mask 0x7
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
This register represents both synchronous and asynchronous recoverable errors. Synchronous errors refer to those that only happen when a keymgr operation is invoked, while asynchronous refers to errors that can happen at any time. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | rw1c | 0x0 | INVALID_OP | Invalid operation issued to key manager, synchronous error | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | rw1c | 0x0 | INVALID_KMAC_INPUT | Invalid data issued to kmac interface, synchronous error | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 | rw1c | 0x0 | INVALID_SHADOW_UPDATE | An error observed during shadow register updates, asynchronous error |
KEYMGR.FAULT_STATUS @ 0xf4
This register represents both synchronous and asynchronous fatal faults. Reset default = 0x0, mask 0x3fff
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Synchronous faults refer to those that only happen when a keymgr operation is invoked, while asynchronous refers to faults that can happen at any time. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | ro | 0x0 | CMD | A non-onehot command was seen in kmac, asynchronous fault. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | ro | 0x0 | KMAC_FSM | The kmac transfer interface FSM is in an invalid state, asynchronous fault. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 | ro | 0x0 | KMAC_DONE | The kmac transfer interface encountered an unexpected done, asynchronous fault. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 | ro | 0x0 | KMAC_OP | KMAC reported an error during keymgr usage, this should never happen - synchronous fault. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4 | ro | 0x0 | KMAC_OUT | KMAC data returned as all 0's or all 1's - synchronous fault | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 | ro | 0x0 | REGFILE_INTG | Register file integrity error, asynchronous fault | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 | ro | 0x0 | SHADOW | Shadow copy storage error, asynchronous fault | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7 | ro | 0x0 | CTRL_FSM_INTG | Control FSM integrity error, asynchronous fault | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8 | ro | 0x0 | CTRL_FSM_CHK | Control FSM cross check error, asynchronous fault | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9 | ro | 0x0 | CTRL_FSM_CNT | Control FSM counter integrity error, asynchronous fault | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10 | ro | 0x0 | RESEED_CNT | Reseed counter integrity error, asynchronous fault | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11 | ro | 0x0 | SIDE_CTRL_FSM | Sideload control FSM integrity error, asynchronous fault | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12 | ro | 0x0 | SIDE_CTRL_SEL | Sideload control key select error, synchronous fault | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13 | ro | 0x0 | KEY_ECC | Secret key ecc error, asynchronous fault |
KEYMGR.DEBUG @ 0xf8
The register holds some debug information that may be convenient if keymgr misbehaves. Reset default = 0x0, mask 0x7f
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bits | Type | Reset | Name | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | rw0c | 0x0 | INVALID_CREATOR_SEED | Creator seed failed input checks during operation | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | rw0c | 0x0 | INVALID_OWNER_SEED | Owner seed failed input checks during operation | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 | rw0c | 0x0 | INVALID_DEV_ID | Device ID failed input checks during operation | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 | rw0c | 0x0 | INVALID_HEALTH_STATE | Health state failed input checks during operation | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4 | rw0c | 0x0 | INVALID_KEY_VERSION | Key version failed input checks during operation | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 | rw0c | 0x0 | INVALID_KEY | Key fed to kmac failed input checks during operation | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 | rw0c | 0x0 | INVALID_DIGEST | ROM digest failed input checks during operation |