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

package org.bouncycastle.pqc.crypto;

import org.bouncycastle.util.Arrays;
import java.io.ByteArrayOutputStream;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.Signer;

public final class MessageSignerAdapter implements Signer
{
    private final Buffer buffer;
    private final MessageSigner messageSigner;
    
    public MessageSignerAdapter(final MessageSigner messageSigner) {
        this.buffer = new Buffer();
        if (messageSigner == null) {
            throw new NullPointerException("'messageSigner' cannot be null");
        }
        this.messageSigner = messageSigner;
    }
    
    @Override
    public void init(final boolean b, final CipherParameters cipherParameters) {
        this.messageSigner.init(b, cipherParameters);
    }
    
    @Override
    public void update(final byte b) {
        this.buffer.write(b);
    }
    
    @Override
    public void update(final byte[] b, final int off, final int len) {
        this.buffer.write(b, off, len);
    }
    
    @Override
    public byte[] generateSignature() {
        return this.messageSigner.generateSignature(this.getMessage());
    }
    
    @Override
    public boolean verifySignature(final byte[] array) {
        return this.messageSigner.verifySignature(this.getMessage(), array);
    }
    
    @Override
    public void reset() {
        this.buffer.reset();
    }
    
    private byte[] getMessage() {
        try {
            return this.buffer.toByteArray();
        }
        finally {
            this.reset();
        }
    }
    
    private static final class Buffer extends ByteArrayOutputStream
    {
        @Override
        public synchronized void reset() {
            Arrays.fill(this.buf, 0, this.count, (byte)0);
            this.count = 0;
        }
    }
}
