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

package org.bouncycastle.pqc.crypto.picnic;

import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.Pack;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.pqc.crypto.MessageSigner;

public class PicnicSigner implements MessageSigner
{
    private PicnicPrivateKeyParameters privKey;
    private PicnicPublicKeyParameters pubKey;
    
    @Override
    public void init(final boolean b, final CipherParameters cipherParameters) {
        if (b) {
            this.privKey = (PicnicPrivateKeyParameters)cipherParameters;
        }
        else {
            this.pubKey = (PicnicPublicKeyParameters)cipherParameters;
        }
    }
    
    @Override
    public byte[] generateSignature(final byte[] array) {
        final PicnicEngine engine = this.privKey.getParameters().getEngine();
        final byte[] array2 = new byte[engine.getSignatureSize(array.length)];
        engine.crypto_sign(array2, array, this.privKey.getEncoded());
        final byte[] array3 = new byte[engine.getTrueSignatureSize()];
        System.arraycopy(array2, array.length + 4, array3, 0, engine.getTrueSignatureSize());
        return array3;
    }
    
    @Override
    public boolean verifySignature(final byte[] array, final byte[] array2) {
        final PicnicEngine engine = this.pubKey.getParameters().getEngine();
        final byte[] array3 = new byte[array.length];
        final boolean crypto_sign_open = engine.crypto_sign_open(array3, Arrays.concatenate(Pack.intToLittleEndian(array2.length), array, array2), this.pubKey.getEncoded());
        return Arrays.areEqual(array, array3) && crypto_sign_open;
    }
}
