diff --git a/src/ca-module.cpp b/src/ca-module.cpp
index eae209e..d64d904 100644
--- a/src/ca-module.cpp
+++ b/src/ca-module.cpp
@@ -39,6 +39,7 @@
 
 static const time::seconds DEFAULT_DATA_FRESHNESS_PERIOD = 1_s;
 static const time::seconds REQUEST_VALIDITY_PERIOD_NOT_BEFORE_GRACE_PERIOD = 120_s;
+static const int AES_128_KEY_LEN = 16;
 
 NDN_LOG_INIT(ndncert.ca);
 
diff --git a/src/configuration.hpp b/src/configuration.hpp
index 8a1d037..c881786 100644
--- a/src/configuration.hpp
+++ b/src/configuration.hpp
@@ -85,7 +85,7 @@
  * fired whenever a request instance is created, challenge status is updated, and when certificate
  * is issued.
  *
- * @p CaState, input, the state of the certificate request whose status is updated.
+ * @param CaState The state of the certificate request whose status is updated.
  */
 using StatusUpdateCallback = function<void(const CaState&)>;
 
diff --git a/src/detail/crypto-helper.hpp b/src/detail/crypto-helper.hpp
index 38110c5..c3546c4 100644
--- a/src/detail/crypto-helper.hpp
+++ b/src/detail/crypto-helper.hpp
@@ -28,7 +28,6 @@
 
 static const int INFO_LEN = 10;
 static const uint8_t INFO[] = {0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9};
-static const int AES_128_KEY_LEN = 16;
 
 class ECDHState
 {
@@ -60,16 +59,17 @@
 };
 
 /**
- * HMAC based key derivation function (HKDF)
- * @p secret, intput, the input to the HKDF
- * @p secretLen, intput, the length of the secret
- * @p salt, intput, the salt used in HKDF
- * @p saltLen, intput, the length of the salt
- * @p output, output, the output of the HKDF
- * @p output_len, intput, the length of expected output
- * @p info, intput, the additional information used in HKDF
- * @p info_len, intput, the additional information used in HKDF
- * @return the length of the derived key if successful, -1 if failed
+ * @brief HMAC based key derivation function (HKDF).
+ *
+ * @param secret The input to the HKDF.
+ * @param secret_len The length of the secret.
+ * @param salt The salt used in HKDF.
+ * @param salt_len The length of the salt.
+ * @param output The output of the HKDF.
+ * @param output_len The length of expected output.
+ * @param info The additional information used in HKDF.
+ * @param info_len The length of the additional information.
+ * @return int The length of the derived key if successful, -1 if failed.
  */
 int
 hkdf(const uint8_t* secret, int secret_len,
@@ -78,12 +78,13 @@
      const uint8_t* info = INFO, int info_len = INFO_LEN);
 
 /**
- * HMAC based on SHA-256
- * @p data, intput, the array to hmac
- * @p data_length, intput, the length of the array
- * @p key, intput, the key for the function
- * @p key_len, intput, the length of the key
- * @p result, output, result of the HMAC. Enough memory (32 Bytes) must be allocated beforehands
+ * @brief HMAC based on SHA-256.
+ *
+ * @param data The intput array to hmac.
+ * @param data_length The length of the input array.
+ * @param key The HMAC key.
+ * @param key_length The length of the HMAC key.
+ * @param result The result of the HMAC. Enough memory (32 Bytes) must be allocated beforehands.
  * @throw runtime_error when an error occurred in the underlying HMAC.
  */
 void
@@ -92,60 +93,64 @@
             uint8_t* result);
 
 /**
- * Authenticated GCM 128 Encryption with associated data
- * @p plaintext, input, plaintext
- * @p plaintext_len, input, size of plaintext
- * @p associated, input, associated authentication data
- * @p associated_len, input, size of associated authentication data
- * @p key, input, 16 bytes AES key
- * @p iv, input, 12 bytes IV
- * @p ciphertext, output, enough memory must be allocated beforehands
- * @p tag, output, 16 bytes tag
- * @return the size of ciphertext
- * @throw runtime_error when there is an error in the process of encryption
+ * @brief Authenticated GCM 128 Encryption with associated data.
+ *
+ * @param plaintext The plaintext.
+ * @param plaintext_len The size of plaintext.
+ * @param associated The associated authentication data.
+ * @param associated_len The size of associated authentication data.
+ * @param key 16 bytes AES key.
+ * @param iv 12 bytes IV.
+ * @param ciphertext The output and enough memory must be allocated beforehands.
+ * @param tag 16 bytes tag.
+ * @return int The size of ciphertext.
+ * @throw runtime_error When there is an error in the process of encryption.
  */
 int
 aes_gcm_128_encrypt(const uint8_t* plaintext, size_t plaintext_len, const uint8_t* associated, size_t associated_len,
                     const uint8_t* key, const uint8_t* iv, uint8_t* ciphertext, uint8_t* tag);
 
 /**
- * Authenticated GCM 128 Decryption with associated data
- * @p ciphertext, input, ciphertext
- * @p ciphertext_len, input, size of ciphertext
- * @p associated, input, associated authentication data
- * @p associated_len, input, size of associated authentication data
- * @p tag, input, 16 bytes tag
- * @p key, input, 16 bytes AES key
- * @p iv, input, 12 bytes IV
- * @p plaintext, output, enough memory must be allocated beforehands
- * @return the size of plaintext or -1 if the verification fails
- * @throw runtime_error when there is an error in the process of encryption
+ * @brief Authenticated GCM 128 Decryption with associated data.
+ *
+ * @param ciphertext The ciphertext.
+ * @param ciphertext_len The size of ciphertext.
+ * @param associated The associated authentication data.
+ * @param associated_len The size of associated authentication data.
+ * @param tag 16 bytes tag.
+ * @param key 16 bytes AES key.
+ * @param iv 12 bytes IV.
+ * @param plaintext The output and enough memory must be allocated beforehands.
+ * @return int The size of plaintext or -1 if the verification fails.
+ * @throw runtime_error When there is an error in the process of encryption.
  */
 int
 aes_gcm_128_decrypt(const uint8_t* ciphertext, size_t ciphertext_len, const uint8_t* associated, size_t associated_len,
                     const uint8_t* tag, const uint8_t* key, const uint8_t* iv, uint8_t* plaintext);
 
 /**
- * Encode the payload into TLV block with Authenticated GCM 128 Encryption
- * @p tlv::type, intput, the TLV TYPE of the encoded block, either ApplicationParameters or Content
- * @p key, intput, 16 Bytes, the AES key used for encryption
- * @p payload, input, the plaintext payload
- * @p payloadSize, input, the size of the plaintext payload
- * @p associatedData, input, associated data used for authentication
- * @p associatedDataSize, input, the size of associated data
- * @return the TLV block with @p tlv::type TLV TYPE
+ * @brief Encode the payload into TLV block with Authenticated GCM 128 Encryption.
+ *
+ * @param tlv_type The TLV TYPE of the encoded block, either ApplicationParameters or Content.
+ * @param key The AES key used for encryption.
+ * @param payload The plaintext payload.
+ * @param payloadSize The size of the plaintext payload.
+ * @param associatedData The associated data used for authentication.
+ * @param associatedDataSize The size of associated data.
+ * @return Block The TLV block with @param tlv_type TLV TYPE.
  */
 Block
 encodeBlockWithAesGcm128(uint32_t tlv_type, const uint8_t* key, const uint8_t* payload, size_t payloadSize,
                          const uint8_t* associatedData, size_t associatedDataSize);
 
 /**
- * Decode the payload from TLV block with Authenticated GCM 128 Encryption
- * @p block, intput, the TLV block in the format of NDNCERT protocol
- * @p key, intput, 16 Bytes, the AES key used for encryption
- * @p associatedData, input, associated data used for authentication
- * @p associatedDataSize, input, the size of associated data
- * @return the plaintext buffer
+ * @brief Decode the payload from TLV block with Authenticated GCM 128 Encryption.
+ *
+ * @param block The TLV block in the format of NDNCERT protocol.
+ * @param key The AES key used for encryption.
+ * @param associatedData The associated data used for authentication.
+ * @param associatedDataSize The size of associated data.
+ * @return Buffer The plaintext buffer.
  */
 Buffer
 decodeBlockWithAesGcm128(const Block& block, const uint8_t* key,
diff --git a/src/name-assignment/assignment-func.hpp b/src/name-assignment/assignment-func.hpp
index 355efdd..a936bac 100644
--- a/src/name-assignment/assignment-func.hpp
+++ b/src/name-assignment/assignment-func.hpp
@@ -36,10 +36,11 @@
   /**
    * @brief The name assignment function provided by the CA operator to generate available
    * namecomponents.
+   *
    * The function does not guarantee that all the returned names are available. Therefore the
    * CA should further check the availability of each returned name and remove unavailable results.
    *
-   * @p vector, input, a list of parameter key-value pair used for name assignment.
+   * @param vector A list of parameter key-value pair used for name assignment.
    * @return a vector containing the possible namespaces derived from the parameters.
    */
   virtual std::vector<PartialName>
diff --git a/src/requester.hpp b/src/requester.hpp
index 0267803..65cf831 100644
--- a/src/requester.hpp
+++ b/src/requester.hpp
@@ -34,26 +34,30 @@
 {
 public:
   /**
-   * Generates a CA profile discovery Interest following RDR protocol.
-   * @p caName, the name prefix of the CA.
+   * @brief Generates a CA profile discovery Interest following RDR protocol.
+   *
+   * @param caName The name prefix of the CA.
    * @return A shared pointer to an Interest ready to be sent.
    */
   static shared_ptr<Interest>
   genCaProfileDiscoveryInterest(const Name& caName);
 
   /**
-   * Generates a CA profile fetching Interest following RDR protocol.
-   * @p reply, the Data packet replied from discovery Interest.
+   * @brief Generates a CA profile fetching Interest following RDR protocol.
+   *
+   * @param reply The Data packet replied from discovery Interest.
    * @return A shared pointer to an Interest ready to be sent.
    */
   static shared_ptr<Interest>
   genCaProfileInterestFromDiscoveryResponse(const Data& reply);
 
   /**
-   * Decodes the CA profile from the replied CA profile Data packet.
+   * @brief Decodes the CA profile from the replied CA profile Data packet.
+   *
    * Will first verify the signature of the packet using the key provided inside the profile.
    * The application should be cautious whether to add CaProfile into the RequesterCaCache.
-   * @p reply, the Data packet replied from CA profile fetching Interest.
+   *
+   * @param reply The Data packet replied from CA profile fetching Interest.
    * @return the CaProfile if decoding is successful
    * @throw std::runtime_error if the decoding fails or receiving an error packet.
    */
@@ -61,12 +65,14 @@
   onCaProfileResponse(const Data& reply);
 
   /**
-   * Decodes the CA profile from the replied CA profile Data packet after the redirection.
+   * @brief Decodes the CA profile from the replied CA profile Data packet after the redirection.
+   *
    * Will first verify the signature of the packet using the key provided inside the profile and
    * verify the certificate's digest matches the one obtained from the original CA.
    * The application should be cautious whether to add CaProfile into the RequesterCaCache.
-   * @p reply, the Data packet replied from CA profile fetching Interest.
-   * @p caCertFullName, the full name obtained from original CA's probe response.
+   *
+   * @param reply The Data packet replied from CA profile fetching Interest.
+   * @param caCertFullName The full name obtained from original CA's probe response.
    * @return the CaProfile if decoding is successful
    * @throw std::runtime_error if the decoding fails or receiving an error packet.
    */
@@ -74,21 +80,24 @@
   onCaProfileResponseAfterRedirection(const Data& reply, const Name& caCertFullName);
 
   /**
-   * Generates a PROBE interest to the CA (for suggested name assignments).
-   * @p ca, the CA that interest is send to
-   * @p probeInfo, the requester information to carry to the CA
+   * @brief Generates a PROBE interest to the CA (for suggested name assignments).
+   *
+   * @param ca The CA that interest is send to
+   * @param probeInfo The requester information to carry to the CA
    * @return A shared pointer of to the encoded interest, ready to be sent.
    */
   static shared_ptr<Interest>
   genProbeInterest(const CaProfile& ca, std::vector<std::tuple<std::string, std::string>>&& probeInfo);
 
   /**
-   * Decodes the replied data for PROBE process from the CA.
+   * @brief Decodes the replied data for PROBE process from the CA.
+   *
    * Will first verify the signature of the packet using the key provided inside the profile.
-   * @p reply, The replied data packet
-   * @p ca, the profile of the CA that replies the packet
-   * @p identityNames, The vector to load the decoded identity names from the data.
-   * @p otherCas, The vector to load the decoded redirection CA prefixes from the data.
+   *
+   * @param reply The replied data packet
+   * @param ca the profile of the CA that replies the packet
+   * @param identityNames The vector to load the decoded identity names from the data.
+   * @param otherCas The vector to load the decoded redirection CA prefixes from the data.
    * @throw std::runtime_error if the decoding fails or receiving an error packet.
    */
   static void
@@ -97,11 +106,12 @@
 
   // NEW/REVOKE/RENEW related helpers
   /**
-   * Generates a NEW interest to the CA.
-   * @p state, The current requester state for this request. Will be modified in the function.
-   * @p identityName, The identity name to be requested.
-   * @p notBefore, The expected notBefore field for the certificate (starting time)
-   * @p notAfter, The expected notAfter field for the certificate (expiration time)
+   * @brief Generates a NEW interest to the CA.
+   *
+   * @param state The current requester state for this request. Will be modified in the function.
+   * @param identityName The identity name to be requested.
+   * @param notBefore The expected notBefore field for the certificate (starting time)
+   * @param notAfter The expected notAfter field for the certificate (expiration time)
    * @return The shared pointer to the encoded interest.
    */
   static shared_ptr<Interest>
@@ -110,18 +120,20 @@
                  const time::system_clock::TimePoint& notAfter);
 
   /**
-   * Generates a REVOKE interest to the CA.
-   * @p state, The current requester state for this request. Will be modified in the function.
-   * @p certificate, the certificate to the revoked.
+   * @brief Generates a REVOKE interest to the CA.
+   *
+   * @param state The current requester state for this request. Will be modified in the function.
+   * @param certificate The certificate to the revoked.
    * @return The shared pointer to the encoded interest.
    */
   static shared_ptr<Interest>
   genRevokeInterest(RequesterState& state, const security::Certificate& certificate);
 
   /**
-   * Decodes the replied data of NEW, RENEW, or REVOKE interest from the CA.
-   * @p state, the current requester state for the request. Will be updated in the function.
-   * @p reply, the replied data from the network
+   * @brief Decodes the replied data of NEW, RENEW, or REVOKE interest from the CA.
+   *
+   * @param state The current requester state for the request. Will be updated in the function.
+   * @param reply The replied data from the network
    * @return the list of challenge accepted by the CA, for CHALLENGE step.
    * @throw std::runtime_error if the decoding fails or receiving an error packet.
    */
@@ -130,9 +142,10 @@
 
   // CHALLENGE helpers
   /**
-   * Generates the required parameter for the selected challenge for the request
-   * @p state, The requester state of the request.Will be updated in the function.
-   * @p challengeSelected, The selected challenge for the request.
+   * @brief Generates the required parameter for the selected challenge for the request
+   *
+   * @param state, The requester state of the request.Will be updated in the function.
+   * @param challengeSelected, The selected challenge for the request.
    *            Can use state.m_challengeType to continue.
    * @return The requirement list for the current stage of the challenge, in name, prompt mapping.
    * @throw std::runtime_error if the challenge is not supported.
@@ -141,9 +154,10 @@
   selectOrContinueChallenge(RequesterState& state, const std::string& challengeSelected);
 
   /**
-   * Generates the CHALLENGE interest for the request.
-   * @p state, The requester state of the request.
-   * @p parameters, The requirement list, in name, value mapping.
+   * @brief Generates the CHALLENGE interest for the request.
+   *
+   * @param state, The requester state of the request.
+   * @param parameters, The requirement list, in name, value mapping.
    * @return The shared pointer to the encoded interest
    * @throw std::runtime_error if the challenge is not selected or is not supported.
    */
@@ -152,33 +166,37 @@
                        std::vector<std::tuple<std::string, std::string>>&& parameters);
 
   /**
-   * Decodes the responded data from the CHALLENGE interest.
-   * @p state, the corresponding requester state of the request. Will be modified.
-   * @p reply, the response data.
+   * @brief Decodes the responded data from the CHALLENGE interest.
+   *
+   * @param state, the corresponding requester state of the request. Will be modified.
+   * @param reply, the response data.
    * @throw std::runtime_error if the decoding fails or receiving an error packet.
    */
   static void
   onChallengeResponse(RequesterState& state, const Data& reply);
 
   /**
-   * Generate the interest to fetch the issued certificate
-   * @p state, the state of the request.
+   * @brief Generate the interest to fetch the issued certificate
+   *
+   * @param state, the state of the request.
    * @return The shared pointer to the encoded interest
    */
   static shared_ptr<Interest>
   genCertFetchInterest(const RequesterState& state);
 
   /**
-   * Decoded and installs the response certificate from the certificate fetch.
-   * @p reply, the data replied from the certificate fetch interest.
+   * @brief Decoded and installs the response certificate from the certificate fetch.
+   *
+   * @param reply, the data replied from the certificate fetch interest.
    * @return The shared pointer to the certificate being fetched.
    */
   static shared_ptr<security::Certificate>
   onCertFetchResponse(const Data& reply);
 
   /**
-   * End the current request session and performs cleanup if necessary.
-   * @p state, the requester state for the request.
+   * @brief End the current request session and performs cleanup if necessary.
+   *
+   * @param state, the requester state for the request.
    */
   static void
   endSession(RequesterState& state);
diff --git a/tests/identity-management-fixture.hpp b/tests/identity-management-fixture.hpp
index a45e9d0..9b10dbf 100644
--- a/tests/identity-management-fixture.hpp
+++ b/tests/identity-management-fixture.hpp
@@ -64,8 +64,8 @@
 
   /**
    *  @brief Save identity certificate to a file
-   *  @p identity identity
-   *  @p filename file name, should be writable
+   *  @param identity identity
+   *  @param filename file name, should be writable
    *  @return whether successful
    */
   bool
