From 5056376902f8f665455647f6152adc95e107499d Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 15 Aug 2021 12:57:29 +0000 Subject: [PATCH] We need to create a vapid public and private key --- src/Model/Subscription.php | 6 +++++- src/Util/Crypto.php | 11 +++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Model/Subscription.php b/src/Model/Subscription.php index 8d3da36ab..fa93eb521 100644 --- a/src/Model/Subscription.php +++ b/src/Model/Subscription.php @@ -19,6 +19,10 @@ * */ + /** + * @see https://github.com/web-push-libs/web-push-php + * Possibly we should simply use this. + */ namespace Friendica\Model; use Friendica\Database\DBA; @@ -104,6 +108,6 @@ class Subscription $keypair = Crypto::newECKeypair(); DI::config()->set('system', 'ec_keypair', $keypair); } - return $keypair['vapid']; + return $keypair['vapid-public']; } } diff --git a/src/Util/Crypto.php b/src/Util/Crypto.php index 85efb9e8a..b3ae2d69b 100644 --- a/src/Util/Crypto.php +++ b/src/Util/Crypto.php @@ -155,7 +155,7 @@ class Crypto /** * Create a new elliptic curve key pair * - * @return array with the elements "prvkey", "vapid" and "pubkey" + * @return array with the elements "prvkey", "pubkey", "vapid-public" and "vapid-private" */ public static function newECKeypair() { @@ -174,7 +174,7 @@ class Crypto throw new Exception('Key creation failed'); } - $response = ['prvkey' => '', 'pubkey' => '', 'vapid' => '']; + $response = ['prvkey' => '', 'pubkey' => '']; // Get private key openssl_pkey_export($result, $response['prvkey']); @@ -183,12 +183,15 @@ class Crypto $pkey = openssl_pkey_get_details($result); $response['pubkey'] = $pkey['key']; - // Create VAPID key + // Create VAPID keys // @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)); + $response['vapid-public'] = Base64UrlSafe::encode(hex2bin($hexString)); + + // @see https://github.com/web-push-libs/web-push-php/blob/256a18b2a2411469c94943725fb6eccb9681bd75/src/VAPID.php + $response['vapid-private'] = Base64UrlSafe::encode(hex2bin(str_pad(bin2hex($pkey['ec']['d']), 64, '0', STR_PAD_LEFT))); return $response; }