You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2018/03/28 01:35:19 UTC
[incubator-pulsar] branch master updated: Replace cached data key
from the map if present already (#1417)
This is an automated email from the ASF dual-hosted git repository.
mmerli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new 16b448f Replace cached data key from the map if present already (#1417)
16b448f is described below
commit 16b448f66d148920ade4e34dccaac4871d261eb4
Author: Andrews <sa...@gmail.com>
AuthorDate: Tue Mar 27 18:35:17 2018 -0700
Replace cached data key from the map if present already (#1417)
---
pulsar-client-cpp/lib/MessageCrypto.cc | 19 +++++++++++++++----
pulsar-client-cpp/lib/MessageCrypto.h | 3 ++-
2 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/pulsar-client-cpp/lib/MessageCrypto.cc b/pulsar-client-cpp/lib/MessageCrypto.cc
index 0cc5dec..c5f41d8 100644
--- a/pulsar-client-cpp/lib/MessageCrypto.cc
+++ b/pulsar-client-cpp/lib/MessageCrypto.cc
@@ -122,7 +122,7 @@ void MessageCrypto::removeExpiredDataKey() {
}
}
-std::string MessageCrypto::stringToHex(const std::string& inputStr, size_t len) {
+std::string MessageCrypto::stringToHex(const char* inputStr, size_t len) {
static const char* hexVals = "0123456789ABCDEF";
std::string outHex;
@@ -130,19 +130,28 @@ std::string MessageCrypto::stringToHex(const std::string& inputStr, size_t len)
outHex.push_back('0');
outHex.push_back('x');
for (size_t i = 0; i < len; ++i) {
- const unsigned char c = inputStr[i];
+ const unsigned char c = *(inputStr + i);
outHex.push_back(hexVals[c >> 4]);
outHex.push_back(hexVals[c & 15]);
}
return outHex;
}
+std::string MessageCrypto::stringToHex(const std::string& inputStr, size_t len) {
+ return stringToHex(inputStr.c_str(), len);
+}
+
Result MessageCrypto::addPublicKeyCipher(std::set<std::string>& keyNames,
const CryptoKeyReaderPtr keyReader) {
Lock lock(mutex_);
// Generate data key
RAND_bytes(dataKey_.get(), dataKeyLen_);
+ if (LOG4CXX_UNLIKELY(logger()->isDebugEnabled())) {
+ std::string dataKeyStr(reinterpret_cast<char*>(dataKey_.get()), dataKeyLen_);
+ std::string strHex = stringToHex(dataKeyStr, dataKeyStr.size());
+ LOG_DEBUG(logCtx_ << "Generated Data key " << strHex);
+ }
Result result = ResultOk;
for (auto it = keyNames.begin(); it != keyNames.end(); it++) {
@@ -191,7 +200,9 @@ Result MessageCrypto::addPublicKeyCipher(const std::string& keyName, const Crypt
eki->setKey(encryptedKeyStr);
eki->setMetadata(keyInfo.getMetadata());
- encryptedDataKeyMap_.insert(std::make_pair(keyName, eki));
+ // Add a new entry or replace existing entry, if one is present.
+ encryptedDataKeyMap_[keyName] = eki;
+
if (LOG4CXX_UNLIKELY(logger()->isDebugEnabled())) {
std::string strHex = stringToHex(encryptedKeyStr, encryptedKeyStr.size());
LOG_DEBUG(logCtx_ << " Data key encrypted for key " << keyName
@@ -200,7 +211,7 @@ Result MessageCrypto::addPublicKeyCipher(const std::string& keyName, const Crypt
return ResultOk;
}
-bool MessageCrypto::removeKeyCipher(std::string& keyName) {
+bool MessageCrypto::removeKeyCipher(const std::string& keyName) {
if (!keyName.size()) {
return false;
}
diff --git a/pulsar-client-cpp/lib/MessageCrypto.h b/pulsar-client-cpp/lib/MessageCrypto.h
index a4b77f0..566313f 100644
--- a/pulsar-client-cpp/lib/MessageCrypto.h
+++ b/pulsar-client-cpp/lib/MessageCrypto.h
@@ -65,7 +65,7 @@ class MessageCrypto {
* @param keyName Unique name to identify the key
* @return true if succeeded, false otherwise
*/
- bool removeKeyCipher(std::string& keyName);
+ bool removeKeyCipher(const std::string& keyName);
/*
* Encrypt the payload using the data key and update message metadata with the keyname & encrypted data
@@ -136,6 +136,7 @@ class MessageCrypto {
bool getKeyAndDecryptData(const proto::MessageMetadata& msgMetadata, SharedBuffer& payload,
SharedBuffer& decryptedPayload);
std::string stringToHex(const std::string& inputStr, size_t len);
+ std::string stringToHex(const char* inputStr, size_t len);
};
} /* namespace pulsar */
--
To stop receiving notification emails like this one, please contact
mmerli@apache.org.