add support for php >= 7.1 (mcrypt extension used by cryptlib is deprecated and AEAD...
authorStricted <info@stricted.net>
Fri, 23 Dec 2016 19:11:41 +0000 (20:11 +0100)
committerStricted <info@stricted.net>
Fri, 23 Dec 2016 19:11:41 +0000 (20:11 +0100)
SpeedportHybrid.class.php
lib/trait/CryptLib.class.php

index ba390e6c586f2a81c5eeccfb270383c548c68fdc..06030a604a17300de2ad28ae981503ee59dff703 100644 (file)
@@ -115,17 +115,16 @@ class SpeedportHybrid {
         * @return      array
         */
        private function sendRequest ($path, $fields, $cookie = false, $count = 0) {
-               $url = $this->url.$path.'?lang=en';
+               $url = $this->url.$path;
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $url);
                
                if (!empty($fields)) {
+                       curl_setopt($ch, CURLOPT_POST, true);
                        if (is_array($fields)) {
-                               curl_setopt($ch, CURLOPT_POST, count($fields));
                                curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
                        }
                        else {
-                               curl_setopt($ch, CURLOPT_POST, $count);
                                curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
                        }
                }
index eedecbbf954c904ed2a8c3b5b1cec6705c8d53d8..fb89e96d257f5c56bce70dc5db398f2b35fbbe83 100644 (file)
@@ -31,14 +31,22 @@ trait CryptLib {
                $key = hex2bin($this->derivedk);
                $enc = hex2bin($data);
                
-               $factory = new CryptLib\Cipher\Factory();
-               $aes = $factory->getBlockCipher('rijndael-128');
-               $aes->setKey($key);
-               $mode = $factory->getMode('ccm', $aes, $iv, [ 'adata' => $adata, 'lSize' => 7]);
-               
-               $mode->decrypt($enc);
-               
-               return $mode->finish();
+               if (PHP_VERSION_ID >= 70100) {
+                       $ciphertext = substr($enc, 0, -8);
+                       $tag = substr($enc, strlen($enc)-8);
+                       
+                       return openssl_decrypt($ciphertext, 'aes-128-ccm', $key, OPENSSL_RAW_DATA, $iv, $tag, $adata);
+               }
+               else {
+                       $factory = new CryptLib\Cipher\Factory();
+                       $aes = $factory->getBlockCipher('rijndael-128');
+                       $aes->setKey($key);
+                       $mode = $factory->getMode('ccm', $aes, $iv, [ 'adata' => $adata, 'lSize' => 7]);
+                       
+                       $mode->decrypt($enc);
+                       
+                       return $mode->finish();
+               }
        }
 
        /**
@@ -52,12 +60,23 @@ trait CryptLib {
                $adata = hex2bin(substr($this->challenge, 32, 16));
                $key = hex2bin($this->derivedk);
                
-               $factory = new CryptLib\Cipher\Factory();
-               $aes = $factory->getBlockCipher('rijndael-128');
-               $aes->setKey($key);
-               $mode = $factory->getMode('ccm', $aes, $iv, [ 'adata' => $adata, 'lSize' => 7]);
-               $mode->encrypt($data);
+               if (empty($data)) {
+                       return $data;
+               }
                
-               return bin2hex($mode->finish());
+               if (PHP_VERSION_ID >= 70100) {
+                       $tag = null;
+                       $encdata = openssl_encrypt($data, 'aes-128-ccm', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv, $tag, $adata, 8);
+                       return bin2hex($encdata . $tag);
+               }
+               else {
+                       $factory = new CryptLib\Cipher\Factory();
+                       $aes = $factory->getBlockCipher('rijndael-128');
+                       $aes->setKey($key);
+                       $mode = $factory->getMode('ccm', $aes, $iv, [ 'adata' => $adata, 'lSize' => 7]);
+                       $mode->encrypt($data);
+                       var_dump(bin2hex($mode->finish()));
+                       return bin2hex($mode->finish());
+               }
        }
 }