public function toJSON()
{
Assertion::greaterThan($this->countSignatures(), 0, 'No signature.');
$data = [];
$this->checkPayloadEncoding();
if (false === $this->isPayloadDetached()) {
$data['payload'] = $this->getEncodedPayload($this->getSignature(0));
}
$data['signatures'] = [];
foreach ($this->getSignatures() as $signature) {
$tmp = ['signature' => Base64Url::encode($signature->getSignature())];
$values = ['protected' => $signature->getEncodedProtectedHeaders(), 'header' => $signature->getHeaders()];
foreach ($values as $key => $value) {
if (!empty($value)) {
$tmp[$key] = $value;
}
}
$data['signatures'][] = $tmp;
}
return json_encode($data);
}