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

package org.bouncycastle.pqc.crypto.lms;

import java.io.IOException;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.pqc.crypto.MessageSigner;

public class LMSSigner implements MessageSigner
{
    private LMSPrivateKeyParameters privKey;
    private LMSPublicKeyParameters pubKey;
    
    @Override
    public void init(final boolean b, final CipherParameters cipherParameters) {
        if (b) {
            if (cipherParameters instanceof HSSPrivateKeyParameters) {
                final HSSPrivateKeyParameters hssPrivateKeyParameters = (HSSPrivateKeyParameters)cipherParameters;
                if (hssPrivateKeyParameters.getL() != 1) {
                    throw new IllegalArgumentException("only a single level HSS key can be used with LMS");
                }
                this.privKey = hssPrivateKeyParameters.getRootKey();
            }
            else {
                this.privKey = (LMSPrivateKeyParameters)cipherParameters;
            }
        }
        else if (cipherParameters instanceof HSSPublicKeyParameters) {
            final HSSPublicKeyParameters hssPublicKeyParameters = (HSSPublicKeyParameters)cipherParameters;
            if (hssPublicKeyParameters.getL() != 1) {
                throw new IllegalArgumentException("only a single level HSS key can be used with LMS");
            }
            this.pubKey = hssPublicKeyParameters.getLMSPublicKey();
        }
        else {
            this.pubKey = (LMSPublicKeyParameters)cipherParameters;
        }
    }
    
    @Override
    public byte[] generateSignature(final byte[] array) {
        try {
            return LMS.generateSign(this.privKey, array).getEncoded();
        }
        catch (final IOException ex) {
            throw new IllegalStateException("unable to encode signature: " + ex.getMessage());
        }
    }
    
    @Override
    public boolean verifySignature(final byte[] array, final byte[] array2) {
        try {
            return LMS.verifySignature(this.pubKey, LMSSignature.getInstance(array2), array);
        }
        catch (final IOException ex) {
            throw new IllegalStateException("unable to decode signature: " + ex.getMessage());
        }
    }
}
