Fix nesting of argon2 semaphore acquisition and release

Closes #45564

Signed-off-by: Alexander Schwartz <alexander.schwartz@ibm.com>
This commit is contained in:
Alexander Schwartz 2026-01-20 11:16:30 +01:00 committed by GitHub
parent dd0214bc78
commit df42e9140d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -110,32 +110,31 @@ public class Argon2PasswordHashProvider implements PasswordHashProvider {
private String encode(String rawPassword, byte[] salt, String version, String type, int hashLength, int parallelism, int memory, int iterations) {
var tracing = TracingProviderUtil.getTracingProvider();
try {
return tracing.trace(Argon2PasswordHashProvider.class, "encode", span -> {
return tracing.trace(Argon2PasswordHashProvider.class, "encode", span -> {
try {
cpuCoreSemaphore.acquire();
try {
cpuCoreSemaphore.acquire();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException(e);
org.bouncycastle.crypto.params.Argon2Parameters parameters = new org.bouncycastle.crypto.params.Argon2Parameters.Builder(Argon2Parameters.getTypeValue(type))
.withVersion(Argon2Parameters.getVersionValue(version))
.withSalt(salt)
.withParallelism(parallelism)
.withMemoryAsKB(memory)
.withIterations(iterations).build();
Argon2BytesGenerator generator = new Argon2BytesGenerator();
generator.init(parameters);
byte[] result = new byte[hashLength];
generator.generateBytes(rawPassword.toCharArray(), result);
return Base64.getEncoder().encodeToString(result);
} finally {
cpuCoreSemaphore.release();
}
org.bouncycastle.crypto.params.Argon2Parameters parameters = new org.bouncycastle.crypto.params.Argon2Parameters.Builder(Argon2Parameters.getTypeValue(type))
.withVersion(Argon2Parameters.getVersionValue(version))
.withSalt(salt)
.withParallelism(parallelism)
.withMemoryAsKB(memory)
.withIterations(iterations).build();
Argon2BytesGenerator generator = new Argon2BytesGenerator();
generator.init(parameters);
byte[] result = new byte[hashLength];
generator.generateBytes(rawPassword.toCharArray(), result);
return Base64.getEncoder().encodeToString(result);
});
} finally {
cpuCoreSemaphore.release();
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException(e);
}
});
}
private boolean checkCredData(String key, int expectedValue, PasswordCredentialData data) {