Project

General

Profile

Task #3192

Updated by Zhiyi Zhang about 10 years ago

Consumer in GEP is mainly the group member that will consume the data produced by the producer. 

 The core process of data consuming is as below: 

 1. get the data packet and validate the packet 
 2. get the encrypted C-KEY packet and validate the packet 
 3. get the encrypted D-KEY packet and validate the packet 
 4. decrypt the D-KEY with the private key of consumer 
 5. decrypt the C-KEY with the D-KEY 
 6. decrypt the data with C-KEY 

 Here is the abstraction of consumer: 

     /** 
      * @brief Consumer in group-based encryption protocol 
      */ 
     class Consumer 
     { 
     public: 
       class Error : public std::runtime_error 
       { 
       public: 
         explicit 
         Error(const std::string& what) 
           : std::runtime_error(what) 
         { 
         } 
       }; 

     public: 
       Consumer(Face& face, const Consumer(const algo::RsaPrivateKey& decryptKey); 

       
    
       /** 
        * @brief Get the data buffer published by producer 
        */ 
       Buffer 
       consume(const Name& dataName); 

     PUBLIC_WITH_TESTS_ELSE_PRIVATE: 
    
     private: 
       /** 
        * @brief authenticate the Data packet 
        */ 
       bool 
       authenticateData(const Data& Data); 

       /** 
        * @brief authenticate the C-KEY data 
        */ 
       bool 
       authenticateCKey(const Data& cKeyData); 

       /** 
        * @brief authenticate the D-KEY data 
        */ 
       bool 
       authenticateDKey(const Data& dKeyData); 

       /** 
        * @brief Get the data packet by sending interest 
        */ 
       Data 
       sendInterest(const Name& dataName); 

       
    
       /** 
        * @brief decrypt buffer by rsa decrypt key authenticate the data 
        */ 
       Buffer bool 
       decryptGroupDKey(const authenticate(const Data& DKeyData, algo::RsaPrivateKey decryptKey) const; 

       data); 
    
       /** 
        * @brief Decrypt decrypt buffer by aes rsa decrypt key 
        */ 
       Buffer 
       decryptGroupCKey(const Data& CKeyData, decryptBuffer(const uint8_t* cipherBuffer, const algo::RsaPrivateKey decryptKey) const; 

       
    
       /** 
        * @brief Decrypt decrypt buffer by aes decrypt key 
        */ 
       Buffer 
       decryptGroupData(const Data& Data, decryptBuffer(const uint8_t* cipherBuffer, const algo::AesDecryptKey decryptKey) const; 

       /** 
        * @brief Fetch the data packet replying @p interest 
        */ 
       void 
       getResultFromInterest(const Interest& interest); 

       /** 
        * @brief Callback method when there is a packet @p data replying @p interest 
        */ 
       void 
       onData(const Interest& interest, const Data& data); 

       /** 
        * @brief Callback method when there is no packet @p data replying @p interest within timeout 
        */ 
       void 
       onTimeout(const Interest& interest); 

     
    
     private: 
       enum ResultSign { 
         RESULT_DATA = 0, 
         RESULT_TIMEOUT = 1, 
         RESULT_DEFAULT = 255 
       }; 

     private: 
       ResultSign m_sign; 
       Data m_result; 

       ValidatorConfig m_validator; 
       Face& Face m_face; 
       algo::RsaPrivateKey m_decryptKey; 
     }; 

Back