Skip to content

Commit 1045bc3

Browse files
committed
:octocat: made the key crate/convert methods static
1 parent 363c40d commit 1045bc3

15 files changed

+87
-104
lines changed

src/Key/ECKey.php

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -164,20 +164,20 @@ final class ECKey extends OpenSSLKeyAbstract{
164164
'038186'. // BIT STRING, length 134
165165
'00'; // prepend with NUL - pubkey will follow
166166

167-
public function create(string|null $kid = null, string|null $use = null, string $crv = self::CRV_P521):array{
168-
return $this->toArray($this->createKey($crv), true, $kid, $use);
167+
public static function create(string|null $kid = null, string|null $use = null, string $crv = self::CRV_P521):array{
168+
return self::toArray(self::createKey($crv), true, $kid, $use);
169169
}
170170

171-
public function createPEM(string $crv = self::CRV_P521):string{
171+
public static function createPEM(string $crv = self::CRV_P521):string{
172172

173-
if(openssl_pkey_export($this->createKey($crv), $pem) === false){
173+
if(openssl_pkey_export(self::createKey($crv), $pem) === false){
174174
throw new RuntimeException('unable to export the key');
175175
}
176176

177177
return $pem;
178178
}
179179

180-
public function privateKeyToPEM(array $jwk):string{
180+
public static function privateJWKtoPEM(array $jwk):string{
181181

182182
if(!isset($jwk['crv'])){
183183
throw new InvalidArgumentException('"crv" not set');
@@ -197,13 +197,13 @@ public function privateKeyToPEM(array $jwk):string{
197197
default => throw new RuntimeException(sprintf('unsupported curve: "%s"', $jwk['crv'])),
198198
};
199199

200-
$der = sodium_hex2bin(sprintf($der, sodium_bin2hex($this->zeropad($key['d'], $padSize))));
201-
$der .= $this->getKey($jwk['crv'], $key['x'], $key['y']);
200+
$der = sodium_hex2bin(sprintf($der, sodium_bin2hex(self::zeropad($key['d'], $padSize))));
201+
$der .= self::getKey($jwk['crv'], $key['x'], $key['y']);
202202

203203
return Util::formatPEM($der, 'EC PRIVATE');
204204
}
205205

206-
public function publicKeyToPEM(array $jwk):string{
206+
public static function publicJWKtoPEM(array $jwk):string{
207207

208208
if(!isset($jwk['crv'])){
209209
throw new InvalidArgumentException('"crv" not set');
@@ -224,7 +224,7 @@ public function publicKeyToPEM(array $jwk):string{
224224
};
225225

226226
$der = sodium_hex2bin($der);
227-
$der .= $this->getKey($jwk['crv'], $key['x'], $key['y']);
227+
$der .= self::getKey($jwk['crv'], $key['x'], $key['y']);
228228

229229
return Util::formatPEM($der);
230230
}
@@ -239,18 +239,17 @@ protected static function parseJWK(array $jsonKeyData):array{
239239
throw new InvalidArgumentException('"crv" not set');
240240
}
241241

242-
$ecKey = new self;
243-
$public = $ecKey->publicKeyToPEM($jsonKeyData);
242+
$public = self::publicJWKtoPEM($jsonKeyData);
244243
$private = null;
245244

246245
if(isset($jsonKeyData['d'])){
247-
$private = $ecKey->privateKeyToPEM($jsonKeyData);
246+
$private = self::privateJWKtoPEM($jsonKeyData);
248247
}
249248

250249
return [$private, $public];
251250
}
252251

253-
protected function toArray(OpenSSLAsymmetricKey $key, bool $private, string|null $kid = null, string|null $use = null):array{
252+
protected static function toArray(OpenSSLAsymmetricKey $key, bool $private, string|null $kid = null, string|null $use = null):array{
254253
$details = openssl_pkey_get_details($key);
255254

256255
if($details === false){
@@ -266,9 +265,9 @@ protected function toArray(OpenSSLAsymmetricKey $key, bool $private, string|null
266265
}
267266

268267
$crv = self::EC_CURVES[$details['ec']['curve_name']];
269-
$jwk = $this->addInformationalValues(['kty' => 'EC', 'crv' => $crv], $kid, $use);
268+
$jwk = self::addInformationalValues(['kty' => 'EC', 'crv' => $crv], $kid, $use);
270269

271-
$curveSize = $this->getNistCurveSize($crv);
270+
$curveSize = self::getNistCurveSize($crv);
272271
$params = self::PARAMS_PUBLIC;
273272

274273
if($private === true){
@@ -277,14 +276,14 @@ protected function toArray(OpenSSLAsymmetricKey $key, bool $private, string|null
277276

278277
foreach($params as $param){
279278
if(isset($details['ec'][$param])){
280-
$jwk[$param] = Util::base64encode($this->zeropad($details['ec'][$param], $curveSize));
279+
$jwk[$param] = Util::base64encode(self::zeropad($details['ec'][$param], $curveSize));
281280
}
282281
}
283282

284283
return $jwk;
285284
}
286285

287-
private function createKey(string $crv):OpenSSLAsymmetricKey{
286+
private static function createKey(string $crv):OpenSSLAsymmetricKey{
288287

289288
if(!isset(self::CRV_OPENSSL[$crv])){
290289
throw new InvalidArgumentException('the given curve is not supported'); // @codeCoverageIgnore
@@ -302,15 +301,15 @@ private function createKey(string $crv):OpenSSLAsymmetricKey{
302301
return $key;
303302
}
304303

305-
private function getKey(string $crv, string $x, string $y):string{
306-
$curveSize = $this->getNistCurveSize($crv);
304+
private static function getKey(string $crv, string $x, string $y):string{
305+
$curveSize = self::getNistCurveSize($crv);
307306

308307
return "\04".
309-
$this->zeropad(ltrim($x, "\x00"), $curveSize).
310-
$this->zeropad(ltrim($y, "\x00"), $curveSize);
308+
self::zeropad(ltrim($x, "\x00"), $curveSize).
309+
self::zeropad(ltrim($y, "\x00"), $curveSize);
311310
}
312311

313-
private function getNistCurveSize(string $curve):int{
312+
private static function getNistCurveSize(string $curve):int{
314313

315314
$size = match($curve){
316315
self::CRV_P256, self::CRV_P256K => 256,
@@ -322,7 +321,7 @@ private function getNistCurveSize(string $curve):int{
322321
return (int)ceil($size / 8);
323322
}
324323

325-
private function zeropad(string $str, int $length):string{
324+
private static function zeropad(string $str, int $length):string{
326325
return str_pad($str, $length, "\x00", STR_PAD_LEFT);
327326
}
328327

src/Key/JWK.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public function getID():string|null;
3636

3737
public function getUse():string|null;
3838

39-
public function create(string|null $kid = null, string|null $use = null):array;
39+
public static function create(string|null $kid = null, string|null $use = null):array;
4040

4141
public function toPrivateJWK(string|null $kid = null, string|null $use = null):array;
4242

src/Key/JWKAbstract.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,9 @@ public static function parse(array $jsonKeyData):static{
9292
return new static($private, $public, ($jsonKeyData['alg'] ?? null), $kid, ($jsonKeyData['use'] ?? null));
9393
}
9494

95-
protected function addInformationalValues(array $jwk, string|null $kid = null, string|null $use = null):array{
95+
protected static function addInformationalValues(array $jwk, string|null $kid = null, string|null $use = null):array{
9696

9797
foreach(['kid' => $kid, 'use' => $use] as $var => $val){
98-
$val ??= $this->{$var};
99-
10098
if($val !== null){
10199
$jwk[$var] = trim($val);
102100
}

src/Key/OCTKey.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,14 @@ protected static function parseJWK(array $jsonKeyData):array{
4444
return [$key, $key];
4545
}
4646

47-
public function create(string|null $kid = null, string|null $use = null, bool $asPEM = false):array{
48-
49-
if($asPEM === true){
50-
throw new RuntimeException('PEM export is not supported');
51-
}
47+
public static function create(string|null $kid = null, string|null $use = null):array{
5248

5349
$jwk = [
5450
'kty' => 'oct',
5551
'k' => Util::base64encode(random_bytes(64)),
5652
];
5753

58-
return $this->addInformationalValues($jwk, $kid, $use);
54+
return self::addInformationalValues($jwk, $kid, $use);
5955
}
6056

6157
public function toPrivateJWK(string|null $kid = null, string|null $use = null):array{
@@ -65,7 +61,7 @@ public function toPrivateJWK(string|null $kid = null, string|null $use = null):a
6561
'k' => Util::base64encode($this->getPrivateKey()),
6662
];
6763

68-
return $this->addInformationalValues($jwk, $kid, $use);
64+
return self::addInformationalValues($jwk, ($kid ?? $this->kid), ($use ?? $this->use));
6965
}
7066

7167
public function toPublicJWK(string|null $kid = null, string|null $use = null):array{
@@ -75,7 +71,7 @@ public function toPublicJWK(string|null $kid = null, string|null $use = null):ar
7571
'k' => Util::base64encode($this->getPublicKey()),
7672
];
7773

78-
return $this->addInformationalValues($jwk, $kid, $use);
74+
return self::addInformationalValues($jwk, ($kid ?? $this->kid), ($use ?? $this->use));
7975
}
8076

8177
}

src/Key/OKPKey.php

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,7 @@ protected static function parseJWK(array $jsonKeyData):array{
6666
return [$private, $key['x']];
6767
}
6868

69-
public function create(string|null $kid = null, string|null $use = null, bool $asPEM = false):array{
70-
71-
if($asPEM === true){
72-
throw new RuntimeException('PEM export is not supported');
73-
}
74-
69+
public static function create(string|null $kid = null, string|null $use = null):array{
7570
$sign_pair = sodium_crypto_sign_keypair();
7671

7772
$jwk = [
@@ -81,7 +76,7 @@ public function create(string|null $kid = null, string|null $use = null, bool $a
8176
'x' => Util::base64encode(sodium_crypto_sign_publickey($sign_pair)),
8277
];
8378

84-
return $this->addInformationalValues($jwk, $kid, $use);
79+
return self::addInformationalValues($jwk, $kid, $use);
8580
}
8681

8782
public function toPrivateJWK(string|null $kid = null, string|null $use = null):array{
@@ -93,7 +88,7 @@ public function toPrivateJWK(string|null $kid = null, string|null $use = null):a
9388
'x' => Util::base64encode($this->getPublicKey()),
9489
];
9590

96-
return $this->addInformationalValues($jwk, $kid, $use);
91+
return self::addInformationalValues($jwk, ($kid ?? $this->kid), ($use ?? $this->use));
9792
}
9893

9994
public function toPublicJWK(string|null $kid = null, string|null $use = null):array{
@@ -104,7 +99,7 @@ public function toPublicJWK(string|null $kid = null, string|null $use = null):ar
10499
'x' => Util::base64encode($this->getPublicKey()),
105100
];
106101

107-
return $this->addInformationalValues($jwk, $kid, $use);
102+
return self::addInformationalValues($jwk, ($kid ?? $this->kid), ($use ?? $this->use));
108103
}
109104

110105
}

src/Key/OpenSSLKey.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@
1313

1414
interface OpenSSLKey extends JWK{
1515

16-
public function createPEM():string;
16+
public static function createPEM():string;
1717

18-
public function privateKeyToPEM(array $jwk):string;
18+
public static function privateJWKtoPEM(array $jwk):string;
1919

20-
public function publicKeyToPEM(array $jwk):string;
20+
public static function publicJWKtoPEM(array $jwk):string;
2121

22-
public function pemToPrivateJWK(string $pem, string|null $kid = null, string|null $use = null):array;
22+
public static function pemToPrivateJWK(string $pem, string|null $kid = null, string|null $use = null):array;
2323

24-
public function pemToPublicJWK(string $pem, string|null $kid = null, string|null $use = null):array;
24+
public static function pemToPublicJWK(string $pem, string|null $kid = null, string|null $use = null):array;
2525

2626
}

src/Key/OpenSSLKeyAbstract.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,27 @@
1616

1717
abstract class OpenSSLKeyAbstract extends JWKAbstract implements OpenSSLKey{
1818

19-
abstract protected function toArray(
19+
abstract protected static function toArray(
2020
OpenSSLAsymmetricKey $key,
2121
bool $private,
2222
string|null $kid = null,
2323
string|null $use = null,
2424
):array;
2525

26-
public function pemToPrivateJWK(string $pem, string|null $kid = null, string|null $use = null):array{
27-
return $this->toArray(Util::loadPEM($pem), true, $kid, $use);
26+
public static function pemToPrivateJWK(string $pem, string|null $kid = null, string|null $use = null):array{
27+
return static::toArray(Util::loadPEM($pem), true, $kid, $use);
2828
}
2929

30-
public function pemToPublicJWK(string $pem, string|null $kid = null, string|null $use = null):array{
31-
return $this->toArray(Util::loadPEM($pem), false, $kid, $use);
30+
public static function pemToPublicJWK(string $pem, string|null $kid = null, string|null $use = null):array{
31+
return static::toArray(Util::loadPEM($pem), false, $kid, $use);
3232
}
3333

3434
public function toPrivateJWK(string|null $kid = null, string|null $use = null):array{
35-
return $this->pemToPrivateJWK($this->getPrivateKey(), $kid, $use);
35+
return $this->pemToPrivateJWK($this->getPrivateKey(), ($kid ?? $this->kid), ($use ?? $this->use));
3636
}
3737

3838
public function toPublicJWK(string|null $kid = null, string|null $use = null):array{
39-
return $this->pemToPublicJWK($this->getPublicKey(), $kid, $use);
39+
return $this->pemToPublicJWK($this->getPublicKey(), ($kid ?? $this->kid), ($use ?? $this->use));
4040
}
4141

4242
}

0 commit comments

Comments
 (0)