def build_request(self, input_data=None, *args, **kwargs):
        """
        Builds request

        :param input_data:
        :param args:
        :param kwargs:
        :return:
        """
        if input_data is not None:
            self.input_data = input_data
        if self.input_data is None:
            raise ValueError('Input data is None')
        if self.uo is None:
            raise ValueError('UO is None')

        self.request = RequestHolder()
        self.request.nonce = get_random_vector(EBConsts.FRESHNESS_NONCE_LEN)
        self.request.api_object = EBUtils.build_api_object(self.uo)
        self.request.endpoint = self.uo.resolve_endpoint()
        self.request.configuration = self.configuration
        self.request.api_method = EBConsts.REQUEST_PROCESS_DATA

        # Build plaintext plain_buffer
        plain_buffer = \
            to_bytes(31, 1) + to_bytes(self.uo.uo_id, 4) + \
            to_bytes(self.request.nonce, EBConsts.FRESHNESS_NONCE_LEN) + to_bytes(self.input_data)

        plain_buffer = PKCS7.pad(plain_buffer)

        # Encrypt-then-mac
        ciphertext = aes_enc(self.uo.enc_key, plain_buffer)
        mac = cbc_mac(self.uo.mac_key, ciphertext)

        # Result request body
        self.request.body = {
            "data": "Packet0_%s_0000%s" % (EBUtils.get_request_type(self.uo), to_hex(ciphertext + mac))}
        return self.request
Builds request

        :param input_data:
        :param args:
        :param kwargs:
        :return: