package org.bouncycastle.cert.dane; import java.io.OutputStream; import org.bouncycastle.asn1.x509.AlgorithmIdentifier; import org.bouncycastle.operator.DigestCalculator; /** * A calculator which produces a truncated digest from a regular one, with the truncation * achieved by dropping off the right most octets. */ public class TruncatingDigestCalculator implements DigestCalculator { private final DigestCalculator baseCalculator; private final int length; /** * Default constructor - truncate to 28. * * @param baseCalculator actual calculator for working out the digest. */ public TruncatingDigestCalculator(DigestCalculator baseCalculator) { this(baseCalculator, 28); } /** * Constructor specifying a length. * * @param baseCalculator actual calculator for working out the digest. * @param length length in bytes of the final result. */ public TruncatingDigestCalculator(DigestCalculator baseCalculator, int length) { this.baseCalculator = baseCalculator; this.length = length; } public AlgorithmIdentifier getAlgorithmIdentifier() { return baseCalculator.getAlgorithmIdentifier(); } public OutputStream getOutputStream() { return baseCalculator.getOutputStream(); } public byte[] getDigest() { byte[] rv = new byte[length]; byte[] dig = baseCalculator.getDigest(); System.arraycopy(dig, 0, rv, 0, rv.length); return rv; } }