package trust.nccgroup.decoderimproved.modifiers.decoders; import trust.nccgroup.decoderimproved.modifiers.ByteModifier; import trust.nccgroup.decoderimproved.Logger; import trust.nccgroup.decoderimproved.ModificationException; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.GZIPInputStream; /** * Created by j on 12/7/16. */ public class GZIPDecoder implements ByteModifier { @Override public String getModifierName() { return "GZIP"; } // GZIP Encode the bytes @Override public byte[] modifyBytes(byte[] input) throws ModificationException { try { ByteArrayInputStream bais = new ByteArrayInputStream(input); GZIPInputStream gzis = new GZIPInputStream(bais); byte[] buffer = new byte[input.length * 2]; int bytesRead; ByteArrayOutputStream output = new ByteArrayOutputStream(); while ((bytesRead = gzis.read(buffer)) != -1) { output.write(buffer, 0, bytesRead); } return output.toByteArray(); } catch (IOException e) { Logger.printErrorFromException(e); throw new ModificationException("Invalid GZIP Input"); } } }