MAX32665 SDK Documentation  0.2
Software Development Kit Overview and API Documentation
cipher.h
1 
6 /* ****************************************************************************
7  * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
8  *
9  * Permission is hereby granted, free of charge, to any person obtaining a
10  * copy of this software and associated documentation files (the "Software"),
11  * to deal in the Software without restriction, including without limitation
12  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13  * and/or sell copies of the Software, and to permit persons to whom the
14  * Software is furnished to do so, subject to the following conditions:
15  *
16  * The above copyright notice and this permission notice shall be included
17  * in all copies or substantial portions of the Software.
18  *
19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22  * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
23  * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25  * OTHER DEALINGS IN THE SOFTWARE.
26  *
27  * Except as contained in this notice, the name of Maxim Integrated
28  * Products, Inc. shall not be used except as stated in the Maxim Integrated
29  * Products, Inc. Branding Policy.
30  *
31  * The mere transfer of this software does not imply any licenses
32  * of trade secrets, proprietary technology, copyrights, patents,
33  * trademarks, maskwork rights, or any other form of intellectual
34  * property whatsoever. Maxim Integrated Products, Inc. retains all
35  * ownership rights.
36  *
37  * $Date: 2018-11-08 15:08:58 -0600 (Thu, 08 Nov 2018) $
38  * $Revision: 39056 $
39  *
40  *************************************************************************** */
41 
42 #ifndef _CIPHER_H_
43 #define _CIPHER_H_
44 
45 #include <stdint.h>
46 #include "tpu_regs.h"
47 
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51 
64 /* ****** MACROS ****** */
65 #define DES_DATA_LEN 8 // The byte length for DES data block
66 #define AES_DATA_LEN 16 // The byte length for AES data block
67 #define MAX_KEY_SIZE 32 // Defines maximum key length
68 #define MXC_AES_DATA_LEN (128 / 8)
69 #define MXC_AES_KEY_128_LEN (128 / 8)
70 #define MXC_AES_KEY_192_LEN (192 / 8)
71 #define MXC_AES_KEY_256_LEN (256 / 8)
73 /***************************************************************************************************************
74  DATA STRUCTURES FOR CRYPTO INITIALIZATION
75 ***************************************************************************************************************/
76 
79 typedef enum {
80  TPU_CIPHER_DIS = MXC_V_TPU_CIPHER_CTRL_CIPHER_DIS, // Disable
81  TPU_CIPHER_AES128 = MXC_V_TPU_CIPHER_CTRL_CIPHER_AES128, // Select AES-128
82  TPU_CIPHER_AES192 = MXC_V_TPU_CIPHER_CTRL_CIPHER_AES192, // Select AES-192
83  TPU_CIPHER_AES256 = MXC_V_TPU_CIPHER_CTRL_CIPHER_AES256, // Select AES-256
84  TPU_CIPHER_DES = MXC_V_TPU_CIPHER_CTRL_CIPHER_DES, // Select DES
85  TPU_CIPHER_TDES = MXC_V_TPU_CIPHER_CTRL_CIPHER_TDES // Select TDEA
87 
91 typedef enum {
92  TPU_MODE_ECB = MXC_V_TPU_CIPHER_CTRL_MODE_ECB, // Select ECB
93  TPU_MODE_CBC = MXC_V_TPU_CIPHER_CTRL_MODE_CBC, // Select CBC
94  TPU_MODE_CFB = MXC_V_TPU_CIPHER_CTRL_MODE_CFB, // Select CFB
95  TPU_MODE_CTR = MXC_V_TPU_CIPHER_CTRL_MODE_CTR // Select CTR
97 
98 /***************************************************************************************************************
99  DRIVER EXPOSED API's
100 ***************************************************************************************************************/
104 void TPU_Cipher_Reset(void);
105 
109 void TPU_Shutdown(void);
110 
117 int TPU_Cipher_Config(tpu_modesel_t mode, tpu_ciphersel_t cipher);
118 
131 int TPU_DES_Encrypt(const char *plaintext, const char *iv, const char *key, tpu_modesel_t mode, unsigned int data_size, char *outptr);
132 
145 int TPU_DES_Decrypt(const char *ciphertext, const char *iv, const char *key, tpu_modesel_t mode, unsigned int data_size, char *outptr);
146 
159 int TPU_TDES_Encrypt(const char *plaintext, const char *iv, const char *key, tpu_modesel_t mode, unsigned int data_size, char *outptr);
160 
173 int TPU_TDES_Decrypt(const char *ciphertext, const char *iv, const char *key, tpu_modesel_t mode, unsigned int data_size, char *outptr);
174 
189 int TPU_AES_Encrypt(const char *plaintext, const char *iv, const char *key, tpu_ciphersel_t cipher, tpu_modesel_t mode, unsigned int data_size, char *outptr);
190 
205 int TPU_AES_Decrypt(const char *ciphertext, const char *iv, const char *key, tpu_ciphersel_t cipher, tpu_modesel_t mode, unsigned int data_size, char *outptr);
206 
207 #ifdef __cplusplus
208 }
209 #endif
210 
212 #endif /* _CIPHER_H_ */
int TPU_TDES_Decrypt(const char *ciphertext, const char *iv, const char *key, tpu_modesel_t mode, unsigned int data_size, char *outptr)
The TDES decryption process.
#define MXC_V_TPU_CIPHER_CTRL_CIPHER_DIS
CIPHER_CTRL_CIPHER_DIS Value.
Definition: tpu_regs.h:238
void TPU_Shutdown(void)
Shutdown crypto controller.
#define MXC_V_TPU_CIPHER_CTRL_MODE_ECB
CIPHER_CTRL_MODE_ECB Value.
Definition: tpu_regs.h:253
tpu_ciphersel_t
Enumeration type for the Crypto Cipher Operation(128/192/256-bit key)
Definition: cipher.h:79
void TPU_Cipher_Reset(void)
Reset the crypto accelerator.
int TPU_TDES_Encrypt(const char *plaintext, const char *iv, const char *key, tpu_modesel_t mode, unsigned int data_size, char *outptr)
The TDES encryption process.
#define MXC_V_TPU_CIPHER_CTRL_CIPHER_TDES
CIPHER_CTRL_CIPHER_TDES Value.
Definition: tpu_regs.h:248
#define MXC_V_TPU_CIPHER_CTRL_MODE_CTR
CIPHER_CTRL_MODE_CTR Value.
Definition: tpu_regs.h:261
#define MXC_V_TPU_CIPHER_CTRL_MODE_CBC
CIPHER_CTRL_MODE_CBC Value.
Definition: tpu_regs.h:255
int TPU_AES_Decrypt(const char *ciphertext, const char *iv, const char *key, tpu_ciphersel_t cipher, tpu_modesel_t mode, unsigned int data_size, char *outptr)
The AES decryption process.
int TPU_Cipher_Config(tpu_modesel_t mode, tpu_ciphersel_t cipher)
Configure crypto cipher operation for different modes.
#define MXC_V_TPU_CIPHER_CTRL_CIPHER_AES192
CIPHER_CTRL_CIPHER_AES192 Value.
Definition: tpu_regs.h:242
tpu_modesel_t
Enumeration type for the Crypto Mode Select.
Definition: cipher.h:91
#define MXC_V_TPU_CIPHER_CTRL_CIPHER_DES
CIPHER_CTRL_CIPHER_DES Value.
Definition: tpu_regs.h:246
#define MXC_V_TPU_CIPHER_CTRL_CIPHER_AES128
CIPHER_CTRL_CIPHER_AES128 Value.
Definition: tpu_regs.h:240
int TPU_DES_Decrypt(const char *ciphertext, const char *iv, const char *key, tpu_modesel_t mode, unsigned int data_size, char *outptr)
The DES decryption process.
int TPU_DES_Encrypt(const char *plaintext, const char *iv, const char *key, tpu_modesel_t mode, unsigned int data_size, char *outptr)
The DES encryption process.
int TPU_AES_Encrypt(const char *plaintext, const char *iv, const char *key, tpu_ciphersel_t cipher, tpu_modesel_t mode, unsigned int data_size, char *outptr)
The AES encryption process.
#define MXC_V_TPU_CIPHER_CTRL_MODE_CFB
CIPHER_CTRL_MODE_CFB Value.
Definition: tpu_regs.h:257
#define MXC_V_TPU_CIPHER_CTRL_CIPHER_AES256
CIPHER_CTRL_CIPHER_AES256 Value.
Definition: tpu_regs.h:244