[java-opensaml] 09/15: Some configurable key agreement parameters need to be cloneable

Brent Putman putmanb at georgetown.edu
Thu Jan 21 21:33:29 UTC 2021


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

putmanb pushed a commit to branch dev/OSJ-82
in repository java-opensaml.

View the commit online:
http://git.shibboleth.net/view/?p=java-opensaml.git;a=commit;h=63246c4814b758c2288ed7827484691f9bd29fdd

commit 63246c4814b758c2288ed7827484691f9bd29fdd
Author: Brent Putman <putmanb at georgetown.edu>
AuthorDate: Sun Dec 27 18:50:08 2020 -0500

    Some configurable key agreement parameters need to be cloneable
---
 ...rs.java => CloneableKeyAgreementParameter.java} | 26 +++++-----------------
 .../xmlsec/agreement/KeyAgreementParameters.java   | 26 +++++++++++++++++++---
 .../opensaml/xmlsec/agreement/impl/KANonce.java    | 13 ++++++++++-
 .../opensaml/xmlsec/derivation/impl/ConcatKDF.java | 13 ++++++++++-
 .../opensaml/xmlsec/derivation/impl/PBKDF2.java    | 13 ++++++++++-
 5 files changed, 65 insertions(+), 26 deletions(-)

diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/agreement/KeyAgreementParameters.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/agreement/CloneableKeyAgreementParameter.java
similarity index 60%
copy from opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/agreement/KeyAgreementParameters.java
copy to opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/agreement/CloneableKeyAgreementParameter.java
index 8ae840683..d11ede381 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/agreement/KeyAgreementParameters.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/agreement/CloneableKeyAgreementParameter.java
@@ -17,30 +17,16 @@
 
 package org.opensaml.xmlsec.agreement;
 
-import javax.annotation.Nonnull;
-
-import net.shibboleth.utilities.java.support.collection.ClassIndexedSet;
-
 /**
- * Specialized collection type for holding sets of parameters to key agreement operations.
+ * A key agreement parameter which is capable of being cloned.
  */
-public class KeyAgreementParameters extends ClassIndexedSet<KeyAgreementParameter> {
+public interface CloneableKeyAgreementParameter extends KeyAgreementParameter, Cloneable {
     
     /**
-     * Constructor.
-     *
+     * Clone the parameter instance.
+     * 
+     * @return the cloned parameter
      */
-    public KeyAgreementParameters() {
-        super();
-    }
+    KeyAgreementParameter clone();
 
-    /**
-     * Copy constructor.
-     *
-     * @param source the source set from which to copy
-     */
-    public KeyAgreementParameters(@Nonnull final KeyAgreementParameters source) {
-        super();
-        addAll(source);
-    }
 }
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/agreement/KeyAgreementParameters.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/agreement/KeyAgreementParameters.java
index 8ae840683..060610a13 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/agreement/KeyAgreementParameters.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/agreement/KeyAgreementParameters.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.xmlsec.agreement;
 
+import java.util.Collection;
+
 import javax.annotation.Nonnull;
 
 import net.shibboleth.utilities.java.support.collection.ClassIndexedSet;
@@ -39,8 +41,26 @@ public class KeyAgreementParameters extends ClassIndexedSet<KeyAgreementParamete
      *
      * @param source the source set from which to copy
      */
-    public KeyAgreementParameters(@Nonnull final KeyAgreementParameters source) {
-        super();
-        addAll(source);
+    public KeyAgreementParameters(@Nonnull final Collection<KeyAgreementParameter> source) {
+        this(source, false);
     }
+    
+    /**
+     * Copy constructor with parameter clone option.
+     *
+     * @param source the source set from which to copy
+     * @param clone if true each parameter which is a {@link CloneableKeyAgreementParameter}
+     *              will be cloned before being added
+     */
+    public KeyAgreementParameters(@Nonnull final Collection<KeyAgreementParameter> source, final boolean clone) {
+        this();
+        for (final KeyAgreementParameter param : source) {
+            if (clone && CloneableKeyAgreementParameter.class.isInstance(param)) {
+                add(CloneableKeyAgreementParameter.class.cast(param).clone());
+            } else {
+                add(param);
+            }
+        }
+    }
+
 }
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/agreement/impl/KANonce.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/agreement/impl/KANonce.java
index 069847762..97943ae63 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/agreement/impl/KANonce.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/agreement/impl/KANonce.java
@@ -21,6 +21,7 @@ import javax.annotation.Nonnull;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.util.XMLObjectSupport;
+import org.opensaml.xmlsec.agreement.CloneableKeyAgreementParameter;
 import org.opensaml.xmlsec.agreement.XMLExpressableKeyAgreementParameter;
 
 import net.shibboleth.utilities.java.support.logic.Constraint;
@@ -29,7 +30,7 @@ import net.shibboleth.utilities.java.support.primitive.StringSupport;
 /**
  * Key agreement parameter to support use of {@link org.opensaml.xmlsec.encryption.KANonce} values.
  */
-public class KANonce implements XMLExpressableKeyAgreementParameter {
+public class KANonce implements XMLExpressableKeyAgreementParameter, CloneableKeyAgreementParameter {
     
     /** Base64-encoded nonce value. */
     @Nonnull private String value;
@@ -61,5 +62,15 @@ public class KANonce implements XMLExpressableKeyAgreementParameter {
         nonce.setValue(getValue());
         return nonce;
     }
+    
+    /** {@inheritDoc} */
+    public KANonce clone() {
+        try {
+            return (KANonce ) super.clone();
+        } catch (final CloneNotSupportedException e) {
+            // We know we are, so this will never happen
+            return null;
+        }
+    }
 
 }
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/derivation/impl/ConcatKDF.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/derivation/impl/ConcatKDF.java
index 816297d84..fb513af0d 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/derivation/impl/ConcatKDF.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/derivation/impl/ConcatKDF.java
@@ -22,6 +22,7 @@ import javax.crypto.SecretKey;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.util.XMLObjectSupport;
+import org.opensaml.xmlsec.agreement.CloneableKeyAgreementParameter;
 import org.opensaml.xmlsec.derivation.KeyDerivation;
 import org.opensaml.xmlsec.derivation.KeyDerivationException;
 import org.opensaml.xmlsec.encryption.ConcatKDFParams;
@@ -31,7 +32,7 @@ import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
 /**
  * Implementation of ConcatKDF key derivation as defined in XML Encryption 1.1.
  */
-public class ConcatKDF implements KeyDerivation {
+public class ConcatKDF implements KeyDerivation, CloneableKeyAgreementParameter {
 
     /** {@inheritDoc} */
     public String getAlgorithm() {
@@ -62,5 +63,15 @@ public class ConcatKDF implements KeyDerivation {
         
         return method;
     }
+    
+    /** {@inheritDoc} */
+    public ConcatKDF clone() {
+        try {
+            return (ConcatKDF) super.clone();
+        } catch (final CloneNotSupportedException e) {
+            // We know we are, so this will never happen
+            return null;
+        }
+    }
 
 }
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/derivation/impl/PBKDF2.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/derivation/impl/PBKDF2.java
index e70077042..1691fdd5f 100644
--- a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/derivation/impl/PBKDF2.java
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/derivation/impl/PBKDF2.java
@@ -22,6 +22,7 @@ import javax.crypto.SecretKey;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.util.XMLObjectSupport;
+import org.opensaml.xmlsec.agreement.CloneableKeyAgreementParameter;
 import org.opensaml.xmlsec.derivation.KeyDerivation;
 import org.opensaml.xmlsec.derivation.KeyDerivationException;
 import org.opensaml.xmlsec.encryption.ConcatKDFParams;
@@ -31,7 +32,7 @@ import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
 /**
  * Implementation of PBKDF2 key derivation as defined in XML Encryption 1.1.
  */
-public class PBKDF2 implements KeyDerivation {
+public class PBKDF2 implements KeyDerivation, CloneableKeyAgreementParameter {
 
     /** {@inheritDoc} */
     public String getAlgorithm() {
@@ -62,5 +63,15 @@ public class PBKDF2 implements KeyDerivation {
         
         return method;
     }
+    
+    /** {@inheritDoc} */
+    public PBKDF2 clone() {
+        try {
+            return (PBKDF2) super.clone();
+        } catch (final CloneNotSupportedException e) {
+            // We know we are, so this will never happen
+            return null;
+        }
+    }
 
 }

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


More information about the commits mailing list