security: Introduce unsetKeyLocator method into SignatureInfo and Signature

Some specific signature types also provide an advisory (non-virtual)
override for unsetKeyLocator that disables reset and throws an
Exception.  As before, if an application really wants, it still can
unset the KeyLocator by setting a new SignatureInfo without the
KeyLocator.

Change-Id: Ibefd5f9ffbcb91f8a83e76db8704cba1b984f914
Refs: #1750
diff --git a/src/security/signature-sha256-with-ecdsa.cpp b/src/security/signature-sha256-with-ecdsa.cpp
index 1f67425..91b4a29 100644
--- a/src/security/signature-sha256-with-ecdsa.cpp
+++ b/src/security/signature-sha256-with-ecdsa.cpp
@@ -39,4 +39,10 @@
   }
 }
 
+void
+SignatureSha256WithEcdsa::unsetKeyLocator()
+{
+  throw Error("KeyLocator cannot be reset for SignatureSha256WithEcdsa");
+}
+
 } // namespace ndn
diff --git a/src/security/signature-sha256-with-ecdsa.hpp b/src/security/signature-sha256-with-ecdsa.hpp
index a20e6b0..4b0eb7f 100644
--- a/src/security/signature-sha256-with-ecdsa.hpp
+++ b/src/security/signature-sha256-with-ecdsa.hpp
@@ -48,6 +48,9 @@
   explicit
   SignatureSha256WithEcdsa(const Signature& signature);
 
+private:
+  void
+  unsetKeyLocator();
 };
 
 } // namespace ndn
diff --git a/src/security/signature-sha256-with-rsa.cpp b/src/security/signature-sha256-with-rsa.cpp
index bc4fe65..3c84b54 100644
--- a/src/security/signature-sha256-with-rsa.cpp
+++ b/src/security/signature-sha256-with-rsa.cpp
@@ -39,4 +39,10 @@
   }
 }
 
+void
+SignatureSha256WithRsa::unsetKeyLocator()
+{
+  throw Error("KeyLocator cannot be reset for SignatureSha256WithRsa");
+}
+
 } // namespace ndn
diff --git a/src/security/signature-sha256-with-rsa.hpp b/src/security/signature-sha256-with-rsa.hpp
index 94f9e30..937794b 100644
--- a/src/security/signature-sha256-with-rsa.hpp
+++ b/src/security/signature-sha256-with-rsa.hpp
@@ -47,6 +47,10 @@
 
   explicit
   SignatureSha256WithRsa(const Signature& signature);
+
+private:
+  void
+  unsetKeyLocator();
 };
 
 } // namespace ndn