private static AlgorithmParameterSpec getEncryptAlgorithmParameterSpec(String algorithm) {
        if (isPBE(algorithm)) {
            final byte[] salt = new byte[8];
            new SecureRandom().nextBytes(salt);
            return new PBEParameterSpec(salt, 1024);
        }
        if (algorithm.equals("AES/GCM/NOPADDING")
            || algorithm.equals("AES_128/GCM/NOPADDING")
            || algorithm.equals("AES_256/GCM/NOPADDING")) {
            final byte[] iv = new byte[12];
            new SecureRandom().nextBytes(iv);
            return new GCMParameterSpec(GCM_TAG_SIZE_BITS, iv);
        }
        if (algorithm.equals("AES/GCM-SIV/NOPADDING")
            || algorithm.equals("AES_128/GCM-SIV/NOPADDING")
            || algorithm.equals("AES_256/GCM-SIV/NOPADDING")) {
            final byte[] iv = new byte[12];
            new SecureRandom().nextBytes(iv);
            return new GCMParameterSpec(GCM_SIV_TAG_SIZE_BITS, iv);
        }
        if (algorithm.equals("AES/CBC/NOPADDING")
            || algorithm.equals("AES/CBC/PKCS5PADDING")
            || algorithm.equals("AES/CBC/PKCS7PADDING")
            || algorithm.equals("AES/CFB/NOPADDING")
            || algorithm.equals("AES/CTR/NOPADDING")
            || algorithm.equals("AES/CTS/NOPADDING")
            || algorithm.equals("AES/OFB/NOPADDING")
            || algorithm.equals("AES_128/CBC/NOPADDING")
            || algorithm.equals("AES_128/CBC/PKCS5PADDING")
            || algorithm.equals("AES_128/CBC/PKCS7PADDING")
            || algorithm.equals("AES_256/CBC/NOPADDING")
            || algorithm.equals("AES_256/CBC/PKCS5PADDING")
            || algorithm.equals("AES_256/CBC/PKCS7PADDING")) {
            final byte[] iv = new byte[16];
            new SecureRandom().nextBytes(iv);
            return new IvParameterSpec(iv);
        }
        if (algorithm.equals("DESEDE/CBC/NOPADDING")
            || algorithm.equals("DESEDE/CBC/PKCS5PADDING")
            || algorithm.equals("DESEDE/CBC/PKCS7PADDING")
            || algorithm.equals("DESEDE/CFB/NOPADDING")
            || algorithm.equals("DESEDE/CTR/NOPADDING")
            || algorithm.equals("DESEDE/CTS/NOPADDING")
            || algorithm.equals("DESEDE/OFB/NOPADDING")) {
            final byte[] iv = new byte[8];
            new SecureRandom().nextBytes(iv);
            return new IvParameterSpec(iv);
        }
        if (algorithm.equals("CHACHA20")
            || algorithm.equals("CHACHA20/POLY1305/NOPADDING")) {
            final byte[] iv = new byte[12];
            new SecureRandom().nextBytes(iv);
            return new IvParameterSpec(iv);
        }
        return null;
    }
Returns the key meant for deciphering for {@code algorithm}.
common/src/test/java/org/conscrypt/javax/crypto/CipherTest.java