23 #include "CryptoHandler.h"
25 CryptoHandler::CryptoHandler() {
30 CryptoHandler::~CryptoHandler() {
34 char* CryptoHandler::base64decode(
unsigned char *input,
int length)
38 char *buffer = (
char *)malloc(length);
39 memset(buffer, 0, length);
41 b64 = BIO_new(BIO_f_base64());
42 BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
43 bmem = BIO_new_mem_buf(input, length);
44 bmem = BIO_push(b64, bmem);
46 BIO_read(bmem, buffer, length);
53 char* CryptoHandler::base64encode(
const unsigned char *input,
int length)
58 b64 = BIO_new(BIO_f_base64());
59 bmem = BIO_new(BIO_s_mem());
60 b64 = BIO_push(b64, bmem);
61 BIO_write(b64, input, length);
63 BIO_get_mem_ptr(b64, &bptr);
65 char *buff = (
char *)malloc(bptr->length);
66 memcpy(buff, bptr->data, bptr->length-1);
67 buff[bptr->length-1] = 0;
74 char* CryptoHandler::hmac_sha1(
char* datain,
char* keyin,
bool base64)
76 unsigned char* key = (
unsigned char*) keyin;
77 unsigned char* data = (
unsigned char*) datain;
78 unsigned char* result;
79 unsigned int result_len = 20;
82 result = (
unsigned char*) malloc(
sizeof(
char) * result_len);
84 ENGINE_load_builtin_engines();
85 ENGINE_register_all_complete();
88 HMAC_Init_ex(&ctx, key, strlen(keyin), EVP_sha1(), NULL);
89 HMAC_Update(&ctx, data, strlen(datain));
90 HMAC_Final(&ctx, result, &result_len);
91 HMAC_CTX_cleanup(&ctx);
95 return base64encode(result,result_len);
99 char* CryptoHandler::hmac_sha256(
char* datain,
char* keyin,
bool base64)
101 unsigned char* key = (
unsigned char*) keyin;
102 unsigned char* data = (
unsigned char*) datain;
103 unsigned char* result;
104 unsigned int result_len = 32;
107 result = (
unsigned char*) malloc(
sizeof(
char) * result_len);
109 ENGINE_load_builtin_engines();
110 ENGINE_register_all_complete();
113 HMAC_Init_ex(&ctx, key, strlen(keyin), EVP_sha256(), NULL);
114 HMAC_Update(&ctx, data, strlen(datain));
115 HMAC_Final(&ctx, result, &result_len);
116 HMAC_CTX_cleanup(&ctx);
119 return base64encode(result,result_len);
120 return (
char*)result;
123 char* CryptoHandler::hmac_sha384(
char* datain,
char* keyin,
bool base64)
125 unsigned char* key = (
unsigned char*) keyin;
126 unsigned char* data = (
unsigned char*) datain;
127 unsigned char* result;
128 unsigned int result_len = 48;
131 result = (
unsigned char*) malloc(
sizeof(
char) * result_len);
133 ENGINE_load_builtin_engines();
134 ENGINE_register_all_complete();
137 HMAC_Init_ex(&ctx, key, strlen(keyin), EVP_sha384(), NULL);
138 HMAC_Update(&ctx, data, strlen(datain));
139 HMAC_Final(&ctx, result, &result_len);
140 HMAC_CTX_cleanup(&ctx);
143 return base64encode(result,result_len);
144 return (
char*)result;
147 char* CryptoHandler::hmac_sha512(
char* datain,
char* keyin,
bool base64)
149 unsigned char* key = (
unsigned char*) keyin;
150 unsigned char* data = (
unsigned char*) datain;
151 unsigned char* result;
152 unsigned int result_len = 64;
155 result = (
unsigned char*) malloc(
sizeof(
char) * result_len);
157 ENGINE_load_builtin_engines();
158 ENGINE_register_all_complete();
161 HMAC_Init_ex(&ctx, key, strlen(keyin), EVP_sha512(), NULL);
162 HMAC_Update(&ctx, data, strlen(datain));
163 HMAC_Final(&ctx, result, &result_len);
164 HMAC_CTX_cleanup(&ctx);
167 return base64encode(result,result_len);
168 return (
char*)result;
172 string CryptoHandler::urlDecode(
string str)
175 StringUtil::replaceAll(strret,
"%25",
"%");
176 StringUtil::replaceAll(strret,
"%3D",
"=");
177 StringUtil::replaceAll(strret,
"%3A",
":");
178 StringUtil::replaceAll(strret,
"%20",
" ");
179 StringUtil::replaceAll(strret,
"%5E",
"^");
180 StringUtil::replaceAll(strret,
"%26",
"&");
181 StringUtil::replaceAll(strret,
"%60",
"`");
182 StringUtil::replaceAll(strret,
"%7B",
"{");
183 StringUtil::replaceAll(strret,
"%7D",
"}");
184 StringUtil::replaceAll(strret,
"%7C",
"|");
185 StringUtil::replaceAll(strret,
"%5D",
"]");
186 StringUtil::replaceAll(strret,
"%5B",
"[");
187 StringUtil::replaceAll(strret,
"%22",
"\"");
188 StringUtil::replaceAll(strret,
"%3C",
"<");
189 StringUtil::replaceAll(strret,
"%3E",
">");
190 StringUtil::replaceAll(strret,
"%5C",
"\\");
191 StringUtil::replaceAll(strret,
"%23",
"#");
192 StringUtil::replaceAll(strret,
"%3F",
"?");
193 StringUtil::replaceAll(strret,
"%2F",
"/");
194 StringUtil::replaceAll(strret,
"%2B",
"+");
198 string CryptoHandler::urlEncode(
string str)
201 int len = str.length();
202 for(
int i=0; i<len; i++)
207 strret.append(
"%25");
210 strret.append(
"%3D");
213 strret.append(
"%3A");
216 strret.append(
"%20");
219 strret.append(
"%5E");
222 strret.append(
"%26");
225 strret.append(
"%60");
228 strret.append(
"%7B");
231 strret.append(
"%7D");
234 strret.append(
"%7C");
237 strret.append(
"%5D");
240 strret.append(
"%5B");
243 strret.append(
"%22");
246 strret.append(
"%3C");
249 strret.append(
"%3E");
252 strret.append(
"%5C");
255 strret.append(
"%23");
258 strret.append(
"%3F");
261 strret.append(
"%2F");
264 strret.append(
"%2B");
267 strret.push_back(str[i]);