diff --git a/cpp/secret_store.hpp b/cpp/secret_store.hpp index c7c66c1c642d7cb733f9b14aa910b55935c8d06a..405fc5e88bd23d7f1e23c7a62034b776b1fb7a9f 100644 --- a/cpp/secret_store.hpp +++ b/cpp/secret_store.hpp @@ -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; }