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

package org.bouncycastle.pqc.crypto.crystals.dilithium;

import org.bouncycastle.crypto.params.ParametersWithRandom;
import org.bouncycastle.crypto.CipherParameters;
import java.security.SecureRandom;
import org.bouncycastle.pqc.crypto.MessageSigner;

public class DilithiumSigner implements MessageSigner
{
    private DilithiumPrivateKeyParameters privKey;
    private DilithiumPublicKeyParameters pubKey;
    private SecureRandom random;
    
    @Override
    public void init(final boolean b, final CipherParameters cipherParameters) {
        if (b) {
            if (cipherParameters instanceof ParametersWithRandom) {
                this.privKey = (DilithiumPrivateKeyParameters)((ParametersWithRandom)cipherParameters).getParameters();
                this.random = ((ParametersWithRandom)cipherParameters).getRandom();
            }
            else {
                this.privKey = (DilithiumPrivateKeyParameters)cipherParameters;
                this.random = null;
            }
        }
        else {
            this.pubKey = (DilithiumPublicKeyParameters)cipherParameters;
        }
    }
    
    @Override
    public byte[] generateSignature(final byte[] array) {
        return this.privKey.getParameters().getEngine(this.random).sign(array, array.length, this.privKey.rho, this.privKey.k, this.privKey.tr, this.privKey.t0, this.privKey.s1, this.privKey.s2);
    }
    
    public byte[] internalGenerateSignature(final byte[] array, final byte[] array2) {
        return this.privKey.getParameters().getEngine(this.random).signSignatureInternal(array, array.length, this.privKey.rho, this.privKey.k, this.privKey.tr, this.privKey.t0, this.privKey.s1, this.privKey.s2, array2);
    }
    
    @Override
    public boolean verifySignature(final byte[] array, final byte[] array2) {
        return this.pubKey.getParameters().getEngine(this.random).signOpen(array, array2, array2.length, this.pubKey.rho, this.pubKey.t1);
    }
}
