<?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
*
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
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
$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, [
]
];
- $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, [
]
];
- $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, [
*/
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);
}
}