code: def add_recipient(self, key, header=None):
          
          if self.plaintext is None:
              raise ValueError('Missing plaintext')
          if not isinstance(self.plaintext, bytes):
              raise ValueError("Plaintext must be 'bytes'")
  
          if isinstance(header, dict):
              header = json_encode(header)
  
          jh = self._get_jose_header(header)
          alg, enc = self._get_alg_enc_from_headers(jh)
  
          rec = dict()
          if header:
              rec['header'] = header
  
          wrapped = alg.wrap(key, enc.wrap_key_size, self.cek, jh)
          self.cek = wrapped['cek']
  
          if 'ek' in wrapped:
              rec['encrypted_key'] = wrapped['ek']
  
          if 'header' in wrapped:
              h = json_decode(rec.get('header', '{}'))
              nh = self._merge_headers(h, wrapped['header'])
              rec['header'] = json_encode(nh)
  
          if 'ciphertext' not in self.objects:
              self._encrypt(alg, enc, jh)
  
          if 'recipients' in self.objects:
              self.objects['recipients'].append(rec)
          elif 'encrypted_key' in self.objects or 'header' in self.objects:
              self.objects['recipients'] = list()
              n = dict()
              if 'encrypted_key' in self.objects:
                  n['encrypted_key'] = self.objects.pop('encrypted_key')
              if 'header' in self.objects:
                  n['header'] = self.objects.pop('header')
              self.objects['recipients'].append(n)
              self.objects['recipients'].append(rec)
          else:
              self.objects.update(rec)
docs: Encrypt the plaintext with the given key.
  
          :param key: A JWK key or password of appropriate type for the 'alg'
           provided in the JOSE Headers.
          :param header: A JSON string representing the per-recipient header.
  
          :raises ValueError: if the plaintext is missing or not of type bytes.
          :raises ValueError: if the compression type is unknown.
          :raises InvalidJWAAlgorithm: if the 'alg' provided in the JOSE
           headers is missing or unknown, or otherwise not implemented.