diff --git a/include/ndn-cpp/sha256-with-rsa-signature.hpp b/include/ndn-cpp/sha256-with-rsa-signature.hpp
index 82e4b66..ceb5c5b 100644
--- a/include/ndn-cpp/sha256-with-rsa-signature.hpp
+++ b/include/ndn-cpp/sha256-with-rsa-signature.hpp
@@ -63,33 +63,12 @@
   getKeyLocator() { return keyLocator_; }
 
   void 
-  setDigestAlgorithm(const std::vector<uint8_t>& digestAlgorithm) { digestAlgorithm_ = digestAlgorithm; }
-  
-  void 
-  setDigestAlgorithm(const uint8_t *digestAlgorithm, size_t digestAlgorithmLength) 
-  { 
-    digestAlgorithm_ = Blob(digestAlgorithm, digestAlgorithmLength); 
-  }
-
-  void 
   setDigestAlgorithm(const Blob& digestAlgorithm) { digestAlgorithm_ = digestAlgorithm; }
 
   void 
-  setWitness(const std::vector<uint8_t>& witness) { witness_ = witness; }
-  
-  void 
-  setWitness(const uint8_t *witness, size_t witnessLength) { witness_ = Blob(witness, witnessLength); }
-  
-  void 
   setWitness(const Blob& witness) { witness_ = witness; }
 
   void 
-  setSignature(const std::vector<uint8_t>& signature) { signature_ = signature; }
-  
-  void 
-  setSignature(const uint8_t *signature, size_t signatureLength) { signature_ = Blob(signature, signatureLength); }
-
-  void 
   setSignature(const Blob& signature) { signature_ = signature; }
 
   void 
diff --git a/src/node.cpp b/src/node.cpp
index 7ad328c..f9076fb 100644
--- a/src/node.cpp
+++ b/src/node.cpp
@@ -108,7 +108,7 @@
   if (!success)
     throw runtime_error("Error in RSA_sign");
   
-  signature->setSignature(signatureBits, (size_t)signatureBitsLength);
+  signature->setSignature(Blob(signatureBits, (size_t)signatureBitsLength));
 }
 
 Node::Node(const shared_ptr<Transport>& transport, const shared_ptr<const Transport::ConnectionInfo>& connectionInfo)
