diff --git a/tools/ndnsec-sig-verify.hpp b/tools/ndnsec-sig-verify.hpp
index fdb6f03..446d8a4 100644
--- a/tools/ndnsec-sig-verify.hpp
+++ b/tools/ndnsec-sig-verify.hpp
@@ -1,8 +1,15 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * BSD license, See the LICENSE file for more information
- * Author: Yingdi Yu <yingdi@cs.ucla.edu>
+/**
+ * Copyright (c) 2013-2014,  Regents of the University of California.
+ * All rights reserved.
+ *
+ * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
+ *
+ * This file licensed under New BSD License.  See COPYING for detailed information about
+ * ndn-cxx library copyright, permissions, and redistribution restrictions.
+ *
+ * @author Yingdi Yu <http://irl.cs.ucla.edu/~yingdi/>
  */
 
 #ifndef NDNSEC_SIG_VERIFY_HPP
@@ -13,18 +20,18 @@
 // using namespace ndn;
 // namespace po = boost::program_options;
 
-// shared_ptr<IdentityCertificate> 
+// shared_ptr<IdentityCertificate>
 // getCertificate(const std::string& certString)
 // {
 //   std::string decoded;
 //   CryptoPP::StringSource ss2(reinterpret_cast<const unsigned char *>(certString.c_str()), certString.size(), true,
 //                              new CryptoPP::Base64Decoder(new CryptoPP::StringSink(decoded)));
-  
+
 //   Data data;
 //   data.wireDecode(Block(make_shared<Buffer>(decoded.begin(), decoded.end())));
-  
+
 //   shared_ptr<IdentityCertificate> identityCertificate = make_shared<IdentityCertificate>(boost::cref(data));
-  
+
 //   return identityCertificate;
 // }
 
@@ -37,7 +44,7 @@
 //   //     std::string decoded;
 //   //     CryptoPP::FileSource ss2(cin, true,
 //   //                              new CryptoPP::Base64Decoder(new CryptoPP::StringSink(decoded)));
-      
+
 //   //     Data data;
 //   //     data.wireDecode(ptr_lib::make_shared<Buffer>(decoded.c_str(), decoded.size()));
 //   //     return PolicyManager::verifySignature(data, certificate->getPublicKeyInfo());
@@ -49,7 +56,7 @@
 //   //     ptr_lib::shared_ptr<Blob> input = ptr_lib::shared_ptr<Blob>(new Blob ((istreambuf_iterator<char>(cin)), istreambuf_iterator<char>()));
 //   //     size_t size = input->at(0);
 //   //     size = ((size << 8) + input->at(1));
-      
+
 //   //     Blob signedBlob(input->buf()+2, size);
 //   //     Blob signature(input->buf()+2+size, input->size()-2-size);
 
@@ -57,8 +64,8 @@
 //   //   }
 // }
 
-int 
-ndnsec_sig_verify(int argc, char** argv)	
+int
+ndnsec_sig_verify(int argc, char** argv)
 {
   std::cerr << "Not supported yet" << std::endl;
   return 1;
@@ -74,7 +81,7 @@
 
   // po::positional_options_description p;
   // p.add("certificate", 1);
-  
+
   // po::variables_map vm;
   // try
   //   {
@@ -87,8 +94,8 @@
   //     std::cerr << desc << std::endl;
   //     return 1;
   //   }
-  
-  // if (vm.count("help") || vm.count("certificate")==0) 
+
+  // if (vm.count("help") || vm.count("certificate")==0)
   //   {
   //     std::cerr << desc << std::endl;
   //     return 1;
