// 
// Decompiled by Procyon v0.6.0
// 

package org.bouncycastle.crypto.digests;

import org.bouncycastle.util.io.LimitedBuffer;
import org.bouncycastle.crypto.Digest;

public class Prehash implements Digest
{
    private final String algorithmName;
    private final LimitedBuffer buf;
    
    public static Prehash forDigest(final Digest digest) {
        return new Prehash(digest);
    }
    
    private Prehash(final Digest digest) {
        this.algorithmName = digest.getAlgorithmName();
        this.buf = new LimitedBuffer(digest.getDigestSize());
    }
    
    @Override
    public String getAlgorithmName() {
        return this.algorithmName;
    }
    
    @Override
    public int getDigestSize() {
        return this.buf.limit();
    }
    
    @Override
    public void update(final byte b) {
        this.buf.write(b);
    }
    
    @Override
    public void update(final byte[] array, final int n, final int n2) {
        this.buf.write(array, n, n2);
    }
    
    @Override
    public int doFinal(final byte[] array, final int n) {
        try {
            if (this.getDigestSize() != this.buf.size()) {
                throw new IllegalStateException("Incorrect prehash size");
            }
            return this.buf.copyTo(array, n);
        }
        finally {
            this.reset();
        }
    }
    
    @Override
    public void reset() {
        this.buf.reset();
    }
}
