]
Jan Kalina moved JBEAP-14589 to WFLY-10223:
-------------------------------------------
Project: WildFly (was: JBoss Enterprise Application Platform)
Key: WFLY-10223 (was: JBEAP-14589)
Workflow: GIT Pull Request workflow (was: CDW with loose statuses v1)
Component/s: Security
(was: Security)
Affects Version/s: 12.0.0.Final
(was: 7.1.0.DR12)
Elytron discovery of providers from BC module does not work without
class-names
-------------------------------------------------------------------------------
Key: WFLY-10223
URL:
https://issues.jboss.org/browse/WFLY-10223
Project: WildFly
Issue Type: Bug
Components: Security
Affects Versions: 12.0.0.Final
Reporter: Jan Kalina
Assignee: Jan Kalina
Labels: fips, provider, ssl
If I register provider loader to load providers from org.bouncycastle module, no provider
is loaded.
{code}
[standalone@localhost:9990 /]
/subsystem=elytron/provider-loader=bc:add(module=org.bouncycastle)
{"outcome" => "success"}
[standalone@localhost:9990 /]
/subsystem=elytron/provider-loader=bc:read-attribute(name=loaded-providers)
{
"outcome" => "success",
"result" => undefined
}
{code}
But if I specify {{class-names}} attribute, provider is loaded as expected.
{code}
[standalone@localhost:9990 /]
/subsystem=elytron/provider-loader=bc2:add(class-names=[org.bouncycastle.jce.provider.BouncyCastleProvider],
module=org.bouncycastle)
{"outcome" => "success"}
[standalone@localhost:9990 /]
/subsystem=elytron/provider-loader=bc2:read-attribute(name=loaded-providers)
{
"outcome" => "success",
"result" => [{
"name" => "BC",
"info" => "BouncyCastle Security Provider v1.56",
"version" => 1.56,
"services" => [
{
"type" => "MessageDigest",
"algorithm" => "GOST3411",
"class-name" =>
"org.bouncycastle.jcajce.provider.digest.GOST3411$Digest"
},
{
"type" => "Mac",
"algorithm" => "HMACGOST3411",
"class-name" =>
"org.bouncycastle.jcajce.provider.digest.GOST3411$HashMac"
},
{
"type" => "KeyGenerator",
"algorithm" => "HMACGOST3411",
"class-name" =>
"org.bouncycastle.jcajce.provider.digest.GOST3411$KeyGenerator"
},
{
"type" => "MessageDigest",
"algorithm" => "GOST3411-2012-256",
"class-name" =>
"org.bouncycastle.jcajce.provider.digest.GOST3411$Digest2012_256"
},
...
{code}
Check provider discovery feature.
{code:java|title=ProviderDefinitions}
ClassLoader classLoader =
doPrivileged((PrivilegedExceptionAction<ClassLoader>) () ->
resolveClassLoader(module));
final List<Provider> loadedProviders;
if (classNames != null) {
loadedProviders = new ArrayList<>(classNames.length);
for (String className : classNames) {
Class<? extends Provider> providerClazz =
classLoader.loadClass(className).asSubclass(Provider.class);
loadedProviders.add(providerClazz.newInstance());
}
} else {
loadedProviders = new ArrayList<>();
ServiceLoader<Provider> loader = ServiceLoader.load(Provider.class,
classLoader);
loader.forEach(loadedProviders::add);
}
{code}