1 /*****************************************************************************
2 *         Nations Microcontroller Software Support
3 * ----------------------------------------------------------------------------
4 * Copyright (c) 2020, Nations Corporation
5 *
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions are met:
10 *
11 * - Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the disclaimer below.
13 *
14 * Nations's name may not be used to endorse or promote products derived from
15 * this software without specific prior written permission.
16 *
17 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY Nations "AS IS" AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
20 * DISCLAIMED. IN NO EVENT SHALL Nations BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
23 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
26 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 * ****************************************************************************/
28 /*****************************************************************************
29 * File Name: Dn32l43x_des.h
30 * Function: Declaring DES algorithm library API
31 * version: V1.2.0
32 * Author: zhang.zhenshan
33 * date: 2020-4-8
34 * ****************************************************************************/
35 
36 
37 #ifndef _N32L43X_DES_H_
38 #define _N32L43X_DES_H_
39 
40 #include <stdint.h>
41 
42 #define DES_ECB (0x11111111)
43 #define DES_CBC (0x22222222)
44 
45 
46 #define DES_ENC  (0x33333333)
47 #define DES_DEC  (0x44444444)
48 
49 #define DES_KEY  (0x55555555)
50 #define TDES_2KEY  (0x66666666)
51 #define TDES_3KEY  (0x77777777)
52 
53 enum DES
54 {
55   DES_Crypto_OK = 0x0,      //DES/TDES opreation success
56     DES_Init_OK   = 0x0,    //DES/TDES Init opreation success
57     DES_Crypto_ModeError = 0x5a5a5a5a,      //Working mode error(Neither ECB nor CBC)
58     DES_Crypto_EnOrDeError,     //En&De error(Neither encryption nor decryption)
59     DES_Crypto_ParaNull,        // the part of input(output/iv) Null
60     DES_Crypto_LengthError,     //the length of input message must be 2 times and cannot be zero
61     DES_Crypto_KeyError,  //keyMode error(Neither DES_KEY nor TDES_2KEY nor TDES_3KEY)
62     DES_Crypto_UnInitError,   //DES/TDES uninitialized
63 };
64 
65 typedef struct
66 {
67         uint32_t *in;   // the  part of input to be encrypted or decrypted
68         uint32_t *iv;   // the  part of initial vector
69         uint32_t *out;  // the  part of out
70         uint32_t *key;  // the  part of key
71         uint32_t inWordLen;  // the length(by word) of plaintext or cipher
72         uint32_t En_De; // 0x33333333- encrypt, 0x44444444 - decrypt
73         uint32_t Mode;  // 0x11111111 - ECB, 0x22222222 - CBC
74         uint32_t keyMode; //TDES key mode: 0x55555555-key,0x66666666-2key, 0x77777777-3key
75 }DES_PARM;
76 
77  /**
78  * @brief DES_Init
79  * @return DES_Init_OK, DES/TDES Init success; othets: DES/TDES Init fail
80  * @note
81  */
82 uint32_t DES_Init(DES_PARM *parm);
83 
84 /**
85  * @brief DES crypto
86  * @param[in] parm pointer to DES/TDES context and the detail please refer to struct DES_PARM in DES.h
87  * @return DES_Crypto_OK, DES/TDES crypto success; othets: DES/TDES crypto fail(reference to the definition by enum variation)
88  * @note  1.Please refer to the demo in user guidance before using this function
89  *        2.Input and output can be the same buffer
90  *        3. IV can be NULL when ECB mode
91  *        4. The word lengrh of message must be as times as 2.
92  *        5. If the input is in byte, make sure align by word.
93  */
94 uint32_t DES_Crypto(DES_PARM *parm);
95 
96 /**
97  * @brief DES close
98  * @return none
99  * @note  if you want to close DES algorithm, this function can be recalled.
100  */
101 void DES_Close(void);
102 
103 /**
104  * @brief Get DES/TDES lib version
105  * @param[out] type pointer one byte type information represents the type of the lib, like Commercial version.\
106  * @Bits 0~4 stands for Commercial (C), Security (S), Normal (N), Evaluation (E), Test (T), Bits 5~7 are reserved. e.g. 0x09 stands for CE version.
107  * @param[out] customer pointer one byte customer information represents customer ID. for example, 0x00 stands for standard version, 0x01 is for Tianyu customized version...
108  * @param[out] date pointer array which include three bytes date information. If the returned bytes are 18,9,13,this denotes September 13,2018
109  * @param[out] version pointer one byte version information represents develop version of the lib. e.g. 0x12 denotes version 1.2.
110  * @return none
111  * @1.You can recall this function to get DES/TDES lib information
112  */
113 void DES_Version(uint8_t *type, uint8_t *customer, uint8_t date[3], uint8_t *version);
114 
115 #endif
116