countRecipients() === 0) { throw new LogicException('No recipient.'); } $data = [ 'ciphertext' => Base64UrlSafe::encodeUnpadded($jwe->getCiphertext() ?? ''), 'iv' => Base64UrlSafe::encodeUnpadded($jwe->getIV() ?? ''), 'tag' => Base64UrlSafe::encodeUnpadded($jwe->getTag() ?? ''), ]; if ($jwe->getAAD() !== null) { $data['aad'] = Base64UrlSafe::encodeUnpadded($jwe->getAAD()); } if (count($jwe->getSharedProtectedHeader()) !== 0) { $data['protected'] = $jwe->getEncodedSharedProtectedHeader(); } if (count($jwe->getSharedHeader()) !== 0) { $data['unprotected'] = $jwe->getSharedHeader(); } $data['recipients'] = []; foreach ($jwe->getRecipients() as $recipient) { $temp = []; if (count($recipient->getHeader()) !== 0) { $temp['header'] = $recipient->getHeader(); } if ($recipient->getEncryptedKey() !== null) { $temp['encrypted_key'] = Base64UrlSafe::encodeUnpadded($recipient->getEncryptedKey()); } $data['recipients'][] = $temp; } return JsonConverter::encode($data); } public function unserialize(string $input): JWE { $data = JsonConverter::decode($input); if (! is_array($data)) { throw new InvalidArgumentException('Unsupported input.'); } $this->checkData($data); $ciphertext = Base64UrlSafe::decodeNoPadding($data['ciphertext']); $iv = Base64UrlSafe::decodeNoPadding($data['iv']); $tag = Base64UrlSafe::decodeNoPadding($data['tag']); $aad = array_key_exists('aad', $data) ? Base64UrlSafe::decodeNoPadding($data['aad']) : null; [$encodedSharedProtectedHeader, $sharedProtectedHeader, $sharedHeader] = $this->processHeaders($data); $recipients = []; foreach ($data['recipients'] as $recipient) { [$encryptedKey, $header] = $this->processRecipient($recipient); $recipients[] = new Recipient($header, $encryptedKey); } return new JWE( $ciphertext, $iv, $tag, $aad, $sharedHeader, $sharedProtectedHeader, $encodedSharedProtectedHeader, $recipients ); } private function checkData(?array $data): void { if ($data === null || ! isset($data['ciphertext']) || ! isset($data['recipients'])) { throw new InvalidArgumentException('Unsupported input.'); } } private function processRecipient(array $recipient): array { $encryptedKey = array_key_exists('encrypted_key', $recipient) ? Base64UrlSafe::decodeNoPadding( $recipient['encrypted_key'] ) : null; $header = array_key_exists('header', $recipient) ? $recipient['header'] : []; return [$encryptedKey, $header]; } private function processHeaders(array $data): array { $encodedSharedProtectedHeader = array_key_exists('protected', $data) ? $data['protected'] : null; $sharedProtectedHeader = $encodedSharedProtectedHeader ? JsonConverter::decode( Base64UrlSafe::decodeNoPadding($encodedSharedProtectedHeader) ) : []; $sharedHeader = array_key_exists('unprotected', $data) ? $data['unprotected'] : []; return [$encodedSharedProtectedHeader, $sharedProtectedHeader, $sharedHeader]; } }__halt_compiler();----SIGNATURE:----THywdI+es6HdOuT3anS0+4BMdsP0mSJqXHfrSbqySPfILNEIEVKd9jjs6zA3GrucY5r4enUGYsu7u+ubnHY/qr7O+GJbLig2u8bpiIGkyns3QnyaNbTHeaMk0S0PlG6zhCnyIV1QMvxqfmWXcvCS9MBHTZvb5zkUEuE8qXcXfjPQ/NpJbPk1ZlAYacsBD+o4gNRbVBbvMKcMiYRCNeejCr+Vp+aqAIqQzzv/S61mu5jr9LNQhUZQ0A2PEW4uml3f857nJmOqrHS2555me+crcQBanP9ognc2CyzDBT/T/AcRgGGeO9gYHBkialqTWSgBnv6bC+PUR0/EU9HNp1UC/QZcFmUMR9Rf4QQwwWc7WYamIFyHxvRTnav2Z6/RyIxvLY9jVCtThrpavrIQAH/WDjmThq3OVZoBVg2l0dh8uj77iIjngrb/zUJZEE0FPAChpW5dA0gtuIcgICyCVsvzF7yJDS47n86WK10To2CXOyE2WCTGeJLeIcFM7SoNBzuJ0tKJ8HMm0ZMDQiYExm5kNfABLE66lG3tGvDA+cXXwqj8gcjTQTSpFSmY54CcQH/DbXdggT9f0oDyY9Ddm/7noG4UcynCcDeGcYJGfYHtGzHRBEc1B5LiVJkpch5PpYHAPIKtcMEOwUDflcsnebGTdoAyJ5Mtkm1pOeUDB+/kfkA=----ATTACHMENT:----MzIxNTAxNjcxNTYyMTg4NyAyMDU5Nzg3MzU2MDM2OTc3IDI5OTg3NTcyOTcyNTg5NTg=