diff --git a/src/security/sec-tpm-file.hpp b/src/security/sec-tpm-file.hpp
index f1e6fa8..5f40200 100644
--- a/src/security/sec-tpm-file.hpp
+++ b/src/security/sec-tpm-file.hpp
@@ -6,15 +6,14 @@
  * See COPYING for copyright and distribution information.
  */
 
-#ifndef NDN_SEC_TPM_FILE_HPP
-#define NDN_SEC_TPM_FILE_HPP
+#ifndef NDN_SECURITY_SEC_TPM_FILE_HPP
+#define NDN_SECURITY_SEC_TPM_FILE_HPP
 
 #include "../common.hpp"
 
 #include "sec-tpm.hpp"
 
-namespace ndn 
-{
+namespace ndn {
 
 class SecTpmFile : public SecTpm
 {
@@ -23,9 +22,6 @@
 
   SecTpmFile(const std::string & dir = "");
 
-  /**
-   * @brief destructor
-   */
   virtual
   ~SecTpmFile() {};
 
@@ -38,71 +34,24 @@
   virtual void
   generateKeyPairInTpm(const Name & keyName, KeyType keyType, int keySize);
 
-  /**
-   * Delete a key pair of asymmetric keys.
-   * @param keyName The name of the key pair.
-   */
   virtual void
   deleteKeyPairInTpm(const Name &keyName);
 
-  /**
-   * Get the public key
-   * @param keyName The name of public key.
-   * @return The public key.
-   */
-  virtual ptr_lib::shared_ptr<PublicKey>
+  virtual shared_ptr<PublicKey>
   getPublicKeyFromTpm(const Name & keyName);
 
-  /**
-   * Fetch the private key for keyName and sign the data, returning a signature block.
-   * Throw Error if signing fails.
-   * @param data Pointer to the input byte array.
-   * @param dataLength The length of data.
-   * @param keyName The name of the signing key.
-   * @param digestAlgorithm the digest algorithm.
-   * @return The signature block.
-   */  
   virtual Block
   signInTpm(const uint8_t *data, size_t dataLength, const Name& keyName, DigestAlgorithm digestAlgorithm);
 
-  /**
-   * Decrypt data.
-   * @param keyName The name of the decrypting key.
-   * @param data The byte to be decrypted.
-   * @param dataLength the length of data.
-   * @param isSymmetric If true symmetric encryption is used, otherwise asymmetric encryption is used.
-   * @return The decrypted data.
-   */
   virtual ConstBufferPtr 
-  decryptInTpm(const Name& keyName, const uint8_t* data, size_t dataLength, bool isSymmetric);
+  decryptInTpm(const uint8_t* data, size_t dataLength, const Name& keyName, bool isSymmetric);
 
-  /**
-   * Encrypt data.
-   * @param keyName The name of the encrypting key.
-   * @param data The byte to be encrypted.
-   * @param dataLength the length of data.
-   * @param isSymmetric If true symmetric encryption is used, otherwise asymmetric decryption is used.
-   * @return The encrypted data.
-   */
   virtual ConstBufferPtr
-  encryptInTpm(const Name& keyName, const uint8_t* data, size_t dataLength, bool isSymmetric);
+  encryptInTpm(const uint8_t* data, size_t dataLength, const Name& keyName, bool isSymmetric);
 
-
-  /**
-   * Generate a symmetric key.
-   * @param keyName The name of the key.
-   * @param keyType The type of the key, e.g. KEY_TYPE_AES.
-   * @param keySize The size of the key.
-   */
   virtual void 
   generateSymmetricKeyInTpm(const Name& keyName, KeyType keyType, int keySize);
 
-  /**
-   * Check if a particular key exists.
-   * @param keyName The name of the key.
-   * @param keyClass The class of the key, e.g. KEY_CLASS_PUBLIC, KEY_CLASS_PRIVATE, or KEY_CLASS_SYMMETRIC.
-   * @return True if the key exists, otherwise false.
-   */
   virtual bool
   doesKeyExistInTpm(const Name& keyName, KeyClass keyClass);
 
@@ -127,6 +76,6 @@
   shared_ptr<Impl> m_impl;
 };
 
-}//ndn
+} // namespace ndn
 
-#endif
+#endif  //NDN_SECURITY_SEC_TPM_FILE_HPP
