mirror of
https://github.com/friendica/friendica
synced 2025-04-28 17:04:23 +02:00
base64url calls
implement base64UrlEncode and base64UrlDecode functions
This commit is contained in:
parent
0efcbe5d15
commit
6fc9c6de3b
13 changed files with 64 additions and 59 deletions
|
@ -1002,7 +1002,7 @@ class DFRN
|
|||
XML::addElement($doc, $entry, "updated", DateTimeFormat::utc($item["edited"] . "+00:00", DateTimeFormat::ATOM));
|
||||
|
||||
// "dfrn:env" is used to read the content
|
||||
XML::addElement($doc, $entry, "dfrn:env", base64url_encode($body, true));
|
||||
XML::addElement($doc, $entry, "dfrn:env", Strings::base64UrlEncode($body, true));
|
||||
|
||||
// The "content" field is not read by the receiver. We could remove it when the type is "text"
|
||||
// We keep it at the moment, maybe there is some old version that doesn't read "dfrn:env"
|
||||
|
@ -2494,7 +2494,7 @@ class DFRN
|
|||
$item["body"] = XML::getFirstNodeValue($xpath, "dfrn:env/text()", $entry);
|
||||
$item["body"] = str_replace([' ',"\t","\r","\n"], ['','','',''], $item["body"]);
|
||||
// make sure nobody is trying to sneak some html tags by us
|
||||
$item["body"] = Strings::removeTags(base64url_decode($item["body"]));
|
||||
$item["body"] = Strings::removeTags(Strings::base64UrlDecode($item["body"]));
|
||||
|
||||
$item["body"] = BBCode::limitBodySize($item["body"]);
|
||||
|
||||
|
|
|
@ -298,23 +298,23 @@ class Diaspora
|
|||
|
||||
$handle = "";
|
||||
|
||||
$data = base64url_decode($children->data);
|
||||
$data = Strings::base64UrlDecode($children->data);
|
||||
$type = $children->data->attributes()->type[0];
|
||||
|
||||
$encoding = $children->encoding;
|
||||
|
||||
$alg = $children->alg;
|
||||
|
||||
$sig = base64url_decode($children->sig);
|
||||
$sig = Strings::base64UrlDecode($children->sig);
|
||||
$key_id = $children->sig->attributes()->key_id[0];
|
||||
if ($key_id != "") {
|
||||
$handle = base64url_decode($key_id);
|
||||
$handle = Strings::base64UrlDecode($key_id);
|
||||
}
|
||||
|
||||
$b64url_data = base64url_encode($data);
|
||||
$b64url_data = Strings::base64UrlEncode($data);
|
||||
$msg = str_replace(["\n", "\r", " ", "\t"], ["", "", "", ""], $b64url_data);
|
||||
|
||||
$signable_data = $msg.".".base64url_encode($type).".".base64url_encode($encoding).".".base64url_encode($alg);
|
||||
$signable_data = $msg.".".Strings::base64UrlEncode($type).".".Strings::base64UrlEncode($encoding).".".Strings::base64UrlEncode($alg);
|
||||
|
||||
if ($handle == '') {
|
||||
Logger::log('No author could be decoded. Discarding. Message: ' . $envelope);
|
||||
|
@ -426,10 +426,10 @@ class Diaspora
|
|||
$type = $base->data[0]->attributes()->type[0];
|
||||
$encoding = $base->encoding;
|
||||
$alg = $base->alg;
|
||||
$signed_data = $data.'.'.base64url_encode($type).'.'.base64url_encode($encoding).'.'.base64url_encode($alg);
|
||||
$signed_data = $data.'.'.Strings::base64UrlEncode($type).'.'.Strings::base64UrlEncode($encoding).'.'.Strings::base64UrlEncode($alg);
|
||||
|
||||
// This is the signature
|
||||
$signature = base64url_decode($base->sig);
|
||||
$signature = Strings::base64UrlDecode($base->sig);
|
||||
|
||||
// Get the senders' public key
|
||||
$key_id = $base->sig[0]->attributes()->key_id[0];
|
||||
|
@ -463,7 +463,7 @@ class Diaspora
|
|||
}
|
||||
}
|
||||
|
||||
return ['message' => (string)base64url_decode($base->data),
|
||||
return ['message' => (string)Strings::base64UrlDecode($base->data),
|
||||
'author' => XML::unescape($author_addr),
|
||||
'key' => (string)$key];
|
||||
}
|
||||
|
@ -547,7 +547,7 @@ class Diaspora
|
|||
|
||||
|
||||
// Stash the signature away for now. We have to find their key or it won't be good for anything.
|
||||
$signature = base64url_decode($base->sig);
|
||||
$signature = Strings::base64UrlDecode($base->sig);
|
||||
|
||||
// unpack the data
|
||||
|
||||
|
@ -563,11 +563,11 @@ class Diaspora
|
|||
$alg = $base->alg;
|
||||
|
||||
|
||||
$signed_data = $data.'.'.base64url_encode($type).'.'.base64url_encode($encoding).'.'.base64url_encode($alg);
|
||||
$signed_data = $data.'.'.Strings::base64UrlEncode($type).'.'.Strings::base64UrlEncode($encoding).'.'.Strings::base64UrlEncode($alg);
|
||||
|
||||
|
||||
// decode the data
|
||||
$data = base64url_decode($data);
|
||||
$data = Strings::base64UrlDecode($data);
|
||||
|
||||
|
||||
if ($public) {
|
||||
|
@ -2962,14 +2962,14 @@ class Diaspora
|
|||
*/
|
||||
public static function buildMagicEnvelope($msg, array $user)
|
||||
{
|
||||
$b64url_data = base64url_encode($msg);
|
||||
$b64url_data = Strings::base64UrlEncode($msg);
|
||||
$data = str_replace(["\n", "\r", " ", "\t"], ["", "", "", ""], $b64url_data);
|
||||
|
||||
$key_id = base64url_encode(self::myHandle($user));
|
||||
$key_id = Strings::base64UrlEncode(self::myHandle($user));
|
||||
$type = "application/xml";
|
||||
$encoding = "base64url";
|
||||
$alg = "RSA-SHA256";
|
||||
$signable_data = $data.".".base64url_encode($type).".".base64url_encode($encoding).".".base64url_encode($alg);
|
||||
$signable_data = $data.".".Strings::base64UrlEncode($type).".".Strings::base64UrlEncode($encoding).".".Strings::base64UrlEncode($alg);
|
||||
|
||||
// Fallback if the private key wasn't transmitted in the expected field
|
||||
if ($user['uprvkey'] == "") {
|
||||
|
@ -2977,7 +2977,7 @@ class Diaspora
|
|||
}
|
||||
|
||||
$signature = Crypto::rsaSign($signable_data, $user["uprvkey"]);
|
||||
$sig = base64url_encode($signature);
|
||||
$sig = Strings::base64UrlEncode($signature);
|
||||
|
||||
$xmldata = ["me:env" => ["me:data" => $data,
|
||||
"@attributes" => ["type" => $type],
|
||||
|
|
|
@ -8,6 +8,7 @@ use Friendica\Core\Logger;
|
|||
use Friendica\Network\Probe;
|
||||
use Friendica\Util\Crypto;
|
||||
use Friendica\Util\Network;
|
||||
use Friendica\Util\Strings;
|
||||
use Friendica\Util\XML;
|
||||
|
||||
/**
|
||||
|
@ -70,7 +71,7 @@ class Salmon
|
|||
return $ret[0];
|
||||
} else {
|
||||
foreach ($ret as $a) {
|
||||
$hash = base64url_encode(hash('sha256', $a));
|
||||
$hash = Strings::base64UrlEncode(hash('sha256', $a));
|
||||
if ($hash == $keyhash) {
|
||||
return $a;
|
||||
}
|
||||
|
@ -104,22 +105,22 @@ class Salmon
|
|||
|
||||
// create a magic envelope
|
||||
|
||||
$data = base64url_encode($slap);
|
||||
$data = Strings::base64UrlEncode($slap);
|
||||
$data_type = 'application/atom+xml';
|
||||
$encoding = 'base64url';
|
||||
$algorithm = 'RSA-SHA256';
|
||||
$keyhash = base64url_encode(hash('sha256', self::salmonKey($owner['spubkey'])), true);
|
||||
$keyhash = Strings::base64UrlEncode(hash('sha256', self::salmonKey($owner['spubkey'])), true);
|
||||
|
||||
$precomputed = '.' . base64url_encode($data_type) . '.' . base64url_encode($encoding) . '.' . base64url_encode($algorithm);
|
||||
$precomputed = '.' . Strings::base64UrlEncode($data_type) . '.' . Strings::base64UrlEncode($encoding) . '.' . Strings::base64UrlEncode($algorithm);
|
||||
|
||||
// GNU Social format
|
||||
$signature = base64url_encode(Crypto::rsaSign($data . $precomputed, $owner['sprvkey']));
|
||||
$signature = Strings::base64UrlEncode(Crypto::rsaSign($data . $precomputed, $owner['sprvkey']));
|
||||
|
||||
// Compliant format
|
||||
$signature2 = base64url_encode(Crypto::rsaSign(str_replace('=', '', $data . $precomputed), $owner['sprvkey']));
|
||||
$signature2 = Strings::base64UrlEncode(Crypto::rsaSign(str_replace('=', '', $data . $precomputed), $owner['sprvkey']));
|
||||
|
||||
// Old Status.net format
|
||||
$signature3 = base64url_encode(Crypto::rsaSign($data, $owner['sprvkey']));
|
||||
$signature3 = Strings::base64UrlEncode(Crypto::rsaSign($data, $owner['sprvkey']));
|
||||
|
||||
// At first try the non compliant method that works for GNU Social
|
||||
$xmldata = ["me:env" => ["me:data" => $data,
|
||||
|
@ -208,6 +209,6 @@ class Salmon
|
|||
public static function salmonKey($pubkey)
|
||||
{
|
||||
Crypto::pemToMe($pubkey, $m, $e);
|
||||
return 'RSA' . '.' . base64url_encode($m, true) . '.' . base64url_encode($e, true);
|
||||
return 'RSA' . '.' . Strings::base64UrlEncode($m, true) . '.' . Strings::base64UrlEncode($e, true);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue