public function addRecipient(JWK $recipientKey, array $recipientHeader = []): self
    {
        $this->checkDuplicatedHeaderParameters($this->sharedProtectedHeader, $recipientHeader);
        $this->checkDuplicatedHeaderParameters($this->sharedHeader, $recipientHeader);
        $clone = clone $this;
        $completeHeader = \array_merge($clone->sharedHeader, $recipientHeader, $clone->sharedProtectedHeader);
        $clone->checkAndSetContentEncryptionAlgorithm($completeHeader);
        $keyEncryptionAlgorithm = $clone->getKeyEncryptionAlgorithm($completeHeader);
        if (null === $clone->keyManagementMode) {
            $clone->keyManagementMode = $keyEncryptionAlgorithm->getKeyManagementMode();
        } else {
            if (!$clone->areKeyManagementModesCompatible($clone->keyManagementMode, $keyEncryptionAlgorithm->getKeyManagementMode())) {
                throw new \InvalidArgumentException('Foreign key management mode forbidden.');
            }
        }

        $compressionMethod = $clone->getCompressionMethod($completeHeader);
        if (null !== $compressionMethod) {
            if (null === $clone->compressionMethod) {
                $clone->compressionMethod = $compressionMethod;
            } elseif ($clone->compressionMethod->name() !== $compressionMethod->name()) {
                throw new \InvalidArgumentException('Incompatible compression method.');
            }
        }
        if (null === $compressionMethod && null !== $clone->compressionMethod) {
            throw new \InvalidArgumentException('Inconsistent compression method.');
        }
        $clone->checkKey($keyEncryptionAlgorithm, $recipientKey);
        $clone->recipients[] = [
            'key' => $recipientKey,
            'header' => $recipientHeader,
            'key_encryption_algorithm' => $keyEncryptionAlgorithm,
        ];

        return $clone;
    }
public function addRecipient(JWK $recipientKey, array $recipientHeader = []): self
    {
        $this->checkDuplicatedHeaderParameters($this->sharedProtectedHeader, $recipientHeader);
        $this->checkDuplicatedHeaderParameters($this->sharedHeader, $recipientHeader);
        $clone = clone $this;
        $completeHeader = \array_merge($clone->sharedHeader, $recipientHeader, $clone->sharedProtectedHeader);
        $clone->checkAndSetContentEncryptionAlgorithm($completeHeader);
        $keyEncryptionAlgorithm = $clone->getKeyEncryptionAlgorithm($completeHeader);
        if (null === $clone->keyManagementMode) {
            $clone->keyManagementMode = $keyEncryptionAlgorithm->getKeyManagementMode();
        } else {
            if (!$clone->areKeyManagementModesCompatible($clone->keyManagementMode, $keyEncryptionAlgorithm->getKeyManagementMode())) {
                throw new \InvalidArgumentException('Foreign key management mode forbidden.');
            }
        }

        $compressionMethod = $clone->getCompressionMethod($completeHeader);
        if (null !== $compressionMethod) {
            if (null === $clone->compressionMethod) {
                $clone->compressionMethod = $compressionMethod;
            } elseif ($clone->compressionMethod->name() !== $compressionMethod->name()) {
                throw new \InvalidArgumentException('Incompatible compression method.');
            }
        }
        if (null === $compressionMethod && null !== $clone->compressionMethod) {
            throw new \InvalidArgumentException('Inconsistent compression method.');
        }
        $clone->checkKey($keyEncryptionAlgorithm, $recipientKey);
        $clone->recipients[] = [
            'key' => $recipientKey,
            'header' => $recipientHeader,
            'key_encryption_algorithm' => $keyEncryptionAlgorithm,
        ];

        return $clone;
    }
public function addRecipient ( JWK $ recipientKey , array $ recipientHeader = [ ] ) : self { $ this -> checkDuplicatedHeaderParameters ( $ this -> sharedProtectedHeader , $ recipientHeader ) ; $ this -> checkDuplicatedHeaderParameters ( $ this -> sharedHeader , $ recipientHeader ) ; $ clone = clone $ this ; $ completeHeader = \ array_merge ( $ clone -> sharedHeader , $ recipientHeader , $ clone -> sharedProtectedHeader ) ; $ clone -> checkAndSetContentEncryptionAlgorithm ( $ completeHeader ) ; $ keyEncryptionAlgorithm = $ clone -> getKeyEncryptionAlgorithm ( $ completeHeader ) ; if ( null === $ clone -> keyManagementMode ) { $ clone -> keyManagementMode = $ keyEncryptionAlgorithm -> getKeyManagementMode ( ) ; } else { if ( ! $ clone -> areKeyManagementModesCompatible ( $ clone -> keyManagementMode , $ keyEncryptionAlgorithm -> getKeyManagementMode ( ) ) ) { throw new \ InvalidArgumentException ( 'Foreign key management mode forbidden.' ) ; } } $ compressionMethod = $ clone -> getCompressionMethod ( $ completeHeader ) ; if ( null !== $ compressionMethod ) { if ( null === $ clone -> compressionMethod ) { $ clone -> compressionMethod = $ compressionMethod ; } elseif ( $ clone -> compressionMethod -> name ( ) !== $ compressionMethod -> name ( ) ) { throw new \ InvalidArgumentException ( 'Incompatible compression method.' ) ; } } if ( null === $ compressionMethod && null !== $ clone -> compressionMethod ) { throw new \ InvalidArgumentException ( 'Inconsistent compression method.' ) ; } $ clone -> checkKey ( $ keyEncryptionAlgorithm , $ recipientKey ) ; $ clone -> recipients [ ] = [ 'key' => $ recipientKey , 'header' => $ recipientHeader , 'key_encryption_algorithm' => $ keyEncryptionAlgorithm , ] ; return $ clone ; }
Adds a recipient to the JWE to build.

@return JWEBuilder
Adds a recipient to the JWE to build .