package org.bouncycastle.cms; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.bouncycastle.util.io.Streams; class CMSProcessableInputStream implements CMSProcessable, CMSReadable { private InputStream input; private boolean used = false; public CMSProcessableInputStream( InputStream input) { this.input = input; } public InputStream getInputStream() { checkSingleUsage(); return input; } public void write(OutputStream zOut) throws IOException, CMSException { checkSingleUsage(); Streams.pipeAll(input, zOut); input.close(); } public Object getContent() { return getInputStream(); } private synchronized void checkSingleUsage() { if (used) { throw new IllegalStateException("CMSProcessableInputStream can only be used once"); } used = true; } }