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

package org.bouncycastle.pqc.jcajce.provider.util;

import org.bouncycastle.crypto.engines.RFC5649WrapEngine;
import org.bouncycastle.crypto.engines.SEEDEngine;
import org.bouncycastle.crypto.engines.CamelliaEngine;
import org.bouncycastle.crypto.engines.ARIAEngine;
import org.bouncycastle.crypto.BlockCipher;
import org.bouncycastle.crypto.engines.RFC3394WrapEngine;
import org.bouncycastle.crypto.engines.AESEngine;
import java.security.InvalidKeyException;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.crypto.Wrapper;
import org.bouncycastle.jcajce.spec.KTSParameterSpec;

public class WrapUtil
{
    public static Wrapper getKeyWrapper(final KTSParameterSpec ktsParameterSpec, final byte[] array) throws InvalidKeyException {
        final Wrapper wrapper = getWrapper(ktsParameterSpec.getKeyAlgorithmName());
        if (ktsParameterSpec.getKdfAlgorithm() == null) {
            wrapper.init(true, new KeyParameter(Arrays.copyOfRange(array, 0, (ktsParameterSpec.getKeySize() + 7) / 8)));
        }
        else {
            wrapper.init(true, new KeyParameter(makeKeyBytes(ktsParameterSpec, array)));
        }
        return wrapper;
    }
    
    public static Wrapper getKeyUnwrapper(final KTSParameterSpec ktsParameterSpec, final byte[] array) throws InvalidKeyException {
        final Wrapper wrapper = getWrapper(ktsParameterSpec.getKeyAlgorithmName());
        if (ktsParameterSpec.getKdfAlgorithm() == null) {
            wrapper.init(false, new KeyParameter(array, 0, (ktsParameterSpec.getKeySize() + 7) / 8));
        }
        else {
            wrapper.init(false, new KeyParameter(makeKeyBytes(ktsParameterSpec, array)));
        }
        return wrapper;
    }
    
    public static Wrapper getWrapper(final String str) {
        Wrapper wrapper;
        if (str.equalsIgnoreCase("AESWRAP") || str.equalsIgnoreCase("AES")) {
            wrapper = new RFC3394WrapEngine(AESEngine.newInstance());
        }
        else if (str.equalsIgnoreCase("ARIA")) {
            wrapper = new RFC3394WrapEngine(new ARIAEngine());
        }
        else if (str.equalsIgnoreCase("Camellia")) {
            wrapper = new RFC3394WrapEngine(new CamelliaEngine());
        }
        else if (str.equalsIgnoreCase("SEED")) {
            wrapper = new RFC3394WrapEngine(new SEEDEngine());
        }
        else if (str.equalsIgnoreCase("AES-KWP")) {
            wrapper = new RFC5649WrapEngine(new AESEngine());
        }
        else if (str.equalsIgnoreCase("Camellia-KWP")) {
            wrapper = new RFC5649WrapEngine(new CamelliaEngine());
        }
        else {
            if (!str.equalsIgnoreCase("ARIA-KWP")) {
                throw new UnsupportedOperationException("unknown key algorithm: " + str);
            }
            wrapper = new RFC5649WrapEngine(new ARIAEngine());
        }
        return wrapper;
    }
    
    public static byte[] trimSecret(final String s, final byte[] array) {
        if (s.equals("SEED")) {
            return Arrays.copyOfRange(array, 0, 16);
        }
        return array;
    }
    
    private static byte[] makeKeyBytes(final KTSParameterSpec ktsParameterSpec, final byte[] array) throws InvalidKeyException {
        try {
            return KdfUtil.makeKeyBytes(ktsParameterSpec.getKdfAlgorithm(), array, ktsParameterSpec.getOtherInfo(), ktsParameterSpec.getKeySize());
        }
        catch (final IllegalArgumentException ex) {
            throw new InvalidKeyException(ex.getMessage());
        }
    }
}
