]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/Salmon.php
Use short form array syntax everywhere
[friendica.git] / src / Protocol / Salmon.php
index d26a3229d11433e8d98df245b3174fd7d2f560b4..5b0c66fb9d13271fba3bc392d693e0912d92cd4f 100644 (file)
@@ -5,10 +5,9 @@
 namespace Friendica\Protocol;
 
 use Friendica\Network\Probe;
+use Friendica\Util\Crypto;
 use Friendica\Util\XML;
 
-require_once 'include/crypto.php';
-
 /**
  * @brief Salmon Protocol class
  * The Salmon Protocol is a message exchange protocol running over HTTP designed to decentralize commentary
@@ -23,7 +22,7 @@ class Salmon
         */
        public static function getKey($uri, $keyhash)
        {
-               $ret = array();
+               $ret = [];
 
                logger('Fetching salmon key for '.$uri);
 
@@ -107,36 +106,36 @@ class Salmon
                $data_type = 'application/atom+xml';
                $encoding  = 'base64url';
                $algorithm = 'RSA-SHA256';
-               $keyhash   = base64url_encode(hash('sha256', salmon_key($owner['spubkey'])), true);
+               $keyhash   = base64url_encode(hash('sha256', self::salmonKey($owner['spubkey'])), true);
 
                $precomputed = '.' . base64url_encode($data_type) . '.' . base64url_encode($encoding) . '.' . base64url_encode($algorithm);
 
                // GNU Social format
-               $signature   = base64url_encode(rsa_sign($data . $precomputed, $owner['sprvkey']));
+               $signature   = base64url_encode(Crypto::rsaSign($data . $precomputed, $owner['sprvkey']));
 
                // Compliant format
-               $signature2  = base64url_encode(rsa_sign(str_replace('=', '', $data . $precomputed), $owner['sprvkey']));
+               $signature2  = base64url_encode(Crypto::rsaSign(str_replace('=', '', $data . $precomputed), $owner['sprvkey']));
 
                // Old Status.net format
-               $signature3  = base64url_encode(rsa_sign($data, $owner['sprvkey']));
+               $signature3  = base64url_encode(Crypto::rsaSign($data, $owner['sprvkey']));
 
                // At first try the non compliant method that works for GNU Social
-               $xmldata = array("me:env" => array("me:data" => $data,
-                               "@attributes" => array("type" => $data_type),
+               $xmldata = ["me:env" => ["me:data" => $data,
+                               "@attributes" => ["type" => $data_type],
                                "me:encoding" => $encoding,
                                "me:alg" => $algorithm,
                                "me:sig" => $signature,
-                               "@attributes2" => array("key_id" => $keyhash)));
+                               "@attributes2" => ["key_id" => $keyhash]]];
 
-               $namespaces = array("me" => "http://salmon-protocol.org/ns/magic-env");
+               $namespaces = ["me" => "http://salmon-protocol.org/ns/magic-env"];
 
                $salmon = XML::fromArray($xmldata, $xml, false, $namespaces);
 
                // slap them
-               post_url($url, $salmon, array(
+               post_url($url, $salmon, [
                        'Content-type: application/magic-envelope+xml',
                        'Content-length: ' . strlen($salmon)
-               ));
+               ]);
 
                $a = get_app();
                $return_code = $a->get_curl_code();
@@ -147,22 +146,22 @@ class Salmon
                        logger('GNU Social salmon failed. Falling back to compliant mode');
 
                        // Now try the compliant mode that normally isn't used for GNU Social
-                       $xmldata = array("me:env" => array("me:data" => $data,
-                                       "@attributes" => array("type" => $data_type),
+                       $xmldata = ["me:env" => ["me:data" => $data,
+                                       "@attributes" => ["type" => $data_type],
                                        "me:encoding" => $encoding,
                                        "me:alg" => $algorithm,
                                        "me:sig" => $signature2,
-                                       "@attributes2" => array("key_id" => $keyhash)));
+                                       "@attributes2" => ["key_id" => $keyhash]]];
 
-                       $namespaces = array("me" => "http://salmon-protocol.org/ns/magic-env");
+                       $namespaces = ["me" => "http://salmon-protocol.org/ns/magic-env"];
 
                        $salmon = XML::fromArray($xmldata, $xml, false, $namespaces);
 
                        // slap them
-                       post_url($url, $salmon, array(
+                       post_url($url, $salmon, [
                                'Content-type: application/magic-envelope+xml',
                                'Content-length: ' . strlen($salmon)
-                       ));
+                       ]);
                        $return_code = $a->get_curl_code();
                }
 
@@ -170,21 +169,21 @@ class Salmon
                        logger('compliant salmon failed. Falling back to old status.net');
 
                        // Last try. This will most likely fail as well.
-                       $xmldata = array("me:env" => array("me:data" => $data,
-                                       "@attributes" => array("type" => $data_type),
+                       $xmldata = ["me:env" => ["me:data" => $data,
+                                       "@attributes" => ["type" => $data_type],
                                        "me:encoding" => $encoding,
                                        "me:alg" => $algorithm,
                                        "me:sig" => $signature3,
-                                       "@attributes2" => array("key_id" => $keyhash)));
+                                       "@attributes2" => ["key_id" => $keyhash]]];
 
-                       $namespaces = array("me" => "http://salmon-protocol.org/ns/magic-env");
+                       $namespaces = ["me" => "http://salmon-protocol.org/ns/magic-env"];
 
                        $salmon = XML::fromArray($xmldata, $xml, false, $namespaces);
 
                        // slap them
-                       post_url($url, $salmon, array(
+                       post_url($url, $salmon, [
                                'Content-type: application/magic-envelope+xml',
-                               'Content-length: ' . strlen($salmon))
+                               'Content-length: ' . strlen($salmon)]
                        );
                        $return_code = $a->get_curl_code();
                }
@@ -201,4 +200,14 @@ class Salmon
 
                return (($return_code >= 200) && ($return_code < 300)) ? 0 : 1;
        }
+
+       /**
+        * @param string $pubkey public key
+        * @return string
+        */
+       public static function salmonKey($pubkey)
+       {
+               Crypto::pemToMe($pubkey, $m, $e);
+               return 'RSA' . '.' . base64url_encode($m, true) . '.' . base64url_encode($e, true);
+       }
 }