{"record":{"id":"622ddbafbedfefd3","repo":"apache/cassandra","slug":"unable-to-create-an-instance-of-crypto-provider-fo","errorCode":null,"errorMessage":"Unable to create an instance of crypto provider for %s","messagePattern":"Unable to create an instance of crypto provider for (.+?)","errorType":"exception","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/utils/FBUtilities.java","lineNumber":739,"sourceCode":"\n    public static AbstractCryptoProvider newCryptoProvider(String className, Map<String, String> parameters) throws ConfigurationException\n    {\n        try\n        {\n            if (!className.contains(\".\"))\n                className = \"org.apache.cassandra.security.\" + className;\n\n            Class<? extends AbstractCryptoProvider> cryptoProviderClass =\n                FBUtilities.classForNameWithoutInitialization(className, \"crypto provider class\", AbstractCryptoProvider.class);\n            return cryptoProviderClass.getConstructor(Map.class).newInstance(Collections.unmodifiableMap(parameters));\n        }\n        catch (Exception e)\n        {\n            // no need to wrap it in another ConfgurationException if FBUtilities.classForName might throw it\n            if (e instanceof ConfigurationException)\n                throw (ConfigurationException) e;\n            else\n                throw new ConfigurationException(String.format(\"Unable to create an instance of crypto provider for %s\", className), e);\n        }\n    }\n\n    public static AbstractCompressionProvider newCompressionProvider(String className) throws ConfigurationException\n    {\n        try\n        {\n            if (!className.contains(\".\"))\n                className = \"org.apache.cassandra.io.compress.\" + className;\n\n            Class<? extends AbstractCompressionProvider> compressionProviderClass =\n                FBUtilities.classForNameWithoutInitialization(className, \"compression service provider\", AbstractCompressionProvider.class);\n            return compressionProviderClass.getConstructor().newInstance();\n        }\n        catch (ConfigurationException e)\n        {\n            throw e;\n        }","sourceCodeStart":721,"sourceCodeEnd":757,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/utils/FBUtilities.java#L721-L757","documentation":"newCryptoProvider instantiates the configured AbstractCryptoProvider implementation for JCE provider setup. Failures to load or construct the class are wrapped in a ConfigurationException unless already one. This occurs at startup when crypto provider configuration (custom provider class) is present.","triggerScenarios":"crypto_provider configuration naming a class that is missing, not an AbstractCryptoProvider subclass, lacks the expected constructor, or whose constructor throws during initialization.","commonSituations":"Typo in provider class name; custom provider jar missing; provider constructor throws because keystore parameters are wrong; version drift changed the AbstractCryptoProvider contract.","solutions":["Fix the crypto provider class name in configuration","Ensure the provider implementation is on the classpath","Verify it extends AbstractCryptoProvider and has the required public constructor","Fix constructor-level issues reported in the chained cause (e.g. keystore path/password)"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"try { Class<?> c = Class.forName(className, false, getClass().getClassLoader());\n      if (!AbstractCryptoProvider.class.isAssignableFrom(c)) throw new IllegalArgumentException(\"not an AbstractCryptoProvider: \" + className); }\ncatch (ClassNotFoundException e) { throw new IllegalArgumentException(\"crypto provider class not found\", e); }","typeGuard":null,"tryCatchPattern":"try {\n    provider = FBUtilities.newCryptoProvider(className, params);\n} catch (ConfigurationException e) {\n    logger.error(\"crypto provider init failed for \" + className, e);\n    throw e;\n}","preventionTips":["Omit crypto_provider config to use the default provider","Validate keystore parameters the provider constructor consumes","Test provider upgrades against your Cassandra version","Keep provider jars in lib/ on all nodes"],"tags":["config","crypto","reflection"],"backgroundTag":"class-not-found","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}