| 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; |
| } |
| } |