[java-oidc-common] branch main updated: Null cleanup and missing/incorrect annotations.

Scott Cantor cantor.2 at osu.edu
Thu Oct 19 16:20:55 UTC 2023


This is an automated email from the git hooks/post-receive script.

scantor pushed a commit to branch main
in repository java-oidc-common.

View the commit online:
http://git.shibboleth.net/view/?p=java-oidc-common.git;a=commit;h=cb7c96f6b93fef07ed0ad241a675f70a45084483

The following commit(s) were added to refs/heads/main by this push:
     new cb7c96f  Null cleanup and missing/incorrect annotations.
cb7c96f is described below

commit cb7c96f6b93fef07ed0ad241a675f70a45084483
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Thu Oct 19 12:20:50 2023 -0400

    Null cleanup and missing/incorrect annotations.
---
 .../oidc/security/CredentialConversionUtil.java    | 46 ++++++++++++++--------
 .../shibboleth/oidc/security/JWSAssemblyUtils.java |  4 +-
 .../BasicClientSecretCredentialFactoryBean.java    | 21 ++++++----
 ...piringJWTSharedSecretCredentialFactoryBean.java | 21 +++++++---
 .../credential/BasicJWKReferenceCredential.java    | 11 +++---
 .../credential/BasicNimbusSecretCredential.java    |  9 +++--
 .../credential/DefaultClientSecretCredential.java  |  8 +++-
 .../security/credential/JWKCredentialSupport.java  | 17 +++++---
 .../DecryptionConfigurationCriterion.java          |  7 +++-
 .../EncryptionConfigurationCriterion.java          |  9 +++--
 .../jose/criterion/JOSEObjectCriterion.java        |  6 ++-
 .../security/jose/criterion/JWKSetCriterion.java   |  6 ++-
 .../security/jose/criterion/KeyIdCriterion.java    | 11 +++---
 .../SignatureSigningConfigurationCriterion.java    |  7 +++-
 .../SignatureValidationConfigurationCriterion.java | 10 +++--
 15 files changed, 125 insertions(+), 68 deletions(-)

diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/CredentialConversionUtil.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/CredentialConversionUtil.java
index 6b96f46..ff4f4be 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/CredentialConversionUtil.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/CredentialConversionUtil.java
@@ -14,6 +14,7 @@
 
 package net.shibboleth.oidc.security;
 
+import java.security.PublicKey;
 import java.security.interfaces.ECPublicKey;
 import java.security.interfaces.RSAPublicKey;
 
@@ -52,7 +53,7 @@ public final class CredentialConversionUtil {
      *  
      * @return key names or null if not found
      */
-    public static String resolveKid(@Nonnull final Credential credential) {
+    @Nullable public static String resolveKid(@Nonnull final Credential credential) {
         if (credential.getKeyNames() != null) {
             for (final String keyName : credential.getKeyNames()) {
                 return keyName;
@@ -70,14 +71,14 @@ public final class CredentialConversionUtil {
      * @param credential credential to resolve KeyUse of
      * @return KeyUse of credential
      */
-    public static KeyUse resolveKeyUse(final Credential credential) {
+    @Nullable public static KeyUse resolveKeyUse(@Nullable final Credential credential) {
         if (credential == null || credential.getUsageType() == null) {
             return null;
         }
-        if (credential.getUsageType().equals(UsageType.SIGNING)) {
+        if (UsageType.SIGNING.equals(credential.getUsageType())) {
             return KeyUse.SIGNATURE;
         }
-        if (credential.getUsageType().equals(UsageType.ENCRYPTION)) {
+        if (UsageType.ENCRYPTION.equals(credential.getUsageType())) {
             return KeyUse.ENCRYPTION;
         }
         return null;
@@ -89,17 +90,23 @@ public final class CredentialConversionUtil {
      * @param credential to convert.
      * @return credential as JWK.
      */
-    public static JWK credentialToKey(final Credential credential) {
-        if (credential == null || credential.getPublicKey() == null) {
+    @Nullable public static JWK credentialToKey(@Nullable final Credential credential) {
+        if (credential == null) {
             return null;
         }
-        final String algorithm = credential.getPublicKey().getAlgorithm();
+        
+        final PublicKey pkey = credential.getPublicKey();
+        if (pkey == null) {
+            return null;
+        }
+        
+        final String algorithm = pkey.getAlgorithm();
         if ("RSA".equals(algorithm)) {
-            return new RSAKey.Builder((RSAPublicKey) credential.getPublicKey()).keyUse(resolveKeyUse(credential))
+            return new RSAKey.Builder((RSAPublicKey) pkey).keyUse(resolveKeyUse(credential))
                     .keyID(resolveKid(credential)).build();
         }
         if ("EC".equals(algorithm)) {
-            return new ECKey.Builder(Curve.forECParameterSpec(((ECPublicKey) credential.getPublicKey()).getParams()),
+            return new ECKey.Builder(Curve.forECParameterSpec(((ECPublicKey) pkey).getParams()),
                     (ECPublicKey) credential.getPublicKey()).keyUse(resolveKeyUse(credential))
                     .keyID(resolveKid(credential)).build();
         }
@@ -115,13 +122,16 @@ public final class CredentialConversionUtil {
      * @param derivedKey the secret key to use
      * @return the copied credential with the supplied secret key
      */
-    public static JWKCredential copySymmetricCredentialWithNewSecret(
-            final JWKCredential credential, final String newKid, final SecretKey derivedKey) {
+    @Nonnull public static JWKCredential copySymmetricCredentialWithNewSecret(@Nonnull final JWKCredential credential,
+            @Nullable final String newKid, @Nonnull final SecretKey derivedKey) {
         final BasicJWKCredential jwkCredential = new BasicJWKCredential();
         jwkCredential.setAlgorithm(credential.getAlgorithm());
         jwkCredential.setKid(newKid);
         credential.getKeyNames().add(newKid);
-        jwkCredential.setUsageType(credential.getUsageType());            
+        final UsageType utype = credential.getUsageType();
+        if (utype != null) {
+            jwkCredential.setUsageType(utype);
+        }
         jwkCredential.setSecretKey(derivedKey);
         jwkCredential.setEntityId(credential.getEntityId());
         return jwkCredential;    
@@ -138,16 +148,18 @@ public final class CredentialConversionUtil {
     @Nullable public static Credential keyToCredential(@Nullable final JWK key) throws JOSEException {
         if (key == null) {
             return null;
-        }        
+        }
+        
         if (key instanceof RSAKey || key instanceof ECKey) {
             final BasicJWKCredential jwkCredential = new BasicJWKCredential();
             jwkCredential.setAlgorithm(key.getAlgorithm());
             jwkCredential.setKid(key.getKeyID());
             jwkCredential.getKeyNames().add(key.getKeyID());
-            jwkCredential.setUsageType(CredentialConversionUtil.getUsageType(key));            
-            jwkCredential.setPublicKey(((AsymmetricJWK) key).toPublicKey()); 
+            jwkCredential.setUsageType(CredentialConversionUtil.getUsageType(key));
+            jwkCredential.setPublicKey(((AsymmetricJWK) key).toPublicKey());
             return jwkCredential;
-        }     
+        }
+        
         return null;
     }
     
@@ -158,7 +170,7 @@ public final class CredentialConversionUtil {
      * @param jwk containing usage type. Must not be null.
      * @return usage type.
      */
-    public static UsageType getUsageType(@Nonnull final JWK jwk) {
+    @Nonnull public static UsageType getUsageType(@Nonnull final JWK jwk) {
         if (KeyUse.ENCRYPTION.equals(jwk.getKeyUse())) {
             return UsageType.ENCRYPTION;
         }
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWSAssemblyUtils.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWSAssemblyUtils.java
index 2101eb1..03563d6 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWSAssemblyUtils.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/JWSAssemblyUtils.java
@@ -99,7 +99,9 @@ public final class JWSAssemblyUtils {
        
        final JWSHeader header = new JWSHeader.Builder(algorithm)
                .type(JOSEObjectType.JWT)
-               .build();        
+               .build();
+       assert header != null;
+       
        final Payload payload = new Payload(claimsSet.toJSONObject());
        
        final String signingInput = composeSigningInput(header,payload);
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicClientSecretCredentialFactoryBean.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicClientSecretCredentialFactoryBean.java
index b08a059..6aa2bf4 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicClientSecretCredentialFactoryBean.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicClientSecretCredentialFactoryBean.java
@@ -17,6 +17,8 @@ package net.shibboleth.oidc.security.credential;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.springframework.beans.factory.BeanCreationException;
+
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.spring.factory.AbstractComponentAwareFactoryBean;
@@ -27,7 +29,7 @@ import net.shibboleth.shared.spring.factory.AbstractComponentAwareFactoryBean;
  * @since 2.2.0
  */
 public class BasicClientSecretCredentialFactoryBean 
-                    extends AbstractComponentAwareFactoryBean<DefaultClientSecretCredential> {
+        extends AbstractComponentAwareFactoryBean<DefaultClientSecretCredential> {
     
     /** The secret to use when creating a BasicJWKCredential.*/
     @Nullable private String secret;
@@ -38,20 +40,23 @@ public class BasicClientSecretCredentialFactoryBean
      * @param secretIn the secret
      */
     public void setSecret(@Nonnull @NotEmpty final String secretIn) {
-        secret = Constraint.isNotEmpty(secretIn, "Secret can not be null or empty");
+        secret = Constraint.isNotEmpty(secretIn, "Secret cannot be null or empty");
     }
 
+    /** {@inheritDoc} */
     @Override
-    protected DefaultClientSecretCredential doCreateInstance() throws Exception {
-        if (secret == null) {
-            throw new Exception("Client secret can not be null");
+    @Nonnull protected DefaultClientSecretCredential doCreateInstance() throws Exception {
+        final String local = secret;
+        if (local == null) {
+            throw new BeanCreationException("Client secret cannot be null");
         }
-        return new DefaultClientSecretCredential(secret);      
+        return new DefaultClientSecretCredential(local);      
     }
 
+    /** {@inheritDoc} */
     @Override
-    public Class<?> getObjectType() {
+    @Nonnull public Class<?> getObjectType() {
         return DefaultClientSecretCredential.class;
     }
 
-}
+}
\ No newline at end of file
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicExpiringJWTSharedSecretCredentialFactoryBean.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicExpiringJWTSharedSecretCredentialFactoryBean.java
index 968e078..743214e 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicExpiringJWTSharedSecretCredentialFactoryBean.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicExpiringJWTSharedSecretCredentialFactoryBean.java
@@ -24,6 +24,7 @@ import javax.crypto.SecretKey;
 import org.opensaml.security.credential.UsageType;
 import org.opensaml.security.crypto.KeySupport;
 import org.opensaml.spring.credential.AbstractCredentialFactoryBean;
+import org.springframework.beans.factory.BeanCreationException;
 
 import com.google.common.base.Enums;
 import com.nimbusds.jose.Algorithm;
@@ -39,13 +40,13 @@ import net.shibboleth.shared.primitive.StringSupport;
  * @since 2.2.0
  */
 public class BasicExpiringJWTSharedSecretCredentialFactoryBean 
-                    extends AbstractCredentialFactoryBean<ExpiringJWKCredential> {
+        extends AbstractCredentialFactoryBean<ExpiringJWKCredential> {
      
     /** The secret to use when creating a BasicJWKCredential.*/
     @Nullable private String secret;
     
     /** The JCA algorithm to set on the {@link SecretKey}. Defaults to AES.*/
-    @Nullable private String jcaAlg = "AES";
+    @Nullable private String jcaAlg;
     
     /** The key management algorithm ('alg') this credential supports.*/
     @Nullable private Algorithm alg;
@@ -59,6 +60,7 @@ public class BasicExpiringJWTSharedSecretCredentialFactoryBean
     /** Constructor.*/
     public BasicExpiringJWTSharedSecretCredentialFactoryBean() {
         credentialExpiresAt = Duration.ZERO;
+        jcaAlg = "AES";
     }
     
     /**
@@ -99,11 +101,20 @@ public class BasicExpiringJWTSharedSecretCredentialFactoryBean
         secret = Constraint.isNotEmpty(secretIn, "Secret can not be null or empty");
     }
 
+    /** {@inheritDoc} */
     @Override
-    protected ExpiringJWKCredential doCreateInstance() throws Exception {
+    @Nonnull protected ExpiringJWKCredential doCreateInstance() throws Exception {
         
         final BasicExpiringJWKCredential jwkCredential = new BasicExpiringJWKCredential();
-        jwkCredential.setSecretKey(KeySupport.decodeSecretKey(JWSAssemblyUtils.getSecretBytes(secret), jcaAlg));
+        
+        final String localSecret = secret;
+        final String localAlg = jcaAlg;
+        
+        if (localSecret == null || localAlg == null) {
+            throw new BeanCreationException("Secret and algorithm cannot be null");
+        }
+        
+        jwkCredential.setSecretKey(KeySupport.decodeSecretKey(JWSAssemblyUtils.getSecretBytes(localSecret), localAlg));
         jwkCredential.setCredentialExpiresAt(credentialExpiresAt);
         jwkCredential.setEntityId(getEntityID());
         jwkCredential.setAlgorithm(alg);
@@ -125,4 +136,4 @@ public class BasicExpiringJWTSharedSecretCredentialFactoryBean
         return BasicJWKCredential.class;
     }
 
-}
+}
\ No newline at end of file
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicJWKReferenceCredential.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicJWKReferenceCredential.java
index cea0971..f2ed71a 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicJWKReferenceCredential.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicJWKReferenceCredential.java
@@ -16,6 +16,8 @@ package net.shibboleth.oidc.security.credential;
 
 import java.net.URI;
 
+import javax.annotation.Nonnull;
+
 import org.opensaml.security.credential.AbstractCredential;
 import org.opensaml.security.credential.Credential;
 
@@ -31,7 +33,7 @@ public class BasicJWKReferenceCredential extends AbstractCredential implements J
      * Constructor.
      */
     public BasicJWKReferenceCredential() {
-        super();
+
     }
     
     /**
@@ -40,7 +42,6 @@ public class BasicJWKReferenceCredential extends AbstractCredential implements J
      * @param uri A reference to a JWK.
      */
     public BasicJWKReferenceCredential(final URI uri) {
-        this();
         referenceUri = uri;
     }
     
@@ -55,14 +56,14 @@ public class BasicJWKReferenceCredential extends AbstractCredential implements J
     
     /** {@inheritDoc} */
     @Override
-    public URI getReferenceURI() {
+    @Nonnull public URI getReferenceURI() {
         return referenceUri;
     }
 
     /** {@inheritDoc} */
     @Override
-    public Class<? extends Credential> getCredentialType() {
+    @Nonnull public Class<? extends Credential> getCredentialType() {
         return JWKReferenceCredential.class;
     }
     
-}
+}
\ No newline at end of file
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicNimbusSecretCredential.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicNimbusSecretCredential.java
index 879766b..013662a 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicNimbusSecretCredential.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicNimbusSecretCredential.java
@@ -14,6 +14,8 @@
 
 package net.shibboleth.oidc.security.credential;
 
+import javax.annotation.Nonnull;
+
 import org.opensaml.security.credential.AbstractCredential;
 import org.opensaml.security.credential.Credential;
 
@@ -34,7 +36,7 @@ public class BasicNimbusSecretCredential extends AbstractCredential implements N
      * Constructor.
      */
     public BasicNimbusSecretCredential() {
-        super();
+        
     }
     
     /**
@@ -43,7 +45,6 @@ public class BasicNimbusSecretCredential extends AbstractCredential implements N
      * @param secret The client secret.
      */
     public BasicNimbusSecretCredential(final Secret secret) {
-        this();
         clientSecret = secret;
     }
     
@@ -58,13 +59,13 @@ public class BasicNimbusSecretCredential extends AbstractCredential implements N
     
     /** {@inheritDoc} */
     @Override
-    public Secret getSecret() {
+    @Nonnull public Secret getSecret() {
         return clientSecret;
     }
 
     /** {@inheritDoc} */
     @Override
-    public Class<? extends Credential> getCredentialType() {
+    @Nonnull public Class<? extends Credential> getCredentialType() {
         return NimbusSecretCredential.class;
     }
     
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/DefaultClientSecretCredential.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/DefaultClientSecretCredential.java
index 4e6fd49..9986fc3 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/DefaultClientSecretCredential.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/DefaultClientSecretCredential.java
@@ -74,16 +74,19 @@ public class DefaultClientSecretCredential implements ClientSecretCredential {
         secretKeyName = Constraint.isNotEmpty(keyName, "Secret keyname can not be null or empty");
     }
     
+    /** {@inheritDoc} */
     @Override
     @Nonnull public String getSecret() {
         return new String(clientSecret, StandardCharsets.UTF_8);
     }
     
+    /** {@inheritDoc} */
     @Override
     @NotLive @Nonnull public byte[] getSecretAsBytes(){
         return clientSecret.clone();
     }
 
+    /** {@inheritDoc} */
     @Override
     @Nonnull public JWKCredential toSigningCredential() {
         final BasicExpiringJWKCredential jwkCredential = new BasicExpiringJWKCredential();  
@@ -94,9 +97,10 @@ public class DefaultClientSecretCredential implements ClientSecretCredential {
         return jwkCredential;
     }
 
+    /** {@inheritDoc} */
     @Override
-    public JWKCredential toEncryptionCredential(final JWEAlgorithm alg, final EncryptionMethod enc) 
-                throws JOSEException {
+    @Nonnull public JWKCredential toEncryptionCredential(@Nonnull final JWEAlgorithm alg,
+            @Nonnull final EncryptionMethod enc) throws JOSEException {
         // Derive key using the algorithm and enc method
         final SecretKey key = JWKCredentialSupport.generateSymmetricKey(clientSecret, alg, enc);
         final BasicExpiringJWKCredential jwkCredential = new BasicExpiringJWKCredential(); 
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/JWKCredentialSupport.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/JWKCredentialSupport.java
index 7ca64b1..ca7e2b5 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/JWKCredentialSupport.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/JWKCredentialSupport.java
@@ -14,6 +14,7 @@
 
 package net.shibboleth.oidc.security.credential;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.crypto.SecretKey;
 
@@ -50,10 +51,16 @@ public final class JWKCredentialSupport {
             @Nullable final JWKCredential credential, @Nullable final JWEAlgorithm alg, 
             @Nullable final EncryptionMethod enc) throws JOSEException {
         
-        if (credential == null || credential.getSecretKey() == null || alg == null || enc == null) {
+        if (credential == null || alg == null || enc == null) {
             return null;
         }
-        final SecretKey derivedKey = generateSymmetricKey(credential.getSecretKey().getEncoded(), alg, enc);
+        
+        final SecretKey skey = credential.getSecretKey();
+        if (skey == null) {
+            return null;
+        }
+        
+        final SecretKey derivedKey = generateSymmetricKey(skey.getEncoded(), alg, enc);
         //build a new credential so the old is left in its original state
         return CredentialConversionUtil.copySymmetricCredentialWithNewSecret(
                 credential, "derived-"+CredentialConversionUtil.resolveKid(credential), derivedKey);
@@ -70,8 +77,8 @@ public final class JWKCredentialSupport {
 
      * @throws JOSEException on error 
      */
-    public static final SecretKey generateSymmetricKey(final byte[] clientSecret, final JWEAlgorithm alg,
-            final EncryptionMethod enc) throws JOSEException {
+    @Nonnull public static final SecretKey generateSymmetricKey(@Nonnull final byte[] clientSecret,
+            @Nonnull final JWEAlgorithm alg, @Nonnull final EncryptionMethod enc) throws JOSEException {
         
         return SecretKeyDerivation.deriveSecretKey(
                 new Secret(new String(clientSecret, StandardCharset.UTF_8)), alg, enc);        
@@ -94,4 +101,4 @@ public final class JWKCredentialSupport {
         return SecretKeyDerivation.deriveSecretKey(clientSecret, alg, enc);        
     }
 
-}
+}
\ No newline at end of file
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/DecryptionConfigurationCriterion.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/DecryptionConfigurationCriterion.java
index 6e37139..a3f6e61 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/DecryptionConfigurationCriterion.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/DecryptionConfigurationCriterion.java
@@ -23,6 +23,7 @@ import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.resolver.Criterion;
 
@@ -43,7 +44,8 @@ public class DecryptionConfigurationCriterion implements Criterion {
      */
     public DecryptionConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             List<DecryptionConfiguration> configurations) {
-        configs = List.copyOf(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        configs = CollectionSupport.copyToList(
+                Constraint.isNotNull(configurations, "List of configurations cannot be null"));
         Constraint.isNotEmpty(configs, "At least one configuration is required");
         
     }
@@ -55,7 +57,8 @@ public class DecryptionConfigurationCriterion implements Criterion {
      */
     public DecryptionConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             DecryptionConfiguration... configurations) {
-        configs = List.of(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        configs = CollectionSupport.listOf(
+                Constraint.isNotNull(configurations, "List of configurations cannot be null"));
         Constraint.isNotEmpty(configs, "At least one configuration is required");
     }
     
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/EncryptionConfigurationCriterion.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/EncryptionConfigurationCriterion.java
index e398858..4cdb67f 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/EncryptionConfigurationCriterion.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/EncryptionConfigurationCriterion.java
@@ -23,6 +23,7 @@ import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.resolver.Criterion;
 
@@ -43,7 +44,8 @@ public class EncryptionConfigurationCriterion implements Criterion {
      */
     public EncryptionConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             List<EncryptionConfiguration> configurations) {
-        configs = List.copyOf(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        configs = CollectionSupport.copyToList(
+                Constraint.isNotNull(configurations, "List of configurations cannot be null"));
         Constraint.isNotEmpty(configs, "At least one configuration is required");
         
     }
@@ -55,7 +57,8 @@ public class EncryptionConfigurationCriterion implements Criterion {
      */
     public EncryptionConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             EncryptionConfiguration... configurations) {
-        configs = List.of(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        configs = CollectionSupport.listOf(
+                Constraint.isNotNull(configurations, "List of configurations cannot be null"));
         Constraint.isNotEmpty(configs, "At least one configuration is required");
     }
     
@@ -102,4 +105,4 @@ public class EncryptionConfigurationCriterion implements Criterion {
         return false;
     }
 
-}
+}
\ No newline at end of file
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/JOSEObjectCriterion.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/JOSEObjectCriterion.java
index d23b9e1..1ba3638 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/JOSEObjectCriterion.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/JOSEObjectCriterion.java
@@ -14,6 +14,8 @@
 
 package net.shibboleth.oidc.security.jose.criterion;
 
+import java.util.Objects;
+
 import javax.annotation.Nullable;
 
 import com.nimbusds.jose.JOSEObject;
@@ -91,8 +93,8 @@ public final class JOSEObjectCriterion implements Criterion {
             return false;
         }
 
-        if (obj instanceof JOSEObjectCriterion) {
-            return joseObject.equals(((JOSEObjectCriterion) obj).joseObject);
+        if (obj instanceof JOSEObjectCriterion jose) {
+            return Objects.equals(joseObject, jose.joseObject);
         }
 
         return false;
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/JWKSetCriterion.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/JWKSetCriterion.java
index a6b9b2f..b9b9161 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/JWKSetCriterion.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/JWKSetCriterion.java
@@ -14,6 +14,8 @@
 
 package net.shibboleth.oidc.security.jose.criterion;
 
+import java.util.Objects;
+
 import javax.annotation.Nullable;
 
 import com.nimbusds.jose.jwk.JWKSet;
@@ -89,8 +91,8 @@ public final class JWKSetCriterion implements Criterion {
             return false;
         }
 
-        if (obj instanceof JWKSetCriterion) {
-            return jwkSet.equals(((JWKSetCriterion) obj).jwkSet);
+        if (obj instanceof JWKSetCriterion downcast) {
+            return Objects.equals(jwkSet, downcast.jwkSet);
         }
 
         return false;
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/KeyIdCriterion.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/KeyIdCriterion.java
index 7884143..17a395d 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/KeyIdCriterion.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/KeyIdCriterion.java
@@ -29,7 +29,7 @@ import net.shibboleth.shared.resolver.Criterion;
 public class KeyIdCriterion implements Criterion {
 
     /** Expected key ID of resolved credentials.  */
-    private String keyId;
+    @Nonnull private String keyId;
     
     /**
      * Constructor.
@@ -37,7 +37,8 @@ public class KeyIdCriterion implements Criterion {
      * @param id key identifier.
      */
     public KeyIdCriterion(@Nonnull final String id) {
-        setKeyId(id);
+        final String trimmed = StringSupport.trimOrNull(id);
+        keyId = Constraint.isNotNull(trimmed, "Key ID criteria value cannot be null or empty");
     }
 
     /**
@@ -56,9 +57,7 @@ public class KeyIdCriterion implements Criterion {
      */
     public void setKeyId(@Nonnull final String id) {
         final String trimmed = StringSupport.trimOrNull(id);
-        Constraint.isNotNull(trimmed, "Key ID criteria value cannot be null or empty");
-
-        keyId = trimmed;
+        keyId = Constraint.isNotNull(trimmed, "Key ID criteria value cannot be null or empty");
     }
     
     /** {@inheritDoc} */
@@ -95,4 +94,4 @@ public class KeyIdCriterion implements Criterion {
         return false;
     }
 
-}
+}
\ No newline at end of file
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/SignatureSigningConfigurationCriterion.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/SignatureSigningConfigurationCriterion.java
index c179634..1afe5b1 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/SignatureSigningConfigurationCriterion.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/SignatureSigningConfigurationCriterion.java
@@ -23,6 +23,7 @@ import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.resolver.Criterion;
 
@@ -43,7 +44,8 @@ public class SignatureSigningConfigurationCriterion implements Criterion {
      */
     public SignatureSigningConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             List<SignatureSigningConfiguration> configurations) {
-        configs = List.copyOf(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        configs = CollectionSupport.copyToList(
+                Constraint.isNotNull(configurations, "List of configurations cannot be null"));
         Constraint.isNotEmpty(configs, "At least one configuration is required");
         
     }
@@ -55,7 +57,8 @@ public class SignatureSigningConfigurationCriterion implements Criterion {
      */
     public SignatureSigningConfigurationCriterion(@Nonnull @NonnullElements  @NotEmpty final
             SignatureSigningConfiguration... configurations) {
-        configs = List.of(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        configs = CollectionSupport.listOf(
+                Constraint.isNotNull(configurations, "List of configurations cannot be null"));
         Constraint.isNotEmpty(configs, "At least one configuration is required");
     }
     
diff --git a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/SignatureValidationConfigurationCriterion.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/SignatureValidationConfigurationCriterion.java
index 764cabc..9d5adfe 100644
--- a/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/SignatureValidationConfigurationCriterion.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/jose/criterion/SignatureValidationConfigurationCriterion.java
@@ -25,6 +25,7 @@ import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.resolver.Criterion;
 
@@ -46,7 +47,8 @@ public class SignatureValidationConfigurationCriterion implements Criterion {
      */
     public SignatureValidationConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             List<SignatureValidationConfiguration> configurations) {
-        configs = List.copyOf(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        configs = CollectionSupport.copyToList(
+                Constraint.isNotNull(configurations, "List of configurations cannot be null"));
         Constraint.isNotEmpty(configs, "At least one configuration is required");
         
     }
@@ -58,7 +60,8 @@ public class SignatureValidationConfigurationCriterion implements Criterion {
      */
     public SignatureValidationConfigurationCriterion(@Nonnull @NonnullElements @NotEmpty final
             SignatureValidationConfiguration... configurations) {
-        configs = List.of(Constraint.isNotNull(configurations, "List of configurations cannot be null"));
+        configs = CollectionSupport.listOf(
+                Constraint.isNotNull(configurations, "List of configurations cannot be null"));
         Constraint.isNotEmpty(configs, "At least one configuration is required");
     }
     
@@ -104,5 +107,4 @@ public class SignatureValidationConfigurationCriterion implements Criterion {
         return false;
     }
 
-}
-
+}
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list