Skip to content

Commit 3e750c1

Browse files
committed
victory!
65 as a Uint16 big endian is \000A apparently also don't mess with UTF-8 encoding
1 parent 0395a2b commit 3e750c1

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

src/Encryption.php

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
namespace Minishlink\WebPush;
1313

1414
use Base64Url\Base64Url;
15-
use Mdanter\Ecc\Crypto\Key\PublicKey;
1615
use Mdanter\Ecc\EccFactory;
1716
use Mdanter\Ecc\Serializer\Point\UncompressedPointSerializer;
1817

@@ -41,21 +40,22 @@ public static function encrypt($payload, $userPublicKey, $userAuthToken, $native
4140
{
4241
$userPublicKey = base64_decode($userPublicKey);
4342
$userAuthToken = base64_decode($userAuthToken);
44-
$plaintext = chr(0).chr(0).utf8_decode($payload);
43+
$plaintext = chr(0).chr(0).$payload;
4544

4645
// initialize utilities
4746
$math = EccFactory::getAdapter();
48-
$keySerializer = new UncompressedPointSerializer($math);
49-
$curveGenerator = EccFactory::getNistCurves()->generator256();
47+
$pointSerializer = new UncompressedPointSerializer($math);
48+
$generator = EccFactory::getNistCurves()->generator256();
5049
$curve = EccFactory::getNistCurves()->curve256();
5150

5251
// get local key pair
53-
$localPrivateKeyObject = $curveGenerator->createPrivateKey();
52+
$localPrivateKeyObject = $generator->createPrivateKey();
5453
$localPublicKeyObject = $localPrivateKeyObject->getPublicKey();
55-
$localPublicKey = hex2bin($keySerializer->serialize($localPublicKeyObject->getPoint()));
54+
$localPublicKey = hex2bin($pointSerializer->serialize($localPublicKeyObject->getPoint()));
5655

5756
// get user public key object
58-
$userPublicKeyObject = new PublicKey($math, $curveGenerator, $keySerializer->unserialize($curve, bin2hex($userPublicKey)));
57+
$pointUserPublicKey = $pointSerializer->unserialize($curve, bin2hex($userPublicKey));
58+
$userPublicKeyObject = $generator->getPublicKeyFrom($pointUserPublicKey->getX(), $pointUserPublicKey->getY(), $generator->getOrder());
5959

6060
// get shared secret from user public key and local private key
6161
$sharedSecret = hex2bin($math->decHex($userPublicKeyObject->getPoint()->mul($localPrivateKeyObject->getSecret())->getX()));
@@ -145,7 +145,9 @@ private static function createContext($clientPublicKey, $serverPublicKey)
145145
throw new \ErrorException('Invalid server public key length');
146146
}
147147

148-
return chr(0).strlen($clientPublicKey).$clientPublicKey.strlen($serverPublicKey).$serverPublicKey;
148+
$len = chr(0).'A'; // 65 as Uint16BE
149+
150+
return chr(0).$len.$clientPublicKey.$len.$serverPublicKey;
149151
}
150152

151153
/**

0 commit comments

Comments
 (0)