diff --git a/src/challenge-module.cpp b/src/challenge-module.cpp
index f1eb5bc..6a28866 100644
--- a/src/challenge-module.cpp
+++ b/src/challenge-module.cpp
@@ -71,10 +71,17 @@
 }
 
 JsonSection
-ChallengeModule::genRequestChallengeInfo(const std::string& interestType, const std::string& status,
-                                         const std::list<std::string>& paramList)
+ChallengeModule::genSelectParamsJson(const std::string& status,
+                                     const std::list<std::string>& paramList)
 {
-  return genChallengeInfo(interestType, status, paramList);
+  return doGenSelectParamsJson(status, paramList);
+}
+
+JsonSection
+ChallengeModule::genValidateParamsJson(const std::string& status,
+                                     const std::list<std::string>& paramList)
+{
+  return doGenValidateParamsJson(status, paramList);
 }
 
 JsonSection
diff --git a/src/challenge-module.hpp b/src/challenge-module.hpp
index 1cc22ad..7e36d4c 100644
--- a/src/challenge-module.hpp
+++ b/src/challenge-module.hpp
@@ -58,6 +58,7 @@
   static unique_ptr<ChallengeModule>
   createChallengeModule(const std::string& ChallengeType);
 
+  // For CA
   /**
    * @brief Handle the challenge related interest and update certificate request.
    * @note Should be used by CA Module
@@ -73,6 +74,7 @@
   JsonSection
   handleChallengeRequest(const Interest& interest, CertificateRequest& request);
 
+  // For Client
   /**
    * @brief Get requirements for requester before sending SELECT interest.
    * @note Should be used by Client Module
@@ -105,28 +107,45 @@
   getRequirementForValidate(const std::string& status);
 
   /**
-   * @brief Generate ChallengeInfo part for SELECT and VALIDATE interest.
+   * @brief Generate ChallengeInfo part for SELECT interest.
    * @note Should be used by Client Module
    *
    * After requester provides required information, client should invoke the function to
    * generate the ChallengeInfo part of the interest.
    *
-   * @param interestType of the request
    * @param status of the challenge
    * @param paramList contains all the input from requester
    * @return the JSON file of ChallengeInfo
    */
   JsonSection
-  genRequestChallengeInfo(const std::string& interestType, const std::string& status,
-                          const std::list<std::string>& paramList);
+  genSelectParamsJson(const std::string& status, const std::list<std::string>& paramList);
+
+  /**
+   * @brief Generate ChallengeInfo part for VALIDATE interest.
+   * @note Should be used by Client Module
+   *
+   * After requester provides required information, client should invoke the function to
+   * generate the ChallengeInfo part of the interest.
+   *
+   * @param status of the challenge
+   * @param paramList contains all the input from requester
+   * @return the JSON file of ChallengeInfo
+   */
+  JsonSection
+  genValidateParamsJson(const std::string& status, const std::list<std::string>& paramList);
 
 PUBLIC_WITH_TESTS_ELSE_PROTECTED:
+  // For CA
   virtual JsonSection
   processSelectInterest(const Interest& interest, CertificateRequest& request) = 0;
 
   virtual JsonSection
   processValidateInterest(const Interest& interest, CertificateRequest& request) = 0;
 
+  virtual JsonSection
+  processStatusInterest(const Interest& interest, const CertificateRequest& request);
+
+  // For Client
   virtual std::list<std::string>
   getSelectRequirements() = 0;
 
@@ -134,12 +153,12 @@
   getValidateRequirements(const std::string& status) = 0;
 
   virtual JsonSection
-  genChallengeInfo(const std::string& interestType, const std::string& status,
-                   const std::list<std::string>& paramList) = 0;
+  doGenSelectParamsJson(const std::string& status, const std::list<std::string>& paramList) = 0;
 
   virtual JsonSection
-  processStatusInterest(const Interest& interest, const CertificateRequest& request);
+  doGenValidateParamsJson(const std::string& status, const std::list<std::string>& paramList) = 0;
 
+  // Helpers
   static JsonSection
   getJsonFromNameComponent(const Name& name, int pos);
 
diff --git a/src/challenge-module/challenge-pin.cpp b/src/challenge-module/challenge-pin.cpp
index c5825f9..1aa96ce 100644
--- a/src/challenge-module/challenge-pin.cpp
+++ b/src/challenge-module/challenge-pin.cpp
@@ -115,17 +115,21 @@
 }
 
 JsonSection
-ChallengePin::genChallengeInfo(const std::string& interestType, const std::string& status,
-                               const std::list<std::string>& paramList)
+ChallengePin::doGenSelectParamsJson(const std::string& status,
+                                    const std::list<std::string>& paramList)
 {
   JsonSection result;
-  if (interestType == "_SELECT") {
-    BOOST_ASSERT(paramList.size() == 0);
-  }
-  else if (interestType == "_VALIDATE") {
-    BOOST_ASSERT(paramList.size() == 1);
-    result.put(JSON_PIN_CODE, paramList.front());
-  }
+  BOOST_ASSERT(paramList.size() == 0);
+  return result;
+}
+
+JsonSection
+ChallengePin::doGenValidateParamsJson(const std::string& status,
+                                      const std::list<std::string>& paramList)
+{
+  JsonSection result;
+  BOOST_ASSERT(paramList.size() == 1);
+  result.put(JSON_PIN_CODE, paramList.front());
   return result;
 }
 
diff --git a/src/challenge-module/challenge-pin.hpp b/src/challenge-module/challenge-pin.hpp
index d6094c7..31ea05f 100644
--- a/src/challenge-module/challenge-pin.hpp
+++ b/src/challenge-module/challenge-pin.hpp
@@ -63,8 +63,12 @@
   getValidateRequirements(const std::string& status) override;
 
   JsonSection
-  genChallengeInfo(const std::string& interestType, const std::string& status,
-                   const std::list<std::string>& paramList) override;
+  doGenSelectParamsJson(const std::string& status,
+                        const std::list<std::string>& paramList) override;
+
+  JsonSection
+  doGenValidateParamsJson(const std::string& status,
+                          const std::list<std::string>& paramList) override;
 
 PUBLIC_WITH_TESTS_ELSE_PRIVATE:
   static std::tuple<time::system_clock::TimePoint, std::string, int>
diff --git a/tests/unit-tests/challenge-pin.t.cpp b/tests/unit-tests/challenge-pin.t.cpp
index 6960162..41924c3 100644
--- a/tests/unit-tests/challenge-pin.t.cpp
+++ b/tests/unit-tests/challenge-pin.t.cpp
@@ -141,7 +141,7 @@
   auto requirementList = challenge.getSelectRequirements();
   BOOST_CHECK_EQUAL(requirementList.size(), 0);
 
-  auto json = challenge.genChallengeInfo("_SELECT", ChallengeModule::WAIT_SELECTION, requirementList);
+  auto json = challenge.doGenSelectParamsJson(ChallengeModule::WAIT_SELECTION, requirementList);
   BOOST_CHECK_EQUAL(json.empty(), true);
 }
 
@@ -154,7 +154,7 @@
   requirementList.clear();
   requirementList.push_back("123");
 
-  auto json = challenge.genChallengeInfo("_VALIDATE", ChallengePin::NEED_CODE, requirementList);
+  auto json = challenge.doGenValidateParamsJson(ChallengePin::NEED_CODE, requirementList);
   BOOST_CHECK_EQUAL(json.empty(), false);
   BOOST_CHECK_EQUAL(json.get<std::string>(ChallengePin::JSON_PIN_CODE), "123");
 }
