]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/Salmon.php
Merge remote-tracking branch 'upstream/develop' into user-defined-channels
[friendica.git] / src / Protocol / Salmon.php
index b1bdb67e1dd206074cbe0e250f3de3ff2af28392..5047375ea0fb81c89caccb69a6cc1b87e6d25418 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2022, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -25,9 +25,11 @@ use Friendica\Core\Logger;
 use Friendica\DI;
 use Friendica\Network\HTTPClient\Client\HttpClientAccept;
 use Friendica\Network\Probe;
+use Friendica\Protocol\Salmon\Format\Magic;
 use Friendica\Util\Crypto;
 use Friendica\Util\Strings;
 use Friendica\Util\XML;
+use phpseclib3\Crypt\PublicKeyLoader;
 
 /**
  * Salmon Protocol class
@@ -83,7 +85,7 @@ class Salmon
                Logger::notice('Key located', ['ret' => $ret]);
 
                if (count($ret) == 1) {
-                       /* We only found one one key so we don't care if the hash matches.
+                       /* We only found one key so we don't care if the hash matches.
                         * If it's the wrong key we'll find out soon enough because
                         * message verification will fail. This also covers some older
                         * software which don't supply a keyhash. As long as they only
@@ -158,7 +160,7 @@ class Salmon
 
                $namespaces = ['me' => ActivityNamespace::SALMON_ME];
 
-               $salmon = XML::fromArray($xmldata, $xml, false, $namespaces);
+               $salmon = XML::fromArray($xmldata, $dummy, false, $namespaces);
 
                // slap them
                $postResult = DI::httpClient()->post($url, $salmon, [
@@ -185,9 +187,7 @@ class Salmon
                                ]
                        ];
 
-                       $namespaces = ['me' => ActivityNamespace::SALMON_ME];
-
-                       $salmon = XML::fromArray($xmldata, $xml, false, $namespaces);
+                       $salmon = XML::fromArray($xmldata, $dummy, false, $namespaces);
 
                        // slap them
                        $postResult = DI::httpClient()->post($url, $salmon, [
@@ -212,9 +212,7 @@ class Salmon
                                ]
                        ];
 
-                       $namespaces = ['me' => ActivityNamespace::SALMON_ME];
-
-                       $salmon = XML::fromArray($xmldata, $xml, false, $namespaces);
+                       $salmon = XML::fromArray($xmldata, $dummy, false, $namespaces);
 
                        // slap them
                        $postResult = DI::httpClient()->post($url, $salmon, [
@@ -243,7 +241,19 @@ class Salmon
         */
        public static function salmonKey(string $pubkey): string
        {
-               Crypto::pemToMe($pubkey, $modulus, $exponent);
-               return 'RSA' . '.' . Strings::base64UrlEncode($modulus, true) . '.' . Strings::base64UrlEncode($exponent, true);
+               \phpseclib3\Crypt\RSA::addFileFormat(Magic::class);
+
+               return PublicKeyLoader::load($pubkey)->toString('Magic');
+       }
+
+       /**
+        * @param string $magic Magic key format starting with "RSA."
+        * @return string
+        */
+       public static function magicKeyToPem(string $magic): string
+       {
+               \phpseclib3\Crypt\RSA::addFileFormat(Magic::class);
+
+               return (string) PublicKeyLoader::load($magic);
        }
 }