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

package org.bouncycastle.pqc.crypto.xwing;

import org.bouncycastle.crypto.params.X25519PublicKeyParameters;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.pqc.crypto.mlkem.MLKEMExtractor;
import org.bouncycastle.crypto.EncapsulatedSecretExtractor;

public class XWingKEMExtractor implements EncapsulatedSecretExtractor
{
    private static final int MLKEM_CIPHERTEXT_SIZE = 1088;
    private final XWingPrivateKeyParameters key;
    private final MLKEMExtractor mlkemExtractor;
    
    public XWingKEMExtractor(final XWingPrivateKeyParameters key) {
        this.key = key;
        this.mlkemExtractor = new MLKEMExtractor(this.key.getKyberPrivateKey());
    }
    
    @Override
    public byte[] extractSecret(final byte[] array) {
        final byte[] copyOfRange = Arrays.copyOfRange(array, 0, 1088);
        final byte[] copyOfRange2 = Arrays.copyOfRange(array, 1088, array.length);
        final byte[] computeSSX = XWingKEMGenerator.computeSSX(new X25519PublicKeyParameters(copyOfRange2, 0), this.key.getXDHPrivateKey());
        final byte[] computeSharedSecret = XWingKEMGenerator.computeSharedSecret(this.key.getXDHPublicKey().getEncoded(), this.mlkemExtractor.extractSecret(copyOfRange), copyOfRange2, computeSSX);
        Arrays.clear(computeSSX);
        return computeSharedSecret;
    }
    
    @Override
    public int getEncapsulationLength() {
        return this.mlkemExtractor.getEncapsulationLength() + 32;
    }
}
