JWS PS256 with the BouncyCastle FIPS provider
The Nimbus JOSE+JWT library received an
update
in version 9.6 to handle the BouncyCastle
FIPS algorithm names required to instantiate
PS256, PS384 and PS512 JWS signers and verifiers.
Example Java code for creating a PS256 signer and verifier with the
BouncyCastle FIPS provider:
import java.security.PrivateKey;
import java.security.interfaces.RSAPublicKey;
import com.nimbusds.jose.*;
import com.nimbusds.jose.crypto.*;
import com.nimbusds.jose.crypto.bc.BouncyCastleFIPSProviderSingleton;
// Create RSA signer and set BC FIPS provider
JWSSigner signer = new RSASSASigner(privateKey);
signer.getJCAContext().setProvider(BouncyCastleFIPSProviderSingleton.getInstance());
// Sign
JWSObject jwsObject = new JWSObject(
new JWSHeader.Builder(JWSAlgorithm.PS256).build(),
new Payload("Some payload"));
jwsObject.sign(signer);
// Create RSA verifier and set BC FIPS provider
JWSVerifier verifier = new RSASSAVerifier(publicKey);
verifier.getJCAContext().setProvider(BouncyCastleFIPSProviderSingleton.getInstance());
// Verify signature
assertTrue(jwsObject.verify(verifier));