September 2013 DocID14989 Rev 4 1/131
UM0586
User manual
STM32 Cryptographic Library
Introduction
This manual describes the API of the STM32 cryptographic library (STM32-CRYP-LIB) that
supports the following cryptographic algorithms:
AES-128, AES-192, AES-256 bits. Supported modes are:
– ECB (Electronic Codebook Mode)
– CBC (Cipher-Block Chaining) with support for ciphertext stealing
– CTR (CounTer Mode)
– CCM (Counter with CBC-MAC)
– GCM (Galois Counter Mode)
–CMAC
– KEY WRAP
ARC4
DES, TripleDES. Supported modes are:
– ECB (Electronic Codebook Mode)
– CBC (Cipher-Block Chaining)
HASH functions with HMAC support:
–MD5
–SHA-1
– SHA-224
– SHA-256
Random engine based on DRBG-AES-128
RSA signature functions with PKCS#1v1.5
ECC (Elliptic Curve Cryptography):
– Key generation
– Scalar multiplication (the base for ECDH)
– ECDSA
These cryptographic algorithms can run in the series STM32F1, STM32 L1, STM32F2,
STM32F4, STM32F0 and STM32F3 with hardware enhancement accelerators.
www.st.com
Contents UM0586
2/131 DocID14989 Rev 4
Contents
1 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2 STM32 cryptographic library package presentation . . . . . . . . . . . . . . 12
2.1 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2 Package organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.1 Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.2 Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.3 Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3 DES and Triple-DES algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2 DES library functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.1 DES_DDD_Encrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.2 DES_DDD_Encrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.3 DES_DDD_Encrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.4 DES_DDD_Decrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.5 DES_DDD_Decrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.6 DES_DDD_Decrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3 TDES library functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3.1 TDES_TTT_Encrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3.2 TDES_TTT_Encrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3.3 TDES_TTT_Encrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3.4 TDES_TTT_Decrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3.5 TDES_TTT_Decrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.6 TDES_TTT_Decrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.4 DES with ECB mode example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4 AES algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.2 AES library functions (ECB, CBC and CTR) . . . . . . . . . . . . . . . . . . . . . . 31
4.2.1 AES_AAA_Encrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2.2 AES_AAA_Encrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.2.3 AES_AAA_Encrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.2.4 AES_AAA_Decrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
DocID14989 Rev 4 3/131
UM0586 Contents
4.2.5 AES_AAA_Decrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2.6 AES_AAA_Decrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.3 AES GCM library functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.3.1 AES_GCM_Encrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.3.2 AES_GCM_Header_Append function . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3.3 AES_GCM_Encrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3.4 AES_GCM_Encrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3.5 AES_GCM_Decrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3.6 AES_GCM_Decrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.3.7 AES_GCM_Decrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.4 AES KeyWrap library functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.4.1 AES_KeyWrap_Encrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.4.2 AES_KeyWrap_Encrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . 50
4.4.3 AES_KeyWrap_Encrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . 50
4.4.4 AES_KeyWrap_Decrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.4.5 AES_KeyWrap_Decrypt_Append function . . . . . . . . . . . . . . . . . . . . . . 52
4.4.6 AES_KeyWrap_Decrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . 52
4.5 AES CMAC library functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.5.1 AES_CMAC_Encrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.5.2 AES_CMAC_Encrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.5.3 AES_CMAC_Encrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.5.4 AES_CMAC_Decrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.5.5 AES_CMAC_Decrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.5.6 AES_CMAC_Decrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.6 AES CCM library functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.6.1 AES_CCM_Encrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.6.2 AES_CCM_Header_Append function . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.6.3 AES_CCM_Encrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.6.4 AES_CCM_Encrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.6.5 AES_CCM_Decrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.6.6 AES_CCM_Decrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.6.7 AES_CCM_Decrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.7 AES CBC enciphering and deciphering example . . . . . . . . . . . . . . . . . . . 67
5 ARC4 algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Contents UM0586
4/131 DocID14989 Rev 4
5.2 ARC4 library functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2.1 ARC4_Encrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.2.2 ARC4_Encrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.2.3 ARC4_Encrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.2.4 ARC4_Decrypt_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.2.5 ARC4_Decrypt_Append function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.2.6 ARC4_Decrypt_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.3 ARC4 example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6 RNG algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.2 RNG library functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.2.1 RNGreseed function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.2.2 RNGinit function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.2.3 RNGfree function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.2.4 RNGgenBytes function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.2.5 RNGgenWords function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.3 RNG example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7 HASH algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
7.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
7.2 HASH library functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
7.2.1 HHH_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.2.2 HHH_Append function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.2.3 HHH_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
7.2.4 HMAC_HHH_Init function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
7.2.5 HMAC_HHH_Append function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
7.2.6 HMAC_HHH_Finish function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.3 HASH SHA1 example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
8 RSA algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
8.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
8.2 RSA library functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
8.2.1 RSA_PKCS1v15_Sign function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
8.2.2 RSA_PKCS1v15_Verify function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
8.3 RSA Signature generation/verification example . . . . . . . . . . . . . . . . . . . . 95
DocID14989 Rev 4 5/131
UM0586 Contents
9 ECC algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9.2 ECC library functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9.2.1 ECCinitEC function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
9.2.2 ECCfreeEC function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.2.3 ECCinitPoint function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.2.4 ECCfreePoint function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
9.2.5 ECCsetPointCoordinate function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
9.2.6 ECCgetPointCoordinate function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
9.2.7 ECCgetPointFlag function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
9.2.8 ECCsetPointFlag function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
9.2.9 ECCcopyPoint function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
9.2.10 ECCinitPrivKey function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
9.2.11 ECCfreePrivKey function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
9.2.12 ECCsetPrivKeyValue function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
9.2.13 ECCgetPrivKeyValue function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
9.2.14 ECCscalarMul function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
9.2.15 ECCsetPointGenerator function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
9.2.16 ECDSAinitSign function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
9.2.17 ECDSAfreeSign function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
9.2.18 ECDSAsetSignature function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
9.2.19 ECDSAgetSignature function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
9.2.20 ECDSAverify function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
9.2.21 ECCvalidatePubKey function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
9.2.22 ECCkeyGen function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
9.2.23 ECDSAsign function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
9.3 ECC example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
10 STM32 encryption library settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
10.1 Configuration parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115
10.2 STM32_CryptoLibraryVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117
11 Cryptographic library performance and memory requirements . . . . 118
11.1 Symmetric key algorithms performance results . . . . . . . . . . . . . . . . . . . .118
11.1.1 Software optimized for speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
11.1.2 Hardware enhanced . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121