mirror of
https://github.com/friendica/friendica
synced 2025-04-30 09:04:22 +02:00
API: First steps to support subscriptions
This commit is contained in:
parent
1e305e748d
commit
e28a4265c5
18 changed files with 416 additions and 20 deletions
|
@ -25,6 +25,7 @@ use Friendica\Core\Hook;
|
|||
use Friendica\Core\Logger;
|
||||
use Friendica\Core\System;
|
||||
use Friendica\DI;
|
||||
use ParagonIE\ConstantTime\Base64UrlSafe;
|
||||
use phpseclib\Crypt\RSA;
|
||||
use phpseclib\Math\BigInteger;
|
||||
|
||||
|
@ -150,6 +151,48 @@ class Crypto
|
|||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new elliptic curve key pair
|
||||
*
|
||||
* @return array with the elements "prvkey", "vapid" and "pubkey"
|
||||
*/
|
||||
public static function newECKeypair()
|
||||
{
|
||||
$openssl_options = [
|
||||
'curve_name' => 'prime256v1',
|
||||
'private_key_type' => OPENSSL_KEYTYPE_EC
|
||||
];
|
||||
|
||||
$conf = DI::config()->get('system', 'openssl_conf_file');
|
||||
if ($conf) {
|
||||
$openssl_options['config'] = $conf;
|
||||
}
|
||||
$result = openssl_pkey_new($openssl_options);
|
||||
|
||||
if (empty($result)) {
|
||||
Logger::notice('new_keypair: failed');
|
||||
return [];
|
||||
}
|
||||
|
||||
$response = ['prvkey' => '', 'pubkey' => '', 'vapid' => ''];
|
||||
|
||||
// Get private key
|
||||
openssl_pkey_export($result, $response['prvkey']);
|
||||
|
||||
// Get public key
|
||||
$pkey = openssl_pkey_get_details($result);
|
||||
$response['pubkey'] = $pkey['key'];
|
||||
|
||||
// Create VAPID key
|
||||
// @see https://github.com/web-push-libs/web-push-php/blob/256a18b2a2411469c94943725fb6eccb9681bd75/src/Utils.php#L60-L62
|
||||
$hexString = '04';
|
||||
$hexString .= str_pad(bin2hex($pkey['ec']['x']), 64, '0', STR_PAD_LEFT);
|
||||
$hexString .= str_pad(bin2hex($pkey['ec']['y']), 64, '0', STR_PAD_LEFT);
|
||||
$response['vapid'] = Base64UrlSafe::encode(hex2bin($hexString));
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Encrypt a string with 'aes-256-cbc' cipher method.
|
||||
*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue