_pub_chiper.h
9.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
/*
* _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_ */