<?php

declare (strict_types=1);
/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2014-2021 Spomky-Labs
 *
 * This software may be modified and distributed under the terms
 * of the MIT license.  See the LICENSE file for details.
 */
namespace RSSProVendor\Webauthn\MetadataService;

use RSSProVendor\Assert\Assertion;
use RSSProVendor\Base64Url\Base64Url;
use JsonSerializable;
use function RSSProVendor\Safe\sprintf;
class EcdaaTrustAnchor implements JsonSerializable
{
    /**
     * @var string
     */
    private $X;
    /**
     * @var string
     */
    private $Y;
    /**
     * @var string
     */
    private $c;
    /**
     * @var string
     */
    private $sx;
    /**
     * @var string
     */
    private $sy;
    /**
     * @var string
     */
    private $G1Curve;
    public function __construct(string $X, string $Y, string $c, string $sx, string $sy, string $G1Curve)
    {
        $this->X = $X;
        $this->Y = $Y;
        $this->c = $c;
        $this->sx = $sx;
        $this->sy = $sy;
        $this->G1Curve = $G1Curve;
    }
    public function getX(): string
    {
        return $this->X;
    }
    public function getY(): string
    {
        return $this->Y;
    }
    public function getC(): string
    {
        return $this->c;
    }
    public function getSx(): string
    {
        return $this->sx;
    }
    public function getSy(): string
    {
        return $this->sy;
    }
    public function getG1Curve(): string
    {
        return $this->G1Curve;
    }
    public static function createFromArray(array $data): self
    {
        $data = Utils::filterNullValues($data);
        foreach (['X', 'Y', 'c', 'sx', 'sy', 'G1Curve'] as $key) {
            Assertion::keyExists($data, $key, sprintf('Invalid data. The key "%s" is missing', $key));
        }
        return new self(Base64Url::decode($data['X']), Base64Url::decode($data['Y']), Base64Url::decode($data['c']), Base64Url::decode($data['sx']), Base64Url::decode($data['sy']), $data['G1Curve']);
    }
    public function jsonSerialize(): array
    {
        $data = ['X' => Base64Url::encode($this->X), 'Y' => Base64Url::encode($this->Y), 'c' => Base64Url::encode($this->c), 'sx' => Base64Url::encode($this->sx), 'sy' => Base64Url::encode($this->sy), 'G1Curve' => $this->G1Curve];
        return Utils::filterNullValues($data);
    }
}
