Atmosic Side-Load Key (SLKEY) Tool
It is a simple command line utility to manage private keys stored in RRAM memory slots on Atmosic devices. The tool supports reading and writing individual keys or all 8 slots at once, currently supports Windows and Linux platforms.
The table below lists the available actions of SLKEY. Detailed descriptions of each action can be found in West slkey command section.
| Command | Explanation |
|---|---|
| -h, --help | List available commands |
| read | Read private key from a specific slot |
| write | Write private key to a specific slot |
| read_all | Read all private keys from slots 0-7 |
| write_all | Write all private keys from a file to slots 0-7 |
Before You Begin
Before running the SLKEY tool, ensure the following items are prepared:
1. Private Key Storage Information
Private keys are stored in 8 slots (0-7) in RRAM memory. Each slot can hold a 32-byte private key.
Memory Layout:
RRAM Base Address:
0x10000000Private Key Start Offset:
0x8FF00Slot Size:
32 bytes(256 bits)Total Slots:
8(slots 0-7)Total Key Area:
256 bytes
Slot Address Calculation:
Slot Address = 0x8FF00 + (Slot Index × 32)
Slot 0: 0x8FF00
Slot 1: 0x8FF20
Slot 2: 0x8FF40
Slot 3: 0x8FF60
Slot 4: 0x8FF80
Slot 5: 0x8FFA0
Slot 6: 0x8FFC0
Slot 7: 0x8FFE0
2. Key Data Format
Private keys can be provided in two formats:
Hex String Format (for single key write):
10eb3d60be71ca15f0ae732b81777d85072c351fd708613ba310982df4df1409
File Format (for write_all):
Binary format: 256 bytes (8 keys × 32 bytes each)
The file must contain raw binary data (hex bytes), not ASCII text.
Note
Keys shorter than 32 bytes will be automatically padded with 0xFF at the end.
3. Partition Information File
The partition_info.map file is required to locate the private key storage offset. The tool extracts the SEC_SIDELOAD_KEYS_OFFSET parameter.
For example (partition_info.map):
SEC_SIDELOAD_KEYS_OFFSET=0x8FF00
SEC_SIDELOAD_KEYS_SIZE=0x100
West slkey Commands
Use the following command to view usage details:
Syntax
west slkey --help
Example
$ west slkey --help
usage: west slkey [-h] {read,write,read_all,write_all} ...
Atmosic Side-Load Key (SLKEY) management tool
positional arguments:
{read,write,read_all,write_all}
sub-command to run
read Read private key from specified slot
write Write private key to specified slot
read_all Read all private keys from slots 0-7
write_all Write private keys from file to slots 0-7
options:
-h, --help show this help message and exit
Read a Single Private Key
Syntax
west slkey read [-h] --slot_index SLOT_INDEX [--device DEVICE_ID] [--dl] [--jlink] [--board BOARD] [-p PARTITION_FILE]
Required parameters:
--slot_indexKey slot number (0-7)--deviceSerial number of the programmer (see serial)--boardAtmosic device (see board)-pPartition_info.map file path
Optional parameters:
--dlSpecify if using a Download Board (DL) interface--jlinkSpecify if using a J-Link interface
Example
$ west slkey read --slot_index 0 --device ATMAPT1000000006 --dl --board ATMEVK-3405-WQK-5 -p build/settings/zephyr/partition_info.map
SEC_SIDELOAD_KEYS_OFFSET: 0x8FF00
Using ATM OpenOCD 'D:\Project\zephyr\zephyrproject\modules\hal\atmosic_lib\tools\openocd\bin\Windows_NT\openocd'
Inferred OpenOCD config for board 'ATMEVK-3405-WQK-5': D:\Project\zephyr\zephyrproject\zephyr/../openair/modules/hal_atmosic/ATM34xx/rev-5/openocd/atmx3_openocd.cfg
Reading private key from slot 0 (address 0x8FF00) from RRAM...
Slot 0 (32 bytes): 10eb3d60be71ca15f0ae732b81777d85072c351fd708613ba310982df4df1409
Write a Single Private Key
Syntax
west slkey write [-h] --slot_index SLOT_INDEX --data DATA [--device DEVICE_ID] [--dl] [--jlink] [--board BOARD] [-p PARTITION_FILE]
Required parameters:
--slot_indexKey slot number (0-7)--dataPrivate key as hex string (will be padded to 32 bytes with 0xFF if shorter)--deviceSerial number of the programmer (see serial)--boardAtmosic device (see board)-pPartition_info.map file path
Optional parameters:
--dlSpecify if using a Download Board (DL) interface--jlinkSpecify if using a J-Link interface
Example
$ west slkey write --slot_index 1 --data 10eb3d60be71ca15f0ae732b81777d85072c351fd708613ba310982df4df1409 --device ATMAPT1000000006 --dl --board ATMEVK-3405-WQK-5 -p build/settings/zephyr/partition_info.map
SEC_SIDELOAD_KEYS_OFFSET: 0x8FF00
Using ATM OpenOCD 'D:\Project\zephyr\zephyrproject\modules\hal\atmosic_lib\tools\openocd\bin\Windows_NT\openocd'
Inferred OpenOCD config for board 'ATMEVK-3405-WQK-5': D:\Project\zephyr\zephyrproject\zephyr/../openair/modules/hal_atmosic/ATM34xx/rev-5/openocd/atmx3_openocd.cfg
Writing private key to slot 1 (address 0x8FF20) to RRAM...
Successfully wrote private key to slot 1
Read All Private Keys
Syntax
west slkey read_all [-h] [-o OUTPUT] [--device DEVICE_ID] [--dl] [--jlink] [--board BOARD] [--rram] [-p PARTITION_FILE]
Required parameters:
--deviceSerial number of the programmer (see serial)--boardAtmosic device (see board)-pPartition_info.map file path
Optional parameters:
-o, --outputOptional output file to save all keys (256 bytes total)--dlSpecify if using a Download Board (DL) interface--jlinkSpecify if using a J-Link interface
Example
Read all slots and display
$ west slkey read_all --device ATMAPT1000000006 --dl --board ATMEVK-3405-WQK-5 -p build/settings/zephyr/partition_info.map SEC_SIDELOAD_KEYS_OFFSET: 0x8FF00 Using ATM OpenOCD 'D:\Project\zephyr\zephyrproject\modules\hal\atmosic_lib\tools\openocd\bin\Windows_NT\openocd' Inferred OpenOCD config for board 'ATMEVK-3405-WQK-5': D:\Project\zephyr\zephyrproject\zephyr/../openair/modules/hal_atmosic/ATM34xx/rev-5/openocd/atmx3_openocd.cfg Reading all private keys from slots 0-7 from RRAM... Reading 256 bytes from address 0x8FF00... ====================================================================== All Slot Data: ====================================================================== Slot 0: 10eb3d60be71ca15f0ae732b81777d85072c351fd708613ba310982df4df1409 Slot 1: 10eb3d60be71ca15f0ae732b81777d85072c351fd708613ba310982df4df1409 Slot 2: 404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f Slot 3: 606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f Slot 4: 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f Slot 5: a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf Slot 6: c0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf Slot 7: e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff ====================================================================== Successfully read all 256 bytes from slots 0-7
Read all slots and save to file
$ west slkey read_all --device ATMAPT1000000006 --dl --board ATMEVK-3405-WQK-5 -o all_keys.bin -p build/settings/zephyr/partition_info.map SEC_SIDELOAD_KEYS_OFFSET: 0x8FF00 Using ATM OpenOCD 'D:\Project\zephyr\zephyrproject\modules\hal\atmosic_lib\tools\openocd\bin\Windows_NT\openocd' Inferred OpenOCD config for board 'ATMEVK-3405-WQK-5': D:\Project\zephyr\zephyrproject\zephyr/../openair/modules/hal_atmosic/ATM34xx/rev-5/openocd/atmx3_openocd.cfg Reading all private keys from slots 0-7 from RRAM... Reading 256 bytes from address 0x8FF00... ====================================================================== All Slot Data: ====================================================================== Slot 0: 10eb3d60be71ca15f0ae732b81777d85072c351fd708613ba310982df4df1409 Slot 1: 10eb3d60be71ca15f0ae732b81777d85072c351fd708613ba310982df4df1409 Slot 2: 404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f Slot 3: 606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f Slot 4: 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f Slot 5: a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf Slot 6: c0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf Slot 7: e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff ====================================================================== Successfully saved all 256 bytes to all_keys.bin
Write All Private Keys from File
Syntax
west slkey write_all [-h] -f FILENAME [--device DEVICE_ID] [--dl] [--jlink] [--board BOARD] [-p PARTITION_FILE]
Required parameters:
-f, --filenamePath to file containing private keys for slots 0-7--deviceSerial number of the programmer (see serial)--boardAtmosic device (see board)-pPartition_info.map file path
Optional parameters:
--dlSpecify if using a Download Board (DL) interface--jlinkSpecify if using a J-Link interface
Note
The file must be in binary format containing 256 bytes (8 keys × 32 bytes each). The file should contain raw binary data (hex bytes), not ASCII text.
Example
$ west slkey write_all -f keys.bin --device ATMAPT1000000006 --dl --board ATMEVK-3405-WQK-5 -p build/settings/zephyr/partition_info.map
SEC_SIDELOAD_KEYS_OFFSET: 0x8FF00
Using ATM OpenOCD 'D:\Project\zephyr\zephyrproject\modules\hal\atmosic_lib\tools\openocd\bin\Windows_NT\openocd'
Inferred OpenOCD config for board 'ATMEVK-3405-WQK-5': D:\Project\zephyr\zephyrproject\zephyr/../openair/modules/hal_atmosic/ATM34xx/rev-5/openocd/atmx3_openocd.cfg
Writing 256 bytes from keys.bin to slots 0-7 in RRAM...
Writing to address 0x8FF00...
Successfully wrote all 256 bytes to slots 0-7
Common Use Cases
Backup and Restore Keys
Backup all keys from device:
west slkey read_all --device ATMAPT1000000006 --dl --board ATMEVK-3405-WQK-5 -o backup_keys.bin -p build/settings/zephyr/partition_info.map
Restore all keys to device:
west slkey write_all -f backup_keys.bin --device ATMAPT1000000006 --dl --board ATMEVK-3405-WQK-5 -p build/settings/zephyr/partition_info.map
Update a Single Key
Update only slot 3 with a new key:
west slkey write --slot_index 3 --data 606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f --device ATMAPT1000000006 --dl --board ATMEVK-3405-WQK-5 -p build/settings/zephyr/partition_info.map
Verify Key Write
Write a key and then read it back to verify:
# Write the key
west slkey write --slot_index 0 --data 10eb3d60be71ca15f0ae732b81777d85072c351fd708613ba310982df4df1409 --device ATMAPT1000000006 --dl --board ATMEVK-3405-WQK-5 -p build/settings/zephyr/partition_info.map
# Read it back
west slkey read --slot_index 0 --device ATMAPT1000000006 --dl --board ATMEVK-3405-WQK-5 -p build/settings/zephyr/partition_info.map