Skip to content
Snippets Groups Projects
Commit e8f39da1 authored by Alexander Holodov's avatar Alexander Holodov
Browse files

18 prevent useless allocates

parent 75fa0992
No related branches found
No related tags found
1 merge request!1918: added c++ library
......@@ -103,17 +103,17 @@ std::vector<unsigned char> generateRandomBytes(int size) {
}
std::string toHex(const std::vector<unsigned char> &data) {
std::unique_ptr<unsigned char[]> hex(new unsigned char[((data.size() + 2)/3) * 4 + 1]);
int len = EVP_EncodeBlock(hex.get(), data.data(), data.size());
std::string hex(((data.size() + 2)/3) * 4 + 1, 0);
int len = EVP_EncodeBlock((unsigned char*)&hex[0], data.data(), data.size());
if (len < 0) {
throw std::runtime_error("can't encode salt");
}
return std::string((const char*)hex.get());
return hex;
}
std::vector<unsigned char> toBin(const std::string &data) {
std::unique_ptr<unsigned char[]> bin(new unsigned char[data.length()]);
auto len = EVP_DecodeBlock((unsigned char*)bin.get(), (const unsigned char*)data.c_str(), data.length());
std::vector<unsigned char> bin(data.length());
auto len = EVP_DecodeBlock(&bin[0], (const unsigned char*)data.c_str(), data.length());
for (auto rit=data.rbegin(); rit!=data.rend(); ++rit) {
if (*rit != '=') {
break;
......@@ -125,7 +125,8 @@ std::vector<unsigned char> toBin(const std::string &data) {
throw std::runtime_error("can't decode base64");
}
return std::vector<unsigned char>((unsigned char*)bin.get(), (unsigned char*)bin.get() + len);
bin.resize(len);
return bin;
}
std::string SecretStore::encrypt(const std::vector<unsigned char> &value, const std::string &pass) {
......@@ -182,10 +183,9 @@ std::vector<unsigned char> SecretStore::crypt(AES_KEY *aes_key, const std::vecto
memset(ecount_buf, 0, sizeof(ecount_buf));
unsigned int num = 0;
std::unique_ptr<unsigned char[]> output(new unsigned char[input.size()]);
AES_ctr128_encrypt(input.data(), output.get(), input.size(), aes_key, ivec, ecount_buf, &num);
return std::vector<unsigned char>((unsigned char*)output.get(), (unsigned char*)output.get() + input.size());
std::vector<unsigned char> output(input.size());
AES_ctr128_encrypt(input.data(), &output[0], input.size(), aes_key, ivec, ecount_buf, &num);
return output;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment