diff --git a/librocksdb-sys/rocksdb/plugin/openssl/openssl_provider.cc b/librocksdb-sys/rocksdb/plugin/openssl/openssl_provider.cc index f74b8f9..429ef5a 100644 --- a/librocksdb-sys/rocksdb/plugin/openssl/openssl_provider.cc +++ b/librocksdb-sys/rocksdb/plugin/openssl/openssl_provider.cc @@ -191,28 +191,28 @@ Status OpensslCipherStream::Encrypt(uint64_t fileOffset, char* data, EVP_CIPHER_CTX_set_padding(ctx_, 0); if (offset == 0) { - //unsigned char *out = (unsigned char*)malloc(dataSize); - if( 1 != EVP_EncryptUpdate(ctx_, reinterpret_cast(data), &len, reinterpret_cast(data), static_cast(dataSize))) {err_str="Failed to encrypt."; goto error;} - //memcpy(data, out, dataSize); + unsigned char *out = (unsigned char*)malloc(dataSize); + if( 1 != EVP_EncryptUpdate(ctx_, out, &len, reinterpret_cast(data), static_cast(dataSize))) {err_str="Failed to encrypt."; goto error;} + memcpy(data, out, dataSize); //EVP_EncryptFinal_ex(ctx_, reinterpret_cast(data) + len, &len); } else { unsigned char zero_block[kBlockSize]{0}; - //unsigned char zero_block_out[kBlockSize]{0}; - if( 1 != EVP_EncryptUpdate(ctx_, zero_block, &len, zero_block, static_cast(kBlockSize))) {err_str="Failed to encrypt zero block."; goto error;} + unsigned char zero_block_out[kBlockSize]{0}; + if( 1 != EVP_EncryptUpdate(ctx_, zero_block_out, &len, zero_block, static_cast(kBlockSize))) {err_str="Failed to encrypt zero block."; goto error;} //unsigned char * end = reinterpret_cast(zero_block) + len; size_t n = std::min(kBlockSize - offset, dataSize); - for (size_t i = 0; i < n; ++i) data[i] ^= zero_block[offset + i]; - memset(zero_block, 0, kBlockSize); + for (size_t i = 0; i < n; ++i) data[i] ^= zero_block_out[offset + i]; + //memset(zero_block, 0, kBlockSize); n = kBlockSize - offset; if (dataSize > n) { char* ptr = (char*)(data + n); - //unsigned char *out = (unsigned char*)malloc(dataSize - n); - if( 1 != EVP_EncryptUpdate(ctx_, reinterpret_cast(ptr), &len, reinterpret_cast(ptr), static_cast(dataSize - n))) {err_str="Failed to encrypt remaining."; goto error;} - //memcpy(ptr, out, dataSize - n); + unsigned char *out = (unsigned char*)malloc(dataSize - n); + if( 1 != EVP_EncryptUpdate(ctx_, out, &len, reinterpret_cast(ptr), static_cast(dataSize - n))) {err_str="Failed to encrypt remaining."; goto error;} + memcpy(ptr, out, dataSize - n); //end = reinterpret_cast(ptr) + len; }