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