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