RM0033 Rev 9 557/1381
RM0033 Hash processor (HASH)
569
Note: 1 The computation latency of the HMAC primitive depends on the lengths of the keys and
message. You could the HMAC as two nested underlying hash functions with the same key
length (long or short).
21.3.7 Context swapping
It is possible to interrupt a hash/HMAC process to perform another processing with a higher
priority, and to complete the interrupted process later on, when the higher-priority task is
complete. To do so, the context of the interrupted task must be saved from the hash
registers to memory, and then be restored from memory to the hash registers.
The procedures where the data flow is controlled by software or by DMA are described
below.
Procedure where the data are loaded by software
The context can be saved only when no block is currently being processed. That is, you
must wait for DINIS = 1 (the last block has been processed and the input FIFO is empty) or
NBW ≠ 0 (the FIFO is not full and no processing is ongoing).
• Context saving:
Store the contents of the following registers into memory:
– HASH_IMR
– HASH_STR
– HASH_CR
– HASH_CSR0 to HASH_CSR50.
• Context restoring:
The context can be restored when the high-priority task is complete. Please follow the
order of the sequence below.
a) Write the following registers with the values saved in memory: HASH_IMR,
HASH_STR and HASH_CR
b) Initialize the hash processor by setting the INIT bit in the HASH_CR register
c) Write the HASH_CSR0 to HASH_CSR50 registers with the values saved in
memory
You can now restart the processing from the point where it has been interrupted.