code: 	public byte[] asPortableSerializedByteArray() throws EncryptionException {
          // Check if this CipherText object is "complete", i.e., all
          // mandatory has been collected.
  	    if ( ! collectedAll() ) {
  	        String msg = "Can't serialize this CipherText object yet as not " +
  	                     "all mandatory information has been collected";
  	        throw new EncryptionException("Can't serialize incomplete ciphertext info", msg);
  	    }
  	    
  	    // If we are supposed to be using a (separate) MAC, also make sure
  	    // that it has been computed/stored.
  	    boolean usesMAC = ESAPI.securityConfiguration().useMACforCipherText();
  	    if (  usesMAC && ! macComputed() ) {
  	        String msg = "Programming error: MAC is required for this cipher mode (" +
  	                     getCipherMode() + "), but MAC has not yet been " +
  	                     "computed and stored. Call the method " +
  	                     "computeAndStoreMAC(SecretKey) first before " +
  	                     "attempting serialization.";
  	        throw new EncryptionException("Can't serialize ciphertext info: Data integrity issue.",
  	                                      msg);
  	    }
  	    
  	    // OK, everything ready, so give it a shot.
  	    return new CipherTextSerializer(this).asSerializedByteArray();
  	}
  	
      ///// Setters /////
      /**
       * Set the raw ciphertext.
       * @param ciphertext    The raw ciphertext.
       * @throws EncryptionException  Thrown if the MAC has already been computed
       *              via {@link #computeAndStoreMAC(SecretKey)}.
       */
  