67 lines
1.8 KiB
PHP
67 lines
1.8 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Objects\TwoFactor;
|
||
|
|
||
|
use Objects\ApiObject;
|
||
|
|
||
|
class PublicKey extends ApiObject {
|
||
|
|
||
|
use \Objects\TwoFactor\CBORDecoder;
|
||
|
|
||
|
private int $keyType;
|
||
|
private int $usedAlgorithm;
|
||
|
private int $curveType;
|
||
|
private string $xCoordinate;
|
||
|
private string $yCoordinate;
|
||
|
|
||
|
public function __construct(?string $cborData = null) {
|
||
|
if ($cborData) {
|
||
|
$data = $this->decode($cborData)->getNormalizedData();
|
||
|
$this->keyType = $data["1"];
|
||
|
$this->usedAlgorithm = $data["3"];
|
||
|
$this->curveType = $data["-1"];
|
||
|
$this->xCoordinate = $data["-2"];
|
||
|
$this->yCoordinate = $data["-3"];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static function fromJson($jsonData): PublicKey {
|
||
|
$publicKey = new PublicKey(null);
|
||
|
$publicKey->keyType = $jsonData["keyType"];
|
||
|
$publicKey->usedAlgorithm = $jsonData["usedAlgorithm"];
|
||
|
$publicKey->curveType = $jsonData["curveType"];
|
||
|
$publicKey->xCoordinate = base64_decode($jsonData["coordinates"]["x"]);
|
||
|
$publicKey->yCoordinate = base64_decode($jsonData["coordinates"]["y"]);
|
||
|
return $publicKey;
|
||
|
}
|
||
|
|
||
|
public function getUsedAlgorithm(): int {
|
||
|
return $this->usedAlgorithm;
|
||
|
}
|
||
|
|
||
|
public function jsonSerialize(): array {
|
||
|
return [
|
||
|
"keyType" => $this->keyType,
|
||
|
"usedAlgorithm" => $this->usedAlgorithm,
|
||
|
"curveType" => $this->curveType,
|
||
|
"coordinates" => [
|
||
|
"x" => base64_encode($this->xCoordinate),
|
||
|
"y" => base64_encode($this->yCoordinate)
|
||
|
],
|
||
|
];
|
||
|
}
|
||
|
|
||
|
public function getNormalizedData(): array {
|
||
|
return [
|
||
|
"1" => $this->keyType,
|
||
|
"3" => $this->usedAlgorithm,
|
||
|
"-1" => $this->curveType,
|
||
|
"-2" => $this->xCoordinate,
|
||
|
"-3" => $this->yCoordinate,
|
||
|
];
|
||
|
}
|
||
|
|
||
|
public function getU2F(): string {
|
||
|
return bin2hex("\x04" . $this->xCoordinate . $this->yCoordinate);
|
||
|
}
|
||
|
}
|