package org.bouncycastle.est.jcajce; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSocket; import org.bouncycastle.est.LimitedSource; import org.bouncycastle.est.Source; import org.bouncycastle.est.TLSUniqueProvider; class LimitedSSLSocketSource implements Source<SSLSession>, TLSUniqueProvider, LimitedSource { protected final SSLSocket socket; private final ChannelBindingProvider bindingProvider; private final Long absoluteReadLimit; public LimitedSSLSocketSource(SSLSocket sock, ChannelBindingProvider bindingProvider, Long absoluteReadLimit) { this.socket = sock; this.bindingProvider = bindingProvider; this.absoluteReadLimit = absoluteReadLimit; } public InputStream getInputStream() throws IOException { return socket.getInputStream(); } public OutputStream getOutputStream() throws IOException { return socket.getOutputStream(); } public SSLSession getSession() { return socket.getSession(); } public byte[] getTLSUnique() { if (isTLSUniqueAvailable()) { return bindingProvider.getChannelBinding(socket, "tls-unique"); } throw new IllegalStateException("No binding provider."); } public boolean isTLSUniqueAvailable() { return bindingProvider.canAccessChannelBinding(socket); } public void close() throws IOException { socket.close(); } public Long getAbsoluteReadLimit() { return absoluteReadLimit; } }