code: byte[] getRawData() {
  
      // Header: [Version | Options]
      byte[] header = new byte[] { (byte) getVersionNumber(), 0 };
  
      if (isPasswordBased) {
        header[1] |= FLAG_PASSWORD;
      }
  
      // Pack result
      final int dataSize;
  
      if (isPasswordBased) {
        dataSize = header.length + encryptionSalt.length + hmacSalt.length
            + iv.length + ciphertext.length + hmac.length;
      } else {
        dataSize = header.length + iv.length + ciphertext.length + hmac.length;
      }
  
      byte[] result = new byte[dataSize];
  
      System.arraycopy(header, 0, result, 0, header.length);
  
      if (isPasswordBased) {
        System.arraycopy(encryptionSalt, 0, result, header.length,
            encryptionSalt.length);
        System.arraycopy(hmacSalt, 0, result, header.length
            + encryptionSalt.length, hmacSalt.length);
        System.arraycopy(iv, 0, result, header.length + encryptionSalt.length
            + hmacSalt.length, iv.length);
        System.arraycopy(ciphertext, 0, result, header.length
            + encryptionSalt.length + hmacSalt.length + iv.length,
            ciphertext.length);
        System.arraycopy(hmac, 0, result, header.length + encryptionSalt.length
            + hmacSalt.length + iv.length + ciphertext.length, hmac.length);
      } else {
        System.arraycopy(iv, 0, result, header.length, iv.length);
        System.arraycopy(ciphertext, 0, result, header.length + iv.length,
            ciphertext.length);
        System.arraycopy(hmac, 0, result, header.length + iv.length
            + ciphertext.length, hmac.length);
      }
  
      return result;
    }
docs: Returns the ciphertext, packaged as a byte array.
  
  @return the byte array