<?php
 declare(strict_types=1); namespace Jose\Component\Signature; use InvalidArgumentException; use Jose\Component\Core\JWT; use Override; use function count; class JWS implements JWT { private array $signatures = []; public function __construct( private readonly ?string $payload, private readonly ?string $encodedPayload = null, private readonly bool $isPayloadDetached = false ) { } #[Override] public function getPayload(): ?string { return $this->payload; } public function isPayloadDetached(): bool { return $this->isPayloadDetached; } public function getEncodedPayload(): ?string { if ($this->isPayloadDetached() === true) { return null; } return $this->encodedPayload; } public function getSignatures(): array { return $this->signatures; } public function getSignature(int $id): Signature { if (isset($this->signatures[$id])) { return $this->signatures[$id]; } throw new InvalidArgumentException('The signature does not exist.'); } public function addSignature( string $signature, array $protectedHeader, ?string $encodedProtectedHeader, array $header = [] ): self { $jws = clone $this; $jws->signatures[] = new Signature($signature, $protectedHeader, $encodedProtectedHeader, $header); return $jws; } public function countSignatures(): int { return count($this->signatures); } public function split(): array { $result = []; foreach ($this->signatures as $signature) { $jws = new self($this->payload, $this->encodedPayload, $this->isPayloadDetached); $jws = $jws->addSignature( $signature->getSignature(), $signature->getProtectedHeader(), $signature->getEncodedProtectedHeader(), $signature->getHeader() ); $result[] = $jws; } return $result; } } 