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

package org.bouncycastle.pqc.crypto.mlkem;

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

public class MLKEMGenerator implements EncapsulatedSecretGenerator
{
    private final SecureRandom sr;
    
    public MLKEMGenerator(final SecureRandom sr) {
        this.sr = sr;
    }
    
    @Override
    public SecretWithEncapsulation generateEncapsulated(final AsymmetricKeyParameter asymmetricKeyParameter) {
        final byte[] bytes = new byte[32];
        this.sr.nextBytes(bytes);
        return this.internalGenerateEncapsulated(asymmetricKeyParameter, bytes);
    }
    
    public SecretWithEncapsulation internalGenerateEncapsulated(final AsymmetricKeyParameter asymmetricKeyParameter, final byte[] array) {
        final MLKEMPublicKeyParameters mlkemPublicKeyParameters = (MLKEMPublicKeyParameters)asymmetricKeyParameter;
        final MLKEMEngine engine = mlkemPublicKeyParameters.getParameters().getEngine();
        engine.init(this.sr);
        final byte[][] kemEncrypt = engine.kemEncrypt(mlkemPublicKeyParameters, array);
        return new SecretWithEncapsulationImpl(kemEncrypt[0], kemEncrypt[1]);
    }
}
