On Sun, 15 Dec 2024 07:18:02 GMT, Xue-Lei Andrew Fan <xue...@openjdk.org> wrote:

> > It's only the combination of a Provider that overrides 
> > getService/getServices + does not call putService/put + overrides 
> > newInstance without calling its parent + uses a non-Java SE service type 
> > that would be unfiltered.
> 
> FYI. I found [a 
> case](https://www.bouncycastle.org/download/bouncy-castle-java-fips/) that:
> 
> 1. Override getService/getServices, has its own logic to use put properties.
> 2. Use extended Provider.Service, but not Provider.Service directly.
> 3. call put() and get() internally. But because of  `#1` and `#2`, the 
> provider filter theory may not work, please verify.
> 4. overrides newInstance without calling its parent.
> 5. uses non-Java SE service types
> 
> This is a popular provider (IIRC 17% marketing share per a report). I think 
> you might have evaluated it and confirmed that the theory works. Otherwise, 
> please make sure the compatibility issues is limited and the theory works for 
> it. Thank you!

BC has some sort of cache in `BouncyCastleProvider::serviceMap` but calls 
`putService` (`BouncyCastleProvider.super.putService(service)`) anyways.


    public static void main(String[] args) throws Throwable {
        System.setProperty("jdk.security.providers.filter",
                "!BC.Cipher.AES/CBC/PKCS5Padding; *");
        Provider bc = new BouncyCastleProvider();
        System.out.println("Name BC: " + bc);
        Cipher c1 = null;
        Cipher c2 = null;
        try {
            c1 = Cipher.getInstance("AES/CBC/PKCS5Padding", bc);
        } catch (NoSuchAlgorithmException e) {}
        try {
            c2 = Cipher.getInstance("AES/GCM/NoPadding", bc);
        } catch (NoSuchAlgorithmException e) {}
        System.out.println("Cipher AES/CBC/PKCS5Padding (BC): " + c1);
        System.out.println("Cipher AES/GCM/NoPadding (BC): " + c2);
    }



Name BC: BC version 1.79
Cipher AES/CBC/PKCS5Padding (BC): null
Cipher AES/GCM/NoPadding (BC): Cipher.AES/GCM/NoPadding, mode: not initialized, 
algorithm from: BC

-------------

PR Comment: https://git.openjdk.org/jdk/pull/15539#issuecomment-2548981071

Reply via email to