From 1973275adc576aaf2cf6481d6cb91b0a6adc1f8d Mon Sep 17 00:00:00 2001
From: Lukas Reschke <lukas@owncloud.com>
Date: Thu, 11 Sep 2014 09:51:45 +0200
Subject: Add custom hex2bin implementation for 5.3

Fixes https://github.com/owncloud/core/issues/11004
---
 lib/private/security/crypto.php | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

(limited to 'lib/private/security/crypto.php')

diff --git a/lib/private/security/crypto.php b/lib/private/security/crypto.php
index 6fdff8d92a2..498e15d6bc3 100644
--- a/lib/private/security/crypto.php
+++ b/lib/private/security/crypto.php
@@ -42,6 +42,22 @@ class Crypto implements ICrypto {
 		$this->random = $random;
 	}
 
+	/**
+	 * Custom implementation of hex2bin since the function is only available starting
+	 * with PHP 5.4
+	 *
+	 * @TODO Remove this once 5.3 support for ownCloud is dropped
+	 * @param $message
+	 * @return string
+	 */
+	protected static function hexToBin($message) {
+		if (function_exists('hex2bin')) {
+			return hex2bin($message);
+		}
+
+		return pack("H*", $message);
+	}
+
 	/**
 	 * @param string $message The message to authenticate
 	 * @param string $password Password to use (defaults to `secret` in config.php)
@@ -99,9 +115,9 @@ class Crypto implements ICrypto {
 			throw new \Exception('Authenticated ciphertext could not be decoded.');
 		}
 
-		$ciphertext = hex2bin($parts[0]);
+		$ciphertext = self::hexToBin($parts[0]);
 		$iv = $parts[1];
-		$hmac = hex2bin($parts[2]);
+		$hmac = self::hexToBin($parts[2]);
 
 		$this->cipher->setIV($iv);
 
-- 
cgit v1.2.3