Home / Class/ OpenSslKeyManagerFactorySpi Class — netty Architecture

OpenSslKeyManagerFactorySpi Class — netty Architecture

Architecture documentation for the OpenSslKeyManagerFactorySpi class in OpenSslX509KeyManagerFactory.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  6c352714_1eae_d4b9_4b45_6923c72330e3["OpenSslKeyManagerFactorySpi"]
  892beaa7_380c_8fb8_48c5_080b863277a3["OpenSslX509KeyManagerFactory.java"]
  6c352714_1eae_d4b9_4b45_6923c72330e3 -->|defined in| 892beaa7_380c_8fb8_48c5_080b863277a3
  25fb9915_8f47_340c_2a3a_d6e45a12b2f7["OpenSslKeyManagerFactorySpi()"]
  6c352714_1eae_d4b9_4b45_6923c72330e3 -->|method| 25fb9915_8f47_340c_2a3a_d6e45a12b2f7
  8e9b61e5_45fc_fc0b_4d4a_43bfd74e9a1d["engineInit()"]
  6c352714_1eae_d4b9_4b45_6923c72330e3 -->|method| 8e9b61e5_45fc_fc0b_4d4a_43bfd74e9a1d
  37d8414d_d07e_a01f_bbbb_573d573c6e69["String()"]
  6c352714_1eae_d4b9_4b45_6923c72330e3 -->|method| 37d8414d_d07e_a01f_bbbb_573d573c6e69
  bcbed51c_0c05_be23_a1b6_66872ac7a059["engineGetKeyManagers()"]
  6c352714_1eae_d4b9_4b45_6923c72330e3 -->|method| bcbed51c_0c05_be23_a1b6_66872ac7a059
  a4f377da_16ed_3954_609c_d4358b1fb3b9["OpenSslKeyMaterialProvider()"]
  6c352714_1eae_d4b9_4b45_6923c72330e3 -->|method| a4f377da_16ed_3954_609c_d4358b1fb3b9

Relationship Graph

Source Code

handler/src/main/java/io/netty/handler/ssl/OpenSslX509KeyManagerFactory.java lines 110–235

    private static final class OpenSslKeyManagerFactorySpi extends KeyManagerFactorySpi {
        final KeyManagerFactory kmf;
        private volatile ProviderFactory providerFactory;

        OpenSslKeyManagerFactorySpi(KeyManagerFactory kmf) {
            this.kmf = ObjectUtil.checkNotNull(kmf, "kmf");
        }

        @Override
        protected synchronized void engineInit(KeyStore keyStore, char[] chars)
                throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException {
            if (providerFactory != null) {
                throw new KeyStoreException("Already initialized");
            }
            if (!keyStore.aliases().hasMoreElements()) {
                throw new KeyStoreException("No aliases found");
            }

            kmf.init(keyStore, chars);
            providerFactory = new ProviderFactory(ReferenceCountedOpenSslContext.chooseX509KeyManager(
                    kmf.getKeyManagers()), password(chars), Collections.list(keyStore.aliases()));
        }

        private static String password(char[] password) {
            if (password == null || password.length == 0) {
                return null;
            }
            return new String(password);
        }

        @Override
        protected void engineInit(ManagerFactoryParameters managerFactoryParameters)
                throws InvalidAlgorithmParameterException {
            throw new InvalidAlgorithmParameterException("Not supported");
        }

        @Override
        protected KeyManager[] engineGetKeyManagers() {
            ProviderFactory providerFactory = this.providerFactory;
            if (providerFactory == null) {
                throw new IllegalStateException("engineInit(...) not called yet");
            }
            return new KeyManager[] { providerFactory.keyManager };
        }

        OpenSslKeyMaterialProvider newProvider() {
            ProviderFactory providerFactory = this.providerFactory;
            if (providerFactory == null) {
                throw new IllegalStateException("engineInit(...) not called yet");
            }
            return providerFactory.newProvider();
        }

        private static final class ProviderFactory {
            private final X509KeyManager keyManager;
            private final String password;
            private final Iterable<String> aliases;

            ProviderFactory(X509KeyManager keyManager, String password, Iterable<String> aliases) {
                this.keyManager = keyManager;
                this.password = password;
                this.aliases = aliases;
            }

            OpenSslKeyMaterialProvider newProvider() {
                return new OpenSslPopulatedKeyMaterialProvider(keyManager,
                        password, aliases);
            }

            /**
             * {@link OpenSslKeyMaterialProvider} implementation that pre-compute the {@link OpenSslKeyMaterial} for
             * all aliases.
             */
            private static final class OpenSslPopulatedKeyMaterialProvider extends OpenSslKeyMaterialProvider {
                private final Map<String, Object> materialMap;

                OpenSslPopulatedKeyMaterialProvider(
                        X509KeyManager keyManager, String password, Iterable<String> aliases) {
                    super(keyManager, password);
                    materialMap = new HashMap<String, Object>();
                    boolean initComplete = false;

Frequently Asked Questions

What is the OpenSslKeyManagerFactorySpi class?
OpenSslKeyManagerFactorySpi is a class in the netty codebase, defined in handler/src/main/java/io/netty/handler/ssl/OpenSslX509KeyManagerFactory.java.
Where is OpenSslKeyManagerFactorySpi defined?
OpenSslKeyManagerFactorySpi is defined in handler/src/main/java/io/netty/handler/ssl/OpenSslX509KeyManagerFactory.java at line 110.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free