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.

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.

Key Manager Functional Model

In the diagram, the red boxes represent the working state and the associated secret value, 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 working state as the “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.

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 secret material. Each state, when valid, supplies its secret material as the “key” input to a KMAC operation. The data input is dependent on each state, see below.

Reset

The key manager working state is not directly reset to any value. This ensures there is no deterministic hamming delta upon reset. Instead at reset time, the state value is simply unknown - which is expected to be some biased value the registers settle to based on silicon corner and environment conditions.

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 working state. This ensures that the hamming delta from both the previous value and the next value are both 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.

See below:

  • DiversificationKey: Secret seed from flash
  • HealthMeasurement: 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.
  • RomExtSecurityDescriptor: A software digest of the ROM_ext stage.

Other than the DiversificationKey, none of the values above are considered secret. The RomExtSecurityDescriptor is a 256b value calculated by ROM and loaded into key manager registers.

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 this state to the next is irreversible during the current power cycle.

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 working state as the key, and other inputs as data. The output of the KMAC operation replaces the previous value of the working state, 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 this state to the next 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 working state as the key, and other inputs as data. The output of the KMAC operation replaces the previous value of the working state, 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 this state to the next is irreversible during the current power cycle.

Disabled

Disabled is a terminal state where the key manager is no longer operational. When entering Disabled random values are used to compute a new random value.

Life Cycle Connection

The function of the key manager is directly tied to the life cycle controller. During specific life cycle states, the key manager is explicitly disabled.

When disabled, the following key manager behavior applies:

  • If the key manager has not been initialized, it cannot be initialized until life cycle enables key manager.
  • If the key manager has been initialized and is currently in a valid state, it immediately wipes its key contents (working state, sideload keys and software keys) and transitions to Disabled.
    • Note, unlike a normal software requested disable, this path does not gracefully interact with KMAC, instead the secret contents are forcibly wiped.
    • If there is an ongoing transaction with KMAC, the handshake with KMAC is still completed as usual, however the results are discarded and the value sent to KMAC are also not real.
  • Once the system settles to Disabled state, the behavior is consistent with normal behavior.

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 key manager FSM processes with random, dummy data, but does not update working state or relevant output registers. For each valid command, a set of inputs are selected and sequenced to the KMAC module.

During Disable state, working state and output registers are updated as usual. The only difference during Disabled state is that random data is used and invalid operations are reported.

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, HMAC and KMAC.

KMAC Operations

All invoked KMAC operations expect the key in two shares. This means the working states, even though functionally 256b, are maintained as 512b.

For advance-state and generate-output commands, the KMAC emitted output are also in 2-shares. Software is responsible for determining if the key should be preserved in shares or combined, depending on the use case.

Errors, Interrupts and Alerts

An error code register is maintained ERR_CODE to check issues that might rise while using the key manager. There are two categories of errors

  • Hardware fault errors - These errors indicate something fundamental has gone wrong and are errors that could not have been caused by software.

    • Invalid command - A non-one-hot command was issued from the key manager controller to the KMAC data interface. This is not possible by software and indicates a hardware fault. This error can also happen if the KMCA data fsm gets into an invalid state.
    • Invalid output - The data return from KMAC is all 0’s or all 1’s. This is not possible given the set of KMAC data interface inputs.
  • Software operation errors - These errors could have been caused by user errors and is a sign that software should examine its usage of key manager.

    • Invalid operation - An invalid operation (for example generate while in Idle) was invoked.
    • Invalid input - Invalid software input was supplied (for example a greater key version than allowed in MAX_OWNER_KEY_VER.

Whenever the error code changes from its previous value to a non-zero value, an interrupt is generated. Two separate alerts are also generated, one corresponding to each category above.

Invalid Command

When these errors occur, random data is fed to the KMAC for processing. At the completion of KMAC processing, the working state is over-written with KMAC’s output and the state is transitioned to Disabled. An error interrupt and fault alert are also generated. Note the KMAC module itself may error during the derivation process. When this happens, the error is also registered as an invalid command and the same mechanisms apply.

Invalid Output

When these errors occur, an error interrupt and fault alert are generated. Neither the working state nor the relevant output registers are updated.

Invalid Input

When these errors occur, random data is fed to the KMAC for processing. Neither the working state nor the relevant output registers are updated. An error interrupt and operation alert are also generated.

Invalid Operation

When these errors occur, an error interrupt and fault are generated.

The effects of an invalid operation vary depending on state. 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. Note that even though Init is not a legal operation in most states, it is treated as an ignored command rather as an explicit error.

Current State Legal Operations Outcome
Reset Init Advance to Initialized state upon completion.
Reset Disable / Advance / Generate Invalid operation error triggered with no other side effects.
Initialized Disable / Advance Advance to next Disabled state or CreatorRootKey.
Initialized Generate Invalid operation error triggered with random data, output registers are updated.
CreatorRootKey Disable / Advance / Generate Behave as expected.
OwnerIntKey Disable / Advance / Generate Behave as expected.
OwnerKey Disable / Advance / Generate Behave as expected.
Disabled Disable / Advance / Generate Invalid operation error triggered with random data, both working state and output registers are updated depending on command.

Block Diagram

The following is a high level block diagram of the key manager.

Key Manager Block Diagram

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 helps disable the entire key manager function in the event of an escalation.

Key Manager Control Block Diagram

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.

Key Manager KMAC Interface Block Diagram

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: none

Bus Device Interface: tlul

Bus Host Interface:

Peripheral Pins for Chip IO: none

Interrupts:

Interrupt NameDescription
op_doneOperation complete
errkeymanager error

Security Alerts:

Alert NameDescription
fault_errAlert for key manager faults. These errors cannot be caused by software
operation_errAlert for key manager operation errors. These errors could have been caused by software

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 secret value

When issuing the generate-output-hw command, software must select a destination primitive (aes, hmac or kmac). 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.

More details to come.

Register Table

KEYMGR.INTR_STATE @ + 0x0
Interrupt State Register
Reset default = 0x0, mask 0x3
31302928272625242322212019181716
 
1514131211109876543210
  err op_done
BitsTypeResetNameDescription
0rw1c0x0op_doneOperation complete
1rw1c0x0errkeymanager error


KEYMGR.INTR_ENABLE @ + 0x4
Interrupt Enable Register
Reset default = 0x0, mask 0x3
31302928272625242322212019181716
 
1514131211109876543210
  err op_done
BitsTypeResetNameDescription
0rw0x0op_doneEnable interrupt when INTR_STATE.op_done is set
1rw0x0errEnable interrupt when INTR_STATE.err is set


KEYMGR.INTR_TEST @ + 0x8
Interrupt Test Register
Reset default = 0x0, mask 0x3
31302928272625242322212019181716
 
1514131211109876543210
  err op_done
BitsTypeResetNameDescription
0wo0x0op_doneWrite 1 to force INTR_STATE.op_done to 1
1wo0x0errWrite 1 to force INTR_STATE.err to 1


KEYMGR.ALERT_TEST @ + 0xc
Alert Test Register
Reset default = 0x0, mask 0x3
31302928272625242322212019181716
 
1514131211109876543210
  operation_err fault_err
BitsTypeResetNameDescription
0wo0x0fault_errWrite 1 to trigger one alert event of this kind.
1wo0x0operation_errWrite 1 to trigger one alert event of this kind.


KEYMGR.CFGEN @ + 0x10
Key manager configuration enable
Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN
BitsTypeResetNameDescription
0ro0x1ENkey manager configuration enable. When key manager operation is started (see CONTROL), registers protected by this EN are no longer modifiable until the operation completes. TBD This should be enhanced to support multi-bit values in the future. Should be another script change.


KEYMGR.CONTROL @ + 0x14
Key manager operation controls
Reset default = 0x100, mask 0x3711
Register enable = CFGEN
31302928272625242322212019181716
 
1514131211109876543210
  DEST_SEL   OPERATION   START   INIT
BitsTypeResetNameDescription
0rw0x0INITInit key manager
1Valid stateRequests key manager initialization. This is not automated by hardware as software may want to initialize entropy sources prior to calling key manager initlialization. Note the Init command is only accepted by the key manager control logic if START is not set. Once the control has been initialized, the field no longer serves a function.
Other values are reserved.
3:1Reserved
4rw0x0STARTStart key manager operations
1Valid stateTo trigger a start, this value must be programmed. All other values are considered no operation start.
Other values are reserved.
7:5Reserved
10:8rw0x1OPERATIONKey manager operation selection. All values not enumerated below behave the same as disable
0AdvanceAdvance key manager state. Advances key manager to the next stage. If key manager is already at last functional state, the advance operation is equivalent to the disable operation.
1Generate IDGenerates an identity seed from the current state.
2Generate SW OutputGenerates a key manager output that is visible to software from the current state.
3Generate HW OutputGenerates a key manager output that is visible only to hardware crypto blocks.
4DisableDisables key manager operation and moves it to the disabled state. Note the disabled state is terminal and cannot be recovered without a reset.
Other values are reserved.
11Reserved
13:12rw0x0DEST_SELWhen the OPERATION field is programmed to generate HW output, this field selects the appropriate crypto cipher target.
0NoneNo target selected
1AESAES selected
2HMACHMAC selected
3KMACKMAC selected


KEYMGR.ROM_EXT_DESC_EN @ + 0x18
Register write enable for ROM_EXT_DESC
Reset default = 0x2, mask 0x3
31302928272625242322212019181716
 
1514131211109876543210
  EN
BitsTypeResetNameDescription
1:0rw0c0x2ENROM_ext descriptor configure enable. All values except for 2 are interpreted as configuration disable.


KEYMGR.ROM_EXT_DESC_0 @ + 0x1c
ROM_ext descriptor. This value must be representative of the current ROM_ext contents. For example, this could be a truncated hash of the ROM_ext
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_0...
1514131211109876543210
...VAL_0
BitsTypeResetNameDescription
31:0rw0x0VAL_0Software binding value


KEYMGR.ROM_EXT_DESC_1 @ + 0x20
ROM_ext descriptor. This value must be representative of the current ROM_ext contents. For example, this could be a truncated hash of the ROM_ext
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_1...
1514131211109876543210
...VAL_1
BitsTypeResetNameDescription
31:0rw0x0VAL_1For KEYMGR1


KEYMGR.ROM_EXT_DESC_2 @ + 0x24
ROM_ext descriptor. This value must be representative of the current ROM_ext contents. For example, this could be a truncated hash of the ROM_ext
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_2...
1514131211109876543210
...VAL_2
BitsTypeResetNameDescription
31:0rw0x0VAL_2For KEYMGR2


KEYMGR.ROM_EXT_DESC_3 @ + 0x28
ROM_ext descriptor. This value must be representative of the current ROM_ext contents. For example, this could be a truncated hash of the ROM_ext
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_3...
1514131211109876543210
...VAL_3
BitsTypeResetNameDescription
31:0rw0x0VAL_3For KEYMGR3


KEYMGR.SOFTWARE_BINDING_0 @ + 0x2c
Software binding input to key manager. This register is non-lockable and shared between various software stages. This binding value is not considered secret.
Reset default = 0x0, mask 0xffffffff
Register enable = CFGEN
31302928272625242322212019181716
VAL_0...
1514131211109876543210
...VAL_0
BitsTypeResetNameDescription
31:0rw0x0VAL_0Software binding value


KEYMGR.SOFTWARE_BINDING_1 @ + 0x30
Software binding input to key manager. This register is non-lockable and shared between various software stages. This binding value is not considered secret.
Reset default = 0x0, mask 0xffffffff
Register enable = CFGEN
31302928272625242322212019181716
VAL_1...
1514131211109876543210
...VAL_1
BitsTypeResetNameDescription
31:0rw0x0VAL_1For KEYMGR1


KEYMGR.SOFTWARE_BINDING_2 @ + 0x34
Software binding input to key manager. This register is non-lockable and shared between various software stages. This binding value is not considered secret.
Reset default = 0x0, mask 0xffffffff
Register enable = CFGEN
31302928272625242322212019181716
VAL_2...
1514131211109876543210
...VAL_2
BitsTypeResetNameDescription
31:0rw0x0VAL_2For KEYMGR2


KEYMGR.SOFTWARE_BINDING_3 @ + 0x38
Software binding input to key manager. This register is non-lockable and shared between various software stages. This binding value is not considered secret.
Reset default = 0x0, mask 0xffffffff
Register enable = CFGEN
31302928272625242322212019181716
VAL_3...
1514131211109876543210
...VAL_3
BitsTypeResetNameDescription
31:0rw0x0VAL_3For KEYMGR3


KEYMGR.Salt_0 @ + 0x3c
Salt value used as part of output generation
Reset default = 0x0, mask 0xffffffff
Register enable = CFGEN
31302928272625242322212019181716
VAL_0...
1514131211109876543210
...VAL_0
BitsTypeResetNameDescription
31:0rw0x0VAL_0Salt value


KEYMGR.Salt_1 @ + 0x40
Salt value used as part of output generation
Reset default = 0x0, mask 0xffffffff
Register enable = CFGEN
31302928272625242322212019181716
VAL_1...
1514131211109876543210
...VAL_1
BitsTypeResetNameDescription
31:0rw0x0VAL_1For KEYMGR1


KEYMGR.Salt_2 @ + 0x44
Salt value used as part of output generation
Reset default = 0x0, mask 0xffffffff
Register enable = CFGEN
31302928272625242322212019181716
VAL_2...
1514131211109876543210
...VAL_2
BitsTypeResetNameDescription
31:0rw0x0VAL_2For KEYMGR2


KEYMGR.Salt_3 @ + 0x48
Salt value used as part of output generation
Reset default = 0x0, mask 0xffffffff
Register enable = CFGEN
31302928272625242322212019181716
VAL_3...
1514131211109876543210
...VAL_3
BitsTypeResetNameDescription
31:0rw0x0VAL_3For KEYMGR3


KEYMGR.KEY_VERSION @ + 0x4c
Version used as part of output generation
Reset default = 0x0, mask 0xffffffff
Register enable = CFGEN
31302928272625242322212019181716
VAL_0...
1514131211109876543210
...VAL_0
BitsTypeResetNameDescription
31:0rw0x0VAL_0Salt value


KEYMGR.MAX_CREATOR_KEY_VER_EN @ + 0x50
Register write enable for MAX_CREATOR_KEY_VERSION
Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN
BitsTypeResetNameDescription
0rw0c0x1ENMAX_CREATOR_KEY_VERSION configure enable. All values except for 2 are interpreted as configuration disable.


KEYMGR.MAX_CREATOR_KEY_VER @ + 0x54
Max creator key version
Reset default = 0x0, mask 0xffffffff
Register enable = MAX_CREATOR_KEY_VER_EN
31302928272625242322212019181716
VAL...
1514131211109876543210
...VAL
BitsTypeResetNameDescription
31:0rw0x0VALMax key version. Any key version up to the value specificed in this register is valid.


KEYMGR.MAX_OWNER_INT_KEY_VER_EN @ + 0x58
Register write enable for MAX_OWNER_INT_KEY_VERSION
Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN
BitsTypeResetNameDescription
0rw0c0x1ENMAX_OWNER_INTERMEDIATE_KEY configure enable. All values except for 2 are interpreted as configuration disable.


KEYMGR.MAX_OWNER_INT_KEY_VER @ + 0x5c
Max owner intermediate key version
Reset default = 0x1, mask 0xffffffff
Register enable = MAX_OWNER_INT_KEY_VER_EN
31302928272625242322212019181716
VAL...
1514131211109876543210
...VAL
BitsTypeResetNameDescription
31:0rw0x1VALMax key version. Any key version up to the value specificed in this register is valid.


KEYMGR.MAX_OWNER_KEY_VER_EN @ + 0x60
Register write enable for MAX_OWNER_KEY_VERSION
Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN
BitsTypeResetNameDescription
0rw0c0x1ENMAX_OWNER_KEY configure enable. All values except for 2 are interpreted as configuration disable.


KEYMGR.MAX_OWNER_KEY_VER @ + 0x64
Max owner key version
Reset default = 0x0, mask 0xffffffff
Register enable = MAX_OWNER_KEY_VER_EN
31302928272625242322212019181716
VAL...
1514131211109876543210
...VAL
BitsTypeResetNameDescription
31:0rw0x0VALMax key version. Any key version up to the value specificed in this register is valid.


KEYMGR.SW_SHARE0_OUTPUT_0 @ + 0x68
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_0...
1514131211109876543210
...VAL_0
BitsTypeResetNameDescription
31:0rc0x0VAL_0Software output value


KEYMGR.SW_SHARE0_OUTPUT_1 @ + 0x6c
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_1...
1514131211109876543210
...VAL_1
BitsTypeResetNameDescription
31:0rc0x0VAL_1For KEYMGR1


KEYMGR.SW_SHARE0_OUTPUT_2 @ + 0x70
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_2...
1514131211109876543210
...VAL_2
BitsTypeResetNameDescription
31:0rc0x0VAL_2For KEYMGR2


KEYMGR.SW_SHARE0_OUTPUT_3 @ + 0x74
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_3...
1514131211109876543210
...VAL_3
BitsTypeResetNameDescription
31:0rc0x0VAL_3For KEYMGR3


KEYMGR.SW_SHARE0_OUTPUT_4 @ + 0x78
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_4...
1514131211109876543210
...VAL_4
BitsTypeResetNameDescription
31:0rc0x0VAL_4For KEYMGR4


KEYMGR.SW_SHARE0_OUTPUT_5 @ + 0x7c
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_5...
1514131211109876543210
...VAL_5
BitsTypeResetNameDescription
31:0rc0x0VAL_5For KEYMGR5


KEYMGR.SW_SHARE0_OUTPUT_6 @ + 0x80
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_6...
1514131211109876543210
...VAL_6
BitsTypeResetNameDescription
31:0rc0x0VAL_6For KEYMGR6


KEYMGR.SW_SHARE0_OUTPUT_7 @ + 0x84
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_7...
1514131211109876543210
...VAL_7
BitsTypeResetNameDescription
31:0rc0x0VAL_7For KEYMGR7


KEYMGR.SW_SHARE1_OUTPUT_0 @ + 0x88
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_0...
1514131211109876543210
...VAL_0
BitsTypeResetNameDescription
31:0rc0x0VAL_0Software output value


KEYMGR.SW_SHARE1_OUTPUT_1 @ + 0x8c
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_1...
1514131211109876543210
...VAL_1
BitsTypeResetNameDescription
31:0rc0x0VAL_1For KEYMGR1


KEYMGR.SW_SHARE1_OUTPUT_2 @ + 0x90
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_2...
1514131211109876543210
...VAL_2
BitsTypeResetNameDescription
31:0rc0x0VAL_2For KEYMGR2


KEYMGR.SW_SHARE1_OUTPUT_3 @ + 0x94
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_3...
1514131211109876543210
...VAL_3
BitsTypeResetNameDescription
31:0rc0x0VAL_3For KEYMGR3


KEYMGR.SW_SHARE1_OUTPUT_4 @ + 0x98
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_4...
1514131211109876543210
...VAL_4
BitsTypeResetNameDescription
31:0rc0x0VAL_4For KEYMGR4


KEYMGR.SW_SHARE1_OUTPUT_5 @ + 0x9c
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_5...
1514131211109876543210
...VAL_5
BitsTypeResetNameDescription
31:0rc0x0VAL_5For KEYMGR5


KEYMGR.SW_SHARE1_OUTPUT_6 @ + 0xa0
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_6...
1514131211109876543210
...VAL_6
BitsTypeResetNameDescription
31:0rc0x0VAL_6For KEYMGR6


KEYMGR.SW_SHARE1_OUTPUT_7 @ + 0xa4
Key manager software output. When a software output operation is selected, the results of the operation are placed here.
Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
VAL_7...
1514131211109876543210
...VAL_7
BitsTypeResetNameDescription
31:0rc0x0VAL_7For KEYMGR7


KEYMGR.WORKING_STATE @ + 0xa8
Key manager working state. This is a readout of the current key manager working state
Reset default = 0x0, mask 0x7
31302928272625242322212019181716
 
1514131211109876543210
  STATE
BitsTypeResetNameDescription
2:0ro0x0STATEKey manager control state
0ResetKey manager control is still in reset. Please wait for initialization complete before issuing operations
1Init_wipKey manager iniitalization in progress. Please wait for initialization complete before issuing operations
2Init_doneKey manager control has finished initialization and will now accept software commands.
3Creator Root KeyKey manager control currently contains the creator root key.
4Owner Intermediate KeyKey manager control currently contains the owner intermediate key.
5Owner KeyKey manager control currently contains the owner key.
6DisabledKey manager currently disabled. Please reset the key manager.
Other values are reserved.


KEYMGR.OP_STATUS @ + 0xac
Key manager status. Hardware sets the status based on software initiated operations. When software reads the status, it is self cleared.
Reset default = 0x0, mask 0x3
31302928272625242322212019181716
 
1514131211109876543210
  STATUS
BitsTypeResetNameDescription
1:0rw1c0x0STATUSOperation status.
0IdleKey manager is idle
1WIPWork in progress. A key manager operation has been started and is ongoing
2DONE_SUCCESSOperation finished without errors
3DONE_ERROROperation finished with errors, please see ERR_CODE register.


KEYMGR.ERR_CODE @ + 0xb0
Key manager error code.
Reset default = 0x0, mask 0xf
31302928272625242322212019181716
 
1514131211109876543210
  INVALID_KMAC_DATA INVALID_KMAC_INPUT INVALID_CMD INVALID_OP
BitsTypeResetNameDescription
0rw1c0x0INVALID_OPInvalid operation issued to key manager
1rw1c0x0INVALID_CMDInvalid command issued from key manager to kmac interface
2rw1c0x0INVALID_KMAC_INPUTInvalid data issued to kmac interface
3rw1c0x0INVALID_KMAC_DATAInvalid data returned from kmac interface.