def _create_signup_data(self):
        """
        Create WPE signup data.

        Returns :
            signup_data - Relevant signup data to be used for requests to the
                          enclave
        """
        # Instantiate enclaveinfo & initialize enclave in the process
        signup_data = enclave_info.WorkOrderProcessorEnclaveInfo(
            self._config.get("EnclaveModule"))
        self._wpe_requester = WPERequester(self._config)

        signup_cpp_obj = enclave.SignupInfoWPE()
        # Generate a nonce in trusted code
        verification_key_nonce = signup_cpp_obj.GenerateNonce(32)
        logger.info("Nonce generated by requester WPE : %s",
                    verification_key_nonce)
        response = self._wpe_requester.get_unique_verification_key(
            verification_key_nonce)
        # Received response contains result,verification_key and
        # verification_key_signature delimited by ' '
        self._unique_verification_key = response.split(' ')[1]
        # signup enclave
        signup_data.create_enclave_signup_data(self._unique_verification_key)
        # return signup data
        logger.info("WPE signup data {}".format(signup_data.proof_data))
        return signup_data
Example #2
0
    def _create_signup_data(self):
        """
        Create WPE signup data.

        Returns :
            signup_data - Relevant signup data to be used for requests to the
                          enclave
        """
        self._wpe_requester = WPERequester(self._config)

        # Instantiate enclaveinfo & initialize enclave in the process
        signup_data = enclave_info.WorkOrderProcessorEnclaveInfo(
            self._config, EnclaveType.WPE)
        signup_cpp_obj = enclave.SignupInfoWPE()

        # Generate a nonce in trusted code
        verification_key_nonce = signup_cpp_obj.GenerateNonce(32)
        logger.info("Nonce generated by requester WPE : %s",
                    verification_key_nonce)
        response = self._wpe_requester.get_unique_verification_key(
            verification_key_nonce)
        if response is None:
            logger.error("Failed to get Unique ID from KME")
            return None
        # Received response contains result,verification_key and
        # verification_key_signature delimited by ' '
        self._unique_verification_key = response.split(' ')[1]
        self._unique_verification_key_signature = response.split(' ')[2]

        # Verify unique verification key signature using unique id
        result = signup_cpp_obj.VerifyUniqueIdSignature(
            self._unique_verification_key,
            self._unique_verification_key_signature)
        if result != 0:
            logger.error("Failed to verify unique id signature")
            return None

        self.mr_enclave = signup_data.get_enclave_measurement()
        # signup enclave
        signup_data.create_enclave_signup_data(self._unique_verification_key)
        # return signup data
        logger.info("WPE signup data {}".format(signup_data.proof_data))
        return signup_data