EasyManuals Logo

ST STM32L4 5 Series User Manual

ST STM32L4 5 Series
1830 pages
To Next Page IconTo Next Page
To Next Page IconTo Next Page
To Previous Page IconTo Previous Page
To Previous Page IconTo Previous Page
Page #860 background imageLoading...
Page #860 background image
Hash processor (HASH) RM0351
860/1830 DocID024597 Rev 5
HMAC(message) = Hash((key | pad) XOR [0x5C]
n
| Hash((key | pad) XOR [0x36]
n
| message))
where:
[X]
n
represents a repetition of X n times, where n equal to the size of the underlying
hash function data block that is 512 bits for SHA-1, SHA224, SHA-256, MD5 hash
algorithms (i.e. n=64).
pad is a sequence of zeroes needed to extend the key to the length n defined above. If
the key length is greater than n, the application shall first hash the key using Hash()
function and then use the resultant byte string as the actual key to HMAC.
| represents the concatenation operator.
HMAC processing
Four different steps are required to compute the HMAC:
1. The block is initialized by writing the INIT bit to 1 with the MODE bit at 1 and the ALGO
bits set to the value corresponding to the desired algorithm. The LKEY bit must also be
set to 1 if the key being used is longer than 64 bytes. In this case, as required by HMAC
specifications, the hash processor will use the hash of the key instead of the real key.
2. The key to be used for the inner hash function must be provided to the hash processor:
The key loading operation follows the same mechanism as the message bit string
loading, i.e. write key data into HASH_DIN and complete the transfer by writing to
HASH_STR register.
Note: Endianness details can be found in Section 29.3.4: Message data feeding.
3. Once the last key word has been entered and computation has started, the hash
processor elaborates the inner key material. Once this operation has completed, it is
ready to accept the message bit string as described in Section 29.3.4: Message data
feeding.
4. After the final hash round, the hash processor returns “ready” to indicate that it is ready
to receive the key to be used for the outer hash function (normally, this key is the same
as the one used for the inner hash function). When the last word of the key is entered
and computation starts, the HMAC result can be found in the HASH_H0...HASH_H7
registers.
Note: The computation latency of the HMAC primitive depends on the lengths of the keys and
message, as described in Section 29.5: HASH processing time.
HMAC example
Below is an example of HMAC SHA-1 algorithm (ALGO=”00” and MODE=”1” in HASH_CR)
as specified by NIST.
Let us assume that the original message is the ASCII binary-coded form of “Sample
message for keylen=blocklen”, of length L = 34 bytes. If the HASH is programmed in
no swapping mode (DATATYPE=00 in HASH_CR), the following data must be loaded
sequentially into HASH_DIN register:
1. Inner hash key input (lenght=64, i.e. no padding), specified by NIST. As key
lenght=64, LKEY bit is set to 0 in HASH_CR register
00010203 04050607 08090A0B 0C0D0E0F 10111213 14151617
18191A1B 1C1D1E1F 20212223 24252627 28292A2B 2C2D2E2F

Table of Contents

Questions and Answers:

Question and Answer IconNeed help?

Do you have a question about the ST STM32L4 5 Series and is the answer not in the manual?

ST STM32L4 5 Series Specifications

General IconGeneral
BrandST
ModelSTM32L4 5 Series
CategoryMicrocontrollers
LanguageEnglish

Related product manuals