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

package org.bouncycastle.pqc.crypto.hqc;

import org.bouncycastle.pqc.crypto.util.SecretWithEncapsulationImpl;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.crypto.SecretWithEncapsulation;
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import java.security.SecureRandom;
import org.bouncycastle.crypto.EncapsulatedSecretGenerator;

public class HQCKEMGenerator implements EncapsulatedSecretGenerator
{
    private final SecureRandom sr;
    
    public HQCKEMGenerator(final SecureRandom sr) {
        this.sr = sr;
    }
    
    @Override
    public SecretWithEncapsulation generateEncapsulated(final AsymmetricKeyParameter asymmetricKeyParameter) {
        final HQCPublicKeyParameters hqcPublicKeyParameters = (HQCPublicKeyParameters)asymmetricKeyParameter;
        final HQCEngine engine = hqcPublicKeyParameters.getParameters().getEngine();
        final byte[] array = new byte[hqcPublicKeyParameters.getParameters().getSHA512_BYTES()];
        final byte[] array2 = new byte[hqcPublicKeyParameters.getParameters().getN_BYTES()];
        final byte[] array3 = new byte[hqcPublicKeyParameters.getParameters().getN1N2_BYTES()];
        final byte[] array4 = new byte[hqcPublicKeyParameters.getParameters().getSALT_SIZE_BYTES()];
        engine.encaps(array2, array3, array, hqcPublicKeyParameters.getPublicKey(), array4, this.sr);
        return new SecretWithEncapsulationImpl(Arrays.copyOfRange(array, 0, 32), Arrays.concatenate(array2, array3, array4));
    }
}
