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 <sahaya.andr...@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
mme...@apache.org.

Reply via email to