_pub_chiper.h 9.85 KB
/*
 * _pub_chiper.h
 *
 *  Created on: 2013-3-25
 *      Author: mengkefeng
 *      函数名编号:GA
 */

#ifndef PUB_CHIPER_H_
#define PUB_CHIPER_H_
#ifdef __cplusplus
extern "C"
{
#endif
#ifndef  IPT_BASIC_TYPE_DEF
#define  IPT_BASIC_TYPE_DEF
typedef unsigned int PLUINT32;
typedef unsigned short PLUINT16;
typedef unsigned char PLBYTE;
typedef unsigned char PLUINT8;
typedef signed int PLINT32;
typedef signed short PLINT16;
typedef signed char PLINT8;
typedef long long PLINT64;
typedef const char PLFNAME;
#define PLTRUE 1
#define PLFALSE 0
#define PLNULL 0
#endif
////////////////////////////////////////////////////////////
#define s_iptchiper GA01
#define s_cpr_AES_Header GA02
#define s_cpr_RSA_Header GA03

#define cpr_Chiper_Init GA04//();
#define cpr_Chiper_Destroy GA05//(s_iptchiper* _iptchiper);
#define cpr_B64_Buffer_Need GA06//(s_iptchiper* _iptchiper, PLUINT32 input_size);
#define cpr_B64_Encode GA07//(s_iptchiper* _iptchiper,PLBYTE* buffer, PLUINT32 input_size,PLUINT32 B64_seeds);
#define cpr_B64_Decode GA08//(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 B64_seeds);
#define cpr_AES_Buffer_Need GA09//(s_iptchiper* _iptchiper,PLUINT32 content_len);
#define cpr_AES_Encrypt GA10//(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 buffer_len);
#define cpr_AES_Encrypt_V2 GA11//(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 buffer_len);
#define cpr_AES_Decrypt GA12//(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 buffer_len);
#define cpr_AESB64_Buffer_Need GA13//(s_iptchiper* _iptchiper,PLUINT32 content_len);
#define cpr_AESB64_Encrypt GA14//(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 buffer_len);
#define cpr_AESB64_Encrypt_V2 GA15//(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 buffer_len);
#define cpr_AESB64_Decrypt GA16//(s_iptchiper* _iptchiper,PLBYTE* buffer);
#define cpr_RSA_Buffer_Need GA17//(s_iptchiper* _iptchiper,PLUINT32 content_len);
#define cpr_RSA_EncryptByDK GA18//(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 buffer_len);
#define cpr_RSA_DecryptByDK GA19//(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 buffer_len);

///GA60
////////////////////////////////////////////////////////////
#ifndef s_iptchiper_DEF_
#define s_iptchiper_DEF_
typedef struct s_iptchiper s_iptchiper;
#endif
////////////////////////////////////////////////////////////
#pragma pack (4) 
#ifndef s_cpr_AES_Header_DEF_
#define s_cpr_AES_Header_DEF_
typedef struct s_cpr_AES_Header s_cpr_AES_Header;
#endif
struct s_cpr_AES_Header
{
	PLUINT32 content_len;
	PLBYTE userkey[16];///(输入时可填充随机数!!!)
};
#pragma pack ()

#pragma pack (4) 
#ifndef s_cpr_RSA_Header_DEF_
#define s_cpr_RSA_Header_DEF_
typedef struct s_cpr_RSA_Header s_cpr_RSA_Header;
#endif
struct s_cpr_RSA_Header
{
	PLUINT32 content_len;
	PLUINT32 reserved[7];///(输入时可填充随机数!!!)
};
#pragma pack ()


////////////////////////////////////////////////////////////
/**创建加密/解密工具句柄
* @return 加密/解密工具句柄
*/
s_iptchiper*  cpr_Chiper_Init(void);

/**释放加密/解密工具句柄
* @param _iptchiper — 加密/解密工具句柄
*/
void cpr_Chiper_Destroy(s_iptchiper* _iptchiper);

////////////////////////////////////////////////////////////
/////Base64 编码 解码

/**获取Base64编码所需空间
* @param _iptchiper — 加密/解密工具句柄
* @param input_size — 待编码数据的原始大小
* @return Base64编码所需空间; 若返回值<0, 说明输入参数有误
*/
PLINT32 cpr_B64_Buffer_Need(s_iptchiper* _iptchiper, PLUINT32 input_size);

/**使用Base64对指定数据进行编码
* @param _iptchiper — 加密/解密工具句柄
* @param buffer - 待编码的数据,执行本函数后将存放编码后的数据,需分配足够内存(通过cpr_B64_Buffer_Need获取)
* @param input_size — 待编码数据的原始大小
* @param B64_seeds — 用于混淆的随机数种子
* @return >0时表示编码后数据的长度;<0表示输入参数有误
*/
PLINT32 cpr_B64_Encode(s_iptchiper* _iptchiper,PLBYTE* buffer, PLUINT32 input_size,PLUINT32 B64_seeds);

/**获取系统词库版本号.(对应为云优化词库的ServerID)
* @param _iptchiper — 加密/解密工具句柄
* @param buffer - 待解码的数据,执行本函数后将存放解码后的数据
* @param B64_seeds — 加密时使用的随机数种子
* @return >0时表示解码后数据的长度;<0表示输入参数有误
*/
PLINT32 cpr_B64_Decode(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 B64_seeds);

////////////////////////////////////////////////////////////
/////AES 加密 解密////////////////////////////////////////

/**获取使用AES加密所需空间
* @param _iptchiper — 加密/解密工具句柄
* @param content_len — 待编码数据的原始大小(一次最多加密16777215字节数据(约16M))
* @return >0表示使用AES加密所需空间;<0表示输入参数有误
*/
PLINT32 cpr_AES_Buffer_Need(s_iptchiper* _iptchiper,PLUINT32 content_len);

/**使用AES对指定数据进行加密(第一种加密方式)
* @param _iptchiper — 加密/解密工具句柄
* @param buffer - 待加密的数据(前20个字节为头文件, 格式参照s_cpr_AES_Header, 后面为实际数据), 执行本函数后将存放加密后的数据, 需分配足够内存(通过cpr_AES_Buffer_Need获取)
* @param buffer_len — 待加密数据的大小(通过cpr_AES_Buffer_Need获取)
* @return =0时表示加密成功;<0表示输入参数有误
*/
PLINT32 cpr_AES_Encrypt(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 buffer_len);

/**使用AES对指定数据进行加密(第二种加密方式)
* @param _iptchiper — 加密/解密工具句柄
* @param buffer — 待加密的数据(前20个字节为头文件, 格式参照s_cpr_AES_Header, 后面为实际数据), 执行本函数后将存放解密后的数据, 需分配足够内存(通过cpr_AES_Buffer_Need获取)
* @param buffer_len — 待加密数据的大小(通过cpr_AES_Buffer_Need获取)
* @return =0时表示加密成功;<0表示输入参数有误
*/
PLINT32 cpr_AES_Encrypt_V2(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 buffer_len);

/**使用AES对指定数据进行解密(注意::只有提供给服务端的版本可以解密第二种方式)
* @param _iptchiper — 加密/解密工具句柄
* @param buffer - 待解密的数据
* @param buffer_len — 待解密数据的大小
* @return =0时表示解密成功, 且采用第一种方式加密;(=1时表示解密成功, 且采用第二种方式加密,只有提供给服务端的版本可以解密第二种方式);<0表示输入参数有误
*/
PLINT32 cpr_AES_Decrypt(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 buffer_len);

////////////////////////////////////////////////////////////
/////AES_B64(相当于AES+B64(seed=0) 加密 解密////////////////////////////////////////

/**获取使用AESB64加密所需空间
* @param _iptchiper — 加密/解密工具句柄
* @param content_len — 待加密数据的原始大小
* @return >0表示使用AESB64加密所需空间;<0表示输入参数有误
*/
PLINT32 cpr_AESB64_Buffer_Need(s_iptchiper* _iptchiper,PLUINT32 content_len);

/**使用AESB64对指定数据进行加密(第一种加密方式)
* @param _iptchiper — 加密/解密工具句柄
* @param buffer - 待加密的数据(前20个字节为头文件, 格式参照s_cpr_AES_Header, 后面为实际数据), 执行本函数后将存放加密后的数据, 需分配足够内存(通过cpr_AESB64_Buffer_Need获取)
* @param buffer_len — 待加密数据的大小(通过cpr_AESB64_Buffer_Need获取)
* @return =0时表示加密成功;<0表示输入参数有误
*/
PLINT32 cpr_AESB64_Encrypt(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 buffer_len);

/**使用AESB64对指定数据进行加密(第二种加密方式,这种加密方式只有服务端可以解密)
* @param _iptchiper — 加密/解密工具句柄
* @param buffer - 待加密的数据(前20个字节为头文件, 格式参照s_cpr_AES_Header, 后面为实际数据), 执行本函数后将存放加密后的数据, 需分配足够内存(通过cpr_AESB64_Buffer_Need获取)
* @param buffer_len — 待加密数据的大小(通过cpr_AESB64_Buffer_Need获取)
* @return =0时表示加密成功;<0表示输入参数有误
*/
PLINT32 cpr_AESB64_Encrypt_V2(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 buffer_len);

/**使用AESB64对指定数据进行解密(注意::只有提供给服务端的版本可以解密第二种方式)
* @param _iptchiper — 加密/解密工具句柄
* @param buffer - 待解密的数据,执行本函数后将存放解密后的数据
* @return =0时表示解密成功, 且采用第一种方式加密;(=1时表示解密成功, 且采用第二种方式加密,只有提供给服务端的版本可以解密第二种方式);<0表示输入参数有误
*/
PLINT32 cpr_AESB64_Decrypt(s_iptchiper* _iptchiper,PLBYTE* buffer);
////////////////////////////////////////////////////////////
////RSA加密

/**获取使用RSA加密所需空间
* @param _iptchiper — 加密/解密工具句柄
* @param content_len — 待加密数据的原始大小(一次最多加密16777215 字节数据(约16M))
* @return >0表示使用RSA加密所需空间;<0表示输入参数有误
*/
PLINT32 cpr_RSA_Buffer_Need(s_iptchiper* _iptchiper,PLUINT32 content_len);

/**使用内置公钥RSA对指定数据进行加密
* @param _iptchiper — 加密/解密工具句柄
* @param buffer — 待加密的数据(前32个字节为头文件, 格式参照s_cpr_RSA_Header, 后面为实际数据), 执行本函数后将存放加密后的数据, 需分配足够内存(通过cpr_RSA_Buffer_Need获取)
* @param buffer_len — 待加密数据的大小(通过cpr_RSA_Buffer_Need获取)
* @return =0时表示加密成功;<0表示输入参数有误
*/
PLINT32 cpr_RSA_EncryptByDK(s_iptchiper* _iptchiper,PLBYTE* buffer,PLUINT32 buffer_len);

#ifdef CHPR_FOR_SERVER
PLINT32 cpr_RSA_DecryptByDK(s_iptchiper* _iptchiper, PLBYTE* buffer, PLUINT32 buffer_len);////使用内置私钥解密(只针对服务端)
#endif
////////////////////////////////////////////////////////////
#ifdef __cplusplus
}
#endif
#endif /* PUB_CHIPER_H_ */