[java-opensaml] 09/13: Some configurable key agreement parameters need to be cloneable
Brent Putman
putmanb at georgetown.edu
Wed Jan 6 01:27:23 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=ca31cd1c31a12d8e5588b0836991ed8ea911bf6b
commit ca31cd1c31a12d8e5588b0836991ed8ea911bf6b
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