public function encryptViaBuffer($hash)
    {
        $this->checkPaypalFiles();

        $key_file = $this->getOption('key_file');
        $cert_file = $this->getOption('cert_file');
        $paypal_cert_file = $this->getOption('paypal_cert_file');
        $openssl = $this->getOption('openssl');

        $openssl_cmd = "$openssl smime -sign -signer $cert_file -inkey $key_file ".
            "-outform der -nodetach -binary | $openssl smime -encrypt ".
            "-des3 -binary -outform pem $paypal_cert_file";

        if ($this->getLogger()) {
            $this->getLogger()->debug(sprintf('[BasePaypalPayment::encrypt] command line=%s', $openssl_cmd));
        }

        $descriptors = [
            0 => ['pipe', 'r'],
            1 => ['pipe', 'w'],
        ];

        $process = proc_open($openssl_cmd, $descriptors, $pipes);

        if (\is_resource($process)) {
            foreach ($hash as $key => $value) {
                if ('' !== $value) {
                    fwrite($pipes[0], "$key=$value\n");
                }
            }
            fflush($pipes[0]);
            fclose($pipes[0]);

            $output = '';
            while (!feof($pipes[1])) {
                $output .= fgets($pipes[1]);
            }

            fclose($pipes[1]);
            $return_value = proc_close($process);

            return $output;
        }

        if ($this->getLogger()) {
            $this->getLogger()->emergency("Encrypting paypal data failed, Command line encryption failed \n cmd=$openssl_cmd \n hash=".print_r($hash, 1));
        }

        throw new \RuntimeException('Encrypting paypal data failed');
    }