package org.bouncycastle.jcajce.io;

import java.io.IOException;
import java.io.OutputStream;

import javax.crypto.Mac;

An output stream which calculates a MAC based on the data that is written to it.
/** * An output stream which calculates a MAC based on the data that is written to it. */
public final class MacOutputStream extends OutputStream { private Mac mac;
Base constructor - specify the MAC algorithm to use.
Params:
  • mac – the MAC implementation to use as the basis of the stream.
/** * Base constructor - specify the MAC algorithm to use. * * @param mac the MAC implementation to use as the basis of the stream. */
public MacOutputStream( Mac mac) { this.mac = mac; }
Write a single byte to the stream.
Params:
  • b – the byte value to write.
Throws:
/** * Write a single byte to the stream. * * @param b the byte value to write. * @throws IOException in case of failure. */
public void write(int b) throws IOException { mac.update((byte)b); }
Write a block of data of length len starting at offset off in the byte array bytes to the stream.
Params:
  • bytes – byte array holding the data.
  • off – offset into bytes that the data starts at.
  • len – the length of the data block to write.
Throws:
/** * Write a block of data of length len starting at offset off in the byte array bytes to * the stream. * * @param bytes byte array holding the data. * @param off offset into bytes that the data starts at. * @param len the length of the data block to write. * @throws IOException in case of failure. */
public void write( byte[] bytes, int off, int len) throws IOException { mac.update(bytes, off, len); }
Execute doFinal() and return the calculated MAC.
Returns:the MAC calculated from the output written to the stream.
/** * Execute doFinal() and return the calculated MAC. * * @return the MAC calculated from the output written to the stream. */
public byte[] getMac() { return mac.doFinal(); } }