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,
