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

package org.bouncycastle.pqc.crypto.bike;

import org.bouncycastle.util.Arrays;
import org.bouncycastle.crypto.EncapsulatedSecretExtractor;

public class BIKEKEMExtractor implements EncapsulatedSecretExtractor
{
    private BIKEEngine engine;
    private BIKEKeyParameters key;
    
    public BIKEKEMExtractor(final BIKEPrivateKeyParameters key) {
        this.key = key;
        this.initCipher(this.key.getParameters());
    }
    
    private void initCipher(final BIKEParameters bikeParameters) {
        this.engine = bikeParameters.getEngine();
    }
    
    @Override
    public byte[] extractSecret(final byte[] array) {
        final byte[] array2 = new byte[this.engine.getSessionKeySize()];
        final BIKEPrivateKeyParameters bikePrivateKeyParameters = (BIKEPrivateKeyParameters)this.key;
        this.engine.decaps(array2, bikePrivateKeyParameters.getH0(), bikePrivateKeyParameters.getH1(), bikePrivateKeyParameters.getSigma(), Arrays.copyOfRange(array, 0, bikePrivateKeyParameters.getParameters().getRByte()), Arrays.copyOfRange(array, bikePrivateKeyParameters.getParameters().getRByte(), array.length));
        return Arrays.copyOfRange(array2, 0, this.key.getParameters().getSessionKeySize() / 8);
    }
    
    @Override
    public int getEncapsulationLength() {
        return this.key.getParameters().getRByte() + this.key.getParameters().getLByte();
    }
}
