org.bouncycastle.operator.BufferingContentSigner Maven / Gradle / Ivy
package org.bouncycastle.operator;
import java.io.OutputStream;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.util.io.BufferingOutputStream;
/**
* A class that explicitly buffers the data to be signed, sending it in one
* block when ready for signing.
*/
public class BufferingContentSigner
implements ContentSigner
{
private final ContentSigner contentSigner;
private final OutputStream output;
/**
* Base constructor.
*
* @param contentSigner the content signer to be wrapped.
*/
public BufferingContentSigner(ContentSigner contentSigner)
{
this.contentSigner = contentSigner;
this.output = new BufferingOutputStream(contentSigner.getOutputStream());
}
/**
* Base constructor.
*
* @param contentSigner the content signer to be wrapped.
* @param bufferSize the size of the internal buffer to use.
*/
public BufferingContentSigner(ContentSigner contentSigner, int bufferSize)
{
this.contentSigner = contentSigner;
this.output = new BufferingOutputStream(contentSigner.getOutputStream(), bufferSize);
}
/**
* Return the algorithm identifier supported by this signer.
*
* @return algorithm identifier for the signature generated.
*/
public AlgorithmIdentifier getAlgorithmIdentifier()
{
return contentSigner.getAlgorithmIdentifier();
}
/**
* Return the buffering stream.
*
* @return the output stream used to accumulate the data.
*/
public OutputStream getOutputStream()
{
return output;
}
/**
* Generate signature from internally buffered data.
*
* @return the signature calculated from the bytes written to the buffering stream.
*/
public byte[] getSignature()
{
return contentSigner.getSignature();
}
}