[java-opensaml] 02/13: Additional XML Encryption 1.1 XMLObject providers.
Brent Putman
putmanb at georgetown.edu
Wed Jan 6 01:27:16 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=dd0dc1cda906ac7d8944937a44564063c3f3d2c0
commit dd0dc1cda906ac7d8944937a44564063c3f3d2c0
Author: Brent Putman <putmanb at georgetown.edu>
AuthorDate: Thu Dec 3 20:51:56 2020 -0500
Additional XML Encryption 1.1 XMLObject providers.
---
.../xmlsec/encryption/ConcatKDFParams.java | 216 ++++++++++++++++++++
.../org/opensaml/xmlsec/encryption/DerivedKey.java | 152 +++++++++++++++
.../opensaml/xmlsec/encryption/DerivedKeyName.java | 37 ++++
.../opensaml/xmlsec/encryption/IterationCount.java | 37 ++++
.../xmlsec/encryption/KeyDerivationMethod.java | 63 ++++++
.../org/opensaml/xmlsec/encryption/KeyLength.java | 37 ++++
.../opensaml/xmlsec/encryption/MasterKeyName.java | 37 ++++
.../opensaml/xmlsec/encryption/OtherSource.java | 36 ++++
.../opensaml/xmlsec/encryption/PBKDF2Params.java | 101 ++++++++++
.../java/org/opensaml/xmlsec/encryption/PRF.java | 43 ++++
.../java/org/opensaml/xmlsec/encryption/Salt.java | 66 +++++++
.../org/opensaml/xmlsec/encryption/Specified.java | 37 ++++
.../encryption/impl/ConcatKDFParamsBuilder.java | 49 +++++
.../encryption/impl/ConcatKDFParamsImpl.java | 215 ++++++++++++++++++++
.../encryption/impl/ConcatKDFParamsMarshaller.java | 53 +++++
.../impl/ConcatKDFParamsUnmarshaller.java | 62 ++++++
.../xmlsec/encryption/impl/DerivedKeyBuilder.java | 46 +++++
.../xmlsec/encryption/impl/DerivedKeyImpl.java | 171 ++++++++++++++++
.../encryption/impl/DerivedKeyMarshaller.java | 55 ++++++
.../encryption/impl/DerivedKeyNameBuilder.java | 47 +++++
.../xmlsec/encryption/impl/DerivedKeyNameImpl.java | 40 ++++
.../encryption/impl/DerivedKeyUnmarshaller.java | 68 +++++++
.../encryption/impl/IterationCountBuilder.java | 46 +++++
.../xmlsec/encryption/impl/IterationCountImpl.java | 40 ++++
.../impl/KeyDerivationMethodBuilder.java | 49 +++++
.../encryption/impl/KeyDerivationMethodImpl.java | 91 +++++++++
.../impl/KeyDerivationMethodMarshaller.java | 41 ++++
.../impl/KeyDerivationMethodUnmarshaller.java | 49 +++++
.../xmlsec/encryption/impl/KeyLengthBuilder.java | 46 +++++
.../xmlsec/encryption/impl/KeyLengthImpl.java | 40 ++++
.../encryption/impl/MasterKeyNameBuilder.java | 46 +++++
.../xmlsec/encryption/impl/MasterKeyNameImpl.java | 40 ++++
.../xmlsec/encryption/impl/OtherSourceBuilder.java | 47 +++++
.../xmlsec/encryption/impl/OtherSourceImpl.java | 38 ++++
.../encryption/impl/OtherSourceMarshaller.java | 25 +++
.../encryption/impl/OtherSourceUnmarshaller.java | 25 +++
.../encryption/impl/PBKDF2ParamsBuilder.java | 48 +++++
.../xmlsec/encryption/impl/PBKDF2ParamsImpl.java | 126 ++++++++++++
.../encryption/impl/PBKDF2ParamsMarshaller.java | 25 +++
.../encryption/impl/PBKDF2ParamsUnmarshaller.java | 52 +++++
.../xmlsec/encryption/impl/PRFBuilder.java | 47 +++++
.../opensaml/xmlsec/encryption/impl/PRFImpl.java | 38 ++++
.../xmlsec/encryption/impl/PRFMarshaller.java | 25 +++
.../xmlsec/encryption/impl/PRFUnmarshaller.java | 25 +++
.../xmlsec/encryption/impl/SaltBuilder.java | 50 +++++
.../opensaml/xmlsec/encryption/impl/SaltImpl.java | 93 +++++++++
.../xmlsec/encryption/impl/SaltMarshaller.java | 25 +++
.../xmlsec/encryption/impl/SaltUnmarshaller.java | 46 +++++
.../xmlsec/encryption/impl/SpecifiedBuilder.java | 48 +++++
.../xmlsec/encryption/impl/SpecifiedImpl.java | 39 ++++
.../src/main/resources/encryption-config.xml | 85 ++++++++
.../encryption/impl/ConcatKDFParamsTest.java | 217 +++++++++++++++++++++
.../xmlsec/encryption/impl/DerivedKeyNameTest.java | 66 +++++++
.../xmlsec/encryption/impl/DerivedKeyTest.java | 119 +++++++++++
.../xmlsec/encryption/impl/IterationCountTest.java | 66 +++++++
.../encryption/impl/KeyDerivationMethodTest.java | 94 +++++++++
.../xmlsec/encryption/impl/KeyLengthTest.java | 66 +++++++
.../xmlsec/encryption/impl/MasterKeyNameTest.java | 66 +++++++
.../xmlsec/encryption/impl/OtherSourceTest.java | 99 ++++++++++
.../xmlsec/encryption/impl/PBKDF2ParamsTest.java | 85 ++++++++
.../opensaml/xmlsec/encryption/impl/PRFTest.java | 99 ++++++++++
.../opensaml/xmlsec/encryption/impl/SaltTest.java | 79 ++++++++
.../xmlsec/encryption/impl/SpecifiedTest.java | 66 +++++++
.../src/test/resources/logback-test.xml | 5 +
.../xmlsec/encryption/impl/ConcatKDFParams.xml | 7 +
.../impl/ConcatKDFParamsChildElements.xml | 11 ++
.../opensaml/xmlsec/encryption/impl/DerivedKey.xml | 4 +
.../encryption/impl/DerivedKeyChildElements.xml | 12 ++
.../xmlsec/encryption/impl/DerivedKeyName.xml | 2 +
.../impl/DerivedKeyOptionalAttributes.xml | 4 +
.../xmlsec/encryption/impl/IterationCount.xml | 2 +
.../xmlsec/encryption/impl/KeyDerivationMethod.xml | 4 +
.../impl/KeyDerivationMethodChildElements.xml | 6 +
.../opensaml/xmlsec/encryption/impl/KeyLength.xml | 2 +
.../xmlsec/encryption/impl/MasterKeyName.xml | 2 +
.../xmlsec/encryption/impl/OtherSource.xml | 2 +
.../encryption/impl/OtherSourceChildElements.xml | 4 +
.../xmlsec/encryption/impl/PBKDF2Params.xml | 2 +
.../encryption/impl/PBKDF2ParamsChildElements.xml | 7 +
.../org/opensaml/xmlsec/encryption/impl/PRF.xml | 2 +
.../xmlsec/encryption/impl/PRFChildElements.xml | 4 +
.../org/opensaml/xmlsec/encryption/impl/Salt.xml | 2 +
.../xmlsec/encryption/impl/SaltChildElements.xml | 5 +
.../opensaml/xmlsec/encryption/impl/Specified.xml | 2 +
84 files changed, 4276 insertions(+)
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/ConcatKDFParams.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/ConcatKDFParams.java
new file mode 100644
index 000000000..9d5672227
--- /dev/null
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/ConcatKDFParams.java
@@ -0,0 +1,216 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption;
+
+import javax.annotation.Nullable;
+import javax.xml.namespace.QName;
+
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+import org.opensaml.xmlsec.signature.DigestMethod;
+
+/**
+ * XMLObject representing XML Encryption 1.1 ConcatKDFParams element.
+ */
+public interface ConcatKDFParams extends XMLObject {
+
+ /** Element local name. */
+ static final String DEFAULT_ELEMENT_LOCAL_NAME = "ConcatKDFParams";
+
+ /** Default element name. */
+ static final QName DEFAULT_ELEMENT_NAME = new QName(EncryptionConstants.XMLENC11_NS, DEFAULT_ELEMENT_LOCAL_NAME,
+ EncryptionConstants.XMLENC11_PREFIX);
+
+ /** Local name of the XSI type. */
+ static final String TYPE_LOCAL_NAME = "ConcatKDFParamsType";
+
+ /** QName of the XSI type. */
+ static final QName TYPE_NAME =
+ new QName(EncryptionConstants.XMLENC11_NS, TYPE_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+ /** AlgorithmID attribute name. */
+ static final String ALGORITHM_ID_ATTRIBUTE_NAME = "AlgorithmID";
+
+ /** PartyUInfo attribute name. */
+ static final String PARTY_U_INFO_ATTRIBUTE_NAME = "PartyUInfo";
+
+ /** PartyVInfo attribute name. */
+ static final String PARTY_V_INFO_ATTRIBUTE_NAME = "PartyVInfo";
+
+ /** SuppPubInfo attribute name. */
+ static final String SUPP_PUB_INFO_ATTRIBUTE_NAME = "SuppPubInfo";
+
+ /** SuppPrivInfo attribute name. */
+ static final String SUPP_PRIV_INFO_ATTRIBUTE_NAME = "SuppPrivInfo";
+
+ /**
+ * Gets the digest method.
+ *
+ * @return the digest method
+ */
+ @Nullable DigestMethod getDigestMethod();
+
+ /**
+ * Sets the digest method.
+ *
+ * @param digestMethod the digest method
+ */
+ void setDigestMethod(@Nullable final DigestMethod digestMethod);
+
+ /**
+ * Gets the AlgorithmID attribute in its padded hex-encoded form.
+ *
+ * @return the {@code AlgorithmID} attribute
+ */
+ @Nullable String getAlgorithmID();
+
+ /**
+ * Sets the AlgorithmID attribute.
+ *
+ * @param algorithmID the AlgorithmID attribute in its padded hex-encoded form
+ */
+ void setAlgorithmID(@Nullable final String algorithmID);
+
+ /**
+ * Gets the AlgorithmID attribute in its padded byte array form.
+ *
+ * @return the {@code AlgorithmID} attribute
+ */
+ @Nullable byte[] getAlgorithmIDBytes();
+
+ /**
+ * Sets the AlgorithmID attribute.
+ *
+ * @param algorithmID the AlgorithmID attribute in its padded byte array form
+ */
+ void setAlgorithmIDBytes(@Nullable final byte[] algorithmID);
+
+ /**
+ * Gets the PartyUInfo attribute in its padded hex-encoded form.
+ *
+ * @return the PartyUInfo attribute
+ */
+ @Nullable String getPartyUInfo();
+
+ /**
+ * Sets the PartyUInfo attribute.
+ *
+ * @param partyUInfo PartyUInfo attribute in its padded hex-encoded form
+ */
+ void setPartyUInfo(@Nullable final String partyUInfo);
+
+
+ /**
+ * Gets the PartyUInfo attribute in its padded byte array form.
+ *
+ * @return the PartyUInfo attribute
+ */
+ @Nullable byte[] getPartyUInfoBytes();
+
+ /**
+ * Sets the PartyUInfo attribute.
+ *
+ * @param partyUInfo PartyUInfo attribute in its padded byte array form
+ */
+ void setPartyUInfoBytes(@Nullable final byte[] partyUInfo);
+
+ /**
+ * Gets the PartyVInfo attribute in its padded hex-encoded form.
+ *
+ * @return the PartyVInfo attribute
+ */
+ @Nullable String getPartyVInfo();
+
+ /**
+ * Sets the PartyVInfo attribute.
+ *
+ * @param partyVInfo PartyVInfo attribute in its padded hex-encoded form
+ */
+ void setPartyVInfo(@Nullable final String partyVInfo);
+
+ /**
+ * Gets the PartyVInfo attribute in its padded byte array form.
+ *
+ * @return the PartyVInfo attribute
+ */
+ @Nullable byte[] getPartyVInfoBytes();
+
+ /**
+ * Sets the PartyVInfo attribute.
+ *
+ * @param partyVInfo PartyVInfo attribute in its padded byte array form
+ */
+ void setPartyVInfoBytes(@Nullable final byte[] partyVInfo);
+
+ /**
+ * Gets the SuppPubInfo attribute in its padded hex-encoded form.
+ *
+ * @return the SuppPubInfo attribute
+ */
+ @Nullable String getSuppPubInfo();
+
+ /**
+ * Sets the SuppPubInfo attribute.
+ *
+ * @param suppPubInfo SuppPubInfo attribute in its padded hex-encoded form
+ */
+ void setSuppPubInfo(@Nullable final String suppPubInfo);
+
+ /**
+ * Gets the SuppPubInfo attribute in its padded byte array form.
+ *
+ * @return the SuppPubInfo attribute
+ */
+ @Nullable byte[] getSuppPubInfoBytes();
+
+ /**
+ * Sets the SuppPubInfo attribute.
+ *
+ * @param suppPubInfo SuppPubInfo attribute in its padded byte array form
+ */
+ void setSuppPubInfoBytes(@Nullable final byte[] suppPubInfo);
+
+ /**
+ * Gets the SuppPrivInfo attribute in its padded hex-encoded form.
+ *
+ * @return the SuppPrivInfo attribute
+ */
+ @Nullable String getSuppPrivInfo();
+
+ /**
+ * Sets the SuppPrivInfo attribute.
+ *
+ * @param suppPrivInfo SuppPrivInfo attribute in its padded hex-encoded form
+ */
+ void setSuppPrivInfo(@Nullable final String suppPrivInfo);
+
+ /**
+ * Gets the SuppPrivInfo attribute in its padded byte array form.
+ *
+ * @return the SuppPrivInfo attribute
+ */
+ @Nullable byte[] getSuppPrivInfoBytes();
+
+ /**
+ * Sets the SuppPrivInfo attribute.
+ *
+ * @param suppPrivInfo SuppPrivInfo attribute in its padded byte array form
+ */
+ void setSuppPrivInfoBytes(@Nullable final byte[] suppPrivInfo);
+
+}
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/DerivedKey.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/DerivedKey.java
new file mode 100644
index 000000000..3d202565c
--- /dev/null
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/DerivedKey.java
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption;
+
+import javax.annotation.Nullable;
+import javax.xml.namespace.QName;
+
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * XMLObject representing XML Encryption 1.1 DerivedKey element.
+ */
+public interface DerivedKey extends XMLObject {
+
+ /** Element local name. */
+ public static final String DEFAULT_ELEMENT_LOCAL_NAME = "DerivedKey";
+
+ /** Default element name. */
+ public static final QName DEFAULT_ELEMENT_NAME =
+ new QName(EncryptionConstants.XMLENC11_NS, DEFAULT_ELEMENT_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+ /** Local name of the XSI type. */
+ public static final String TYPE_LOCAL_NAME = "DerivedKeyType";
+
+ /** QName of the XSI type. */
+ public static final QName TYPE_NAME =
+ new QName(EncryptionConstants.XMLENC11_NS, TYPE_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+ /** Recipient attribute name. */
+ public static final String RECIPIENT_ATTRIBUTE_NAME = "Recipient";
+
+ /** Algorithm attribute name. */
+ public static final String ID_ATTRIBUTE_NAME = "Id";
+
+ /** Algorithm attribute name. */
+ public static final String TYPE_ATTRIBUTE_NAME = "Type";
+
+ /**
+ * Get the KeyDerivationMethod child element.
+ *
+ * @return the element
+ */
+ @Nullable public KeyDerivationMethod getKeyDerivationMethod();
+
+ /**
+ * Set the KeyDerivationMethod child element.
+ *
+ * @param method the key derivation method
+ */
+ public void setKeyDerivationMethod(@Nullable final KeyDerivationMethod method);
+
+ /**
+ * Get the ReferenceList child element.
+ *
+ * @return the element
+ */
+ @Nullable public ReferenceList getReferenceList();
+
+ /**
+ * Set the ReferenceList child element.
+ *
+ * @param referenceList the list
+ */
+ public void setReferenceList(@Nullable final ReferenceList referenceList);
+
+ /**
+ * Get the DerivedKeyName child element.
+ *
+ * @return the element
+ */
+ @Nullable public DerivedKeyName getDerivedKeyName();
+
+ /**
+ * Set the DerivedKeyName child element.
+ *
+ * @param name the key name
+ */
+ public void setDerivedKeyName(@Nullable final DerivedKeyName name);
+
+ /**
+ * Get the MasterKeyName child element.
+ *
+ * @return the element
+ */
+ @Nullable public MasterKeyName getMasterKeyName();
+
+ /**
+ * Set the MasterKeyName child element.
+ *
+ * @param name the key name
+ */
+ public void setMasterKeyName(@Nullable final MasterKeyName name);
+
+ /**
+ * Gets the Recipient attribute.
+ *
+ * @return the recipient
+ */
+ @Nullable String getRecipient();
+
+ /**
+ * Sets the Recipient attribute.
+ *
+ * @param recipient the recipient
+ */
+ void setRecipient(@Nullable final String recipient);
+
+ /**
+ * Gets the Id attribute.
+ *
+ * @return the id
+ */
+ @Nullable String getId();
+
+ /**
+ * Sets the Id attribute.
+ *
+ * @param id the id
+ */
+ void setId(@Nullable final String id);
+
+ /**
+ * Gets the Type attribute.
+ *
+ * @return the type
+ */
+ @Nullable String getType();
+
+ /**
+ * Sets the Type attribute.
+ *
+ * @param type the type
+ */
+ void setType(@Nullable final String type);
+
+}
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/DerivedKeyName.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/DerivedKeyName.java
new file mode 100644
index 000000000..2f1d032c3
--- /dev/null
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/DerivedKeyName.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.core.xml.schema.XSString;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * XMLObject representing XML Encryption 1.1 DerivedKeyName element.
+ */
+public interface DerivedKeyName extends XSString {
+
+ /** Element local name. */
+ public static final String DEFAULT_ELEMENT_LOCAL_NAME = "DerivedKeyName";
+
+ /** Default element name. */
+ public static final QName DEFAULT_ELEMENT_NAME =
+ new QName(EncryptionConstants.XMLENC11_NS, DEFAULT_ELEMENT_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+}
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/IterationCount.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/IterationCount.java
new file mode 100644
index 000000000..f8eb8934f
--- /dev/null
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/IterationCount.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.core.xml.schema.XSInteger;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * XMLObject representing XML Encryption 1.1 IterationCount element.
+ */
+public interface IterationCount extends XSInteger {
+
+ /** Element local name. */
+ public static final String DEFAULT_ELEMENT_LOCAL_NAME = "IterationCount";
+
+ /** Default element name. */
+ public static final QName DEFAULT_ELEMENT_NAME = new QName(EncryptionConstants.XMLENC11_NS,
+ DEFAULT_ELEMENT_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+}
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/KeyDerivationMethod.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/KeyDerivationMethod.java
new file mode 100644
index 000000000..f14f7cdbf
--- /dev/null
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/KeyDerivationMethod.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption;
+
+import javax.annotation.Nullable;
+import javax.xml.namespace.QName;
+
+import org.opensaml.core.xml.ElementExtensibleXMLObject;
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * XMLObject representing XML Encryption 1.1 KeyDerivationMethod element.
+ */
+public interface KeyDerivationMethod extends XMLObject, ElementExtensibleXMLObject {
+
+ /** Element local name. */
+ public static final String DEFAULT_ELEMENT_LOCAL_NAME = "KeyDerivationMethod";
+
+ /** Default element name. */
+ public static final QName DEFAULT_ELEMENT_NAME =
+ new QName(EncryptionConstants.XMLENC11_NS, DEFAULT_ELEMENT_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+ /** Local name of the XSI type. */
+ public static final String TYPE_LOCAL_NAME = "KeyDerivationMethodType";
+
+ /** QName of the XSI type. */
+ public static final QName TYPE_NAME =
+ new QName(EncryptionConstants.XMLENC11_NS, TYPE_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+ /** Algorithm attribute name. */
+ public static final String ALGORITHM_ATTRIBUTE_NAME = "Algorithm";
+
+ /**
+ * Gets the algorithm URI attribute.
+ *
+ * @return the algorithm
+ */
+ @Nullable String getAlgorithm();
+
+ /**
+ * Sets the algorithm URI attribute.
+ *
+ * @param algorithm the algorithm URI
+ */
+ void setAlgorithm(@Nullable final String algorithm);
+
+}
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/KeyLength.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/KeyLength.java
new file mode 100644
index 000000000..65659dec1
--- /dev/null
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/KeyLength.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.core.xml.schema.XSInteger;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * XMLObject representing XML Encryption 1.1 IterationCount KeyLength element.
+ */
+public interface KeyLength extends XSInteger {
+
+ /** Element local name. */
+ public static final String DEFAULT_ELEMENT_LOCAL_NAME = "KeyLength";
+
+ /** Default element name. */
+ public static final QName DEFAULT_ELEMENT_NAME = new QName(EncryptionConstants.XMLENC11_NS,
+ DEFAULT_ELEMENT_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+}
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/MasterKeyName.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/MasterKeyName.java
new file mode 100644
index 000000000..f03435390
--- /dev/null
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/MasterKeyName.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.core.xml.schema.XSString;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * XMLObject representing XML Encryption 1.1 MasterKeyName element.
+ */
+public interface MasterKeyName extends XSString {
+
+ /** Element local name. */
+ public static final String DEFAULT_ELEMENT_LOCAL_NAME = "MasterKeyName";
+
+ /** Default element name. */
+ public static final QName DEFAULT_ELEMENT_NAME =
+ new QName(EncryptionConstants.XMLENC11_NS, DEFAULT_ELEMENT_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+}
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/OtherSource.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/OtherSource.java
new file mode 100644
index 000000000..699556bdd
--- /dev/null
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/OtherSource.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * XMLObject representing XML Encryption 1.1 OtherSource element.
+ */
+public interface OtherSource extends AlgorithmIdentifierType {
+
+ /** Element local name. */
+ public static final String DEFAULT_ELEMENT_LOCAL_NAME = "OtherSource";
+
+ /** Default element name. */
+ public static final QName DEFAULT_ELEMENT_NAME = new QName(EncryptionConstants.XMLENC11_NS,
+ DEFAULT_ELEMENT_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+}
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/PBKDF2Params.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/PBKDF2Params.java
new file mode 100644
index 000000000..0034bf6dd
--- /dev/null
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/PBKDF2Params.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption;
+
+import javax.annotation.Nullable;
+import javax.xml.namespace.QName;
+
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * XMLObject representing XML Encryption 1.1 PBKDF2-params element.
+ */
+public interface PBKDF2Params extends XMLObject {
+
+ /** Element local name. */
+ public static final String DEFAULT_ELEMENT_LOCAL_NAME = "PBKDF2-params";
+
+ /** Default element name. */
+ public static final QName DEFAULT_ELEMENT_NAME =
+ new QName(EncryptionConstants.XMLENC11_NS, DEFAULT_ELEMENT_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+ /** Local name of the XSI type. */
+ public static final String TYPE_LOCAL_NAME = "PBKDF2ParameterType";
+
+ /** QName of the XSI type. */
+ public static final QName TYPE_NAME =
+ new QName(EncryptionConstants.XMLENC11_NS, TYPE_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+ /**
+ * Get the Salt child element.
+ *
+ * @return the element
+ */
+ @Nullable public Salt getSalt();
+
+ /**
+ * Set the Salt child element.
+ *
+ * @param salt the salt
+ */
+ public void setSalt(@Nullable final Salt salt);
+
+ /**
+ * Get the IterationCount child element.
+ *
+ * @return the element
+ */
+ @Nullable public IterationCount getIterationCount();
+
+ /**
+ * Set the IterationCount child element.
+ *
+ * @param count
+ */
+ public void setIterationCount(@Nullable final IterationCount count);
+
+ /**
+ * Get the KeyLength child element.
+ *
+ * @return the element
+ */
+ @Nullable public KeyLength getKeyLength();
+
+ /**
+ * Set the KeyLength child element.
+ *
+ * @param length
+ */
+ public void setKeyLength(@Nullable final KeyLength length);
+
+ /**
+ * Get the PRF child element.
+ *
+ * @return the element
+ */
+ @Nullable public PRF getPRF();
+
+ /**
+ * Set the PRF child element.
+ *
+ * @param prf
+ */
+ public void setPRF(@Nullable final PRF prf);
+
+}
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/PRF.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/PRF.java
new file mode 100644
index 000000000..3001acc38
--- /dev/null
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/PRF.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * XMLObject representing XML Encryption, version 1.1, PRF element.
+ */
+public interface PRF extends AlgorithmIdentifierType {
+
+ /** Element local name. */
+ public static final String DEFAULT_ELEMENT_LOCAL_NAME = "PRF";
+
+ /** Default element name. */
+ public static final QName DEFAULT_ELEMENT_NAME = new QName(EncryptionConstants.XMLENC11_NS,
+ DEFAULT_ELEMENT_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+ /** Local name of the XSI type. */
+ public static final String TYPE_LOCAL_NAME = "PRFAlgorithmIdentifierType";
+
+ /** QName of the XSI type. */
+ public static final QName TYPE_NAME = new QName(EncryptionConstants.XMLENC11_NS, TYPE_LOCAL_NAME,
+ EncryptionConstants.XMLENC11_PREFIX);
+
+}
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/Salt.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/Salt.java
new file mode 100644
index 000000000..abbea0214
--- /dev/null
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/Salt.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption;
+
+import javax.annotation.Nullable;
+import javax.xml.namespace.QName;
+
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * XMLObject representing XML Encryption 1.1 Salt element.
+ */
+public interface Salt extends XMLObject {
+
+ /** Element local name. */
+ public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Salt";
+
+ /** Default element name. */
+ public static final QName DEFAULT_ELEMENT_NAME =
+ new QName(EncryptionConstants.XMLENC11_NS, DEFAULT_ELEMENT_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+ /**
+ * Get the Specified child element.
+ *
+ * @return the element
+ */
+ @Nullable public Specified getSpecified();
+
+ /**
+ * Set the Specified child element.
+ *
+ * @param specified
+ */
+ public void setSpecified(@Nullable final Specified specified);
+
+ /**
+ * Get the OtherSource child element.
+ *
+ * @return the element
+ */
+ @Nullable public OtherSource getOtherSource();
+
+ /**
+ * Set the OtherSource child element.
+ *
+ * @param source value
+ */
+ public void setOtherSource(@Nullable final OtherSource source);
+
+}
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/Specified.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/Specified.java
new file mode 100644
index 000000000..8cb8e5993
--- /dev/null
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/encryption/Specified.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.core.xml.schema.XSBase64Binary;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * XMLObject representing XML Encryption 1.1 Specified element.
+ */
+public interface Specified extends XSBase64Binary {
+
+ /** Element local name. */
+ public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Specified";
+
+ /** Default element name. */
+ public static final QName DEFAULT_ELEMENT_NAME =
+ new QName(EncryptionConstants.XMLENC11_NS, DEFAULT_ELEMENT_LOCAL_NAME, EncryptionConstants.XMLENC11_PREFIX);
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsBuilder.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsBuilder.java
new file mode 100644
index 000000000..50b117d66
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsBuilder.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.AbstractXMLObjectBuilder;
+import org.opensaml.xmlsec.encryption.ConcatKDFParams;
+import org.opensaml.xmlsec.encryption.XMLEncryptionBuilder;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * Builder of {@link org.opensaml.xmlsec.encryption.ConcatKDFParams}.
+ */
+public class ConcatKDFParamsBuilder extends AbstractXMLObjectBuilder<ConcatKDFParams>
+ implements XMLEncryptionBuilder<ConcatKDFParams> {
+
+ /**
+ * Constructor.
+ */
+ public ConcatKDFParamsBuilder() {
+ }
+
+ /** {@inheritDoc} */
+ public ConcatKDFParams buildObject(final String namespaceURI, final String localName,
+ final String namespacePrefix) {
+ return new ConcatKDFParamsImpl(namespaceURI, localName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ public ConcatKDFParams buildObject() {
+ return buildObject(EncryptionConstants.XMLENC11_NS, ConcatKDFParams.DEFAULT_ELEMENT_LOCAL_NAME,
+ EncryptionConstants.XMLENC11_PREFIX);
+ }
+
+}
\ No newline at end of file
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsImpl.java
new file mode 100644
index 000000000..7af7a7338
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsImpl.java
@@ -0,0 +1,215 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.binary.Hex;
+import org.opensaml.core.xml.AbstractXMLObject;
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.XMLRuntimeException;
+import org.opensaml.xmlsec.encryption.ConcatKDFParams;
+import org.opensaml.xmlsec.signature.DigestMethod;
+
+/**
+ * Concrete implementation of {@link org.opensaml.xmlsec.encryption.ConcatKDFParams}.
+ */
+public class ConcatKDFParamsImpl extends AbstractXMLObject implements ConcatKDFParams {
+
+ /** DigestMethod. */
+ private DigestMethod digestMethod;
+
+ /** AlgorithmID. */
+ @Nullable private String algorithmID;
+
+ /** PartyUInfo. */
+ @Nullable private String partyUInfo;
+
+ /** PartyVInfo. */
+ @Nullable private String partyVInfo;
+
+ /** SuppPubInfo. */
+ @Nullable private String suppPubInfo;
+
+ /** SuppPrivInfo. */
+ @Nullable private String suppPrivInfo;
+
+ /**
+ * Constructor.
+ *
+ * @param namespaceURI namespace URI
+ * @param elementLocalName element local name
+ * @param namespacePrefix namespace prefix
+ */
+ protected ConcatKDFParamsImpl(final String namespaceURI, final String elementLocalName,
+ final String namespacePrefix) {
+ super(namespaceURI, elementLocalName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public DigestMethod getDigestMethod() {
+ return digestMethod;
+ }
+
+ /** {@inheritDoc} */
+ public void setDigestMethod(@Nullable final DigestMethod newDigestMethod) {
+ digestMethod = prepareForAssignment(digestMethod, newDigestMethod);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public String getAlgorithmID() {
+ return algorithmID;
+ }
+
+ /** {@inheritDoc} */
+ public void setAlgorithmID(@Nullable final String newAlgorithmID) {
+ algorithmID = prepareForAssignment(algorithmID, newAlgorithmID);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public byte[] getAlgorithmIDBytes() {
+ try {
+ return algorithmID == null ? null : Hex.decodeHex(algorithmID);
+ } catch (final DecoderException e) {
+ throw new XMLRuntimeException(e);
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void setAlgorithmIDBytes(@Nullable final byte[] newAlgorithmID) {
+ setAlgorithmID(newAlgorithmID == null ? null : Hex.encodeHexString(newAlgorithmID, false));
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public String getPartyUInfo() {
+ return partyUInfo;
+ }
+
+ /** {@inheritDoc} */
+ public void setPartyUInfo(@Nullable final String newPartyUInfo) {
+ partyUInfo = prepareForAssignment(partyUInfo, newPartyUInfo);
+ }
+
+ /** {@inheritDoc}
+ * @throws DecoderException */
+ @Nullable public byte[] getPartyUInfoBytes() {
+ try {
+ return partyUInfo == null ? null : Hex.decodeHex(partyUInfo);
+ } catch (final DecoderException e) {
+ throw new XMLRuntimeException(e);
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void setPartyUInfoBytes(@Nullable final byte[] newPartyUInfo) {
+ setPartyUInfo(newPartyUInfo == null ? null : Hex.encodeHexString(newPartyUInfo, false));
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public String getPartyVInfo() {
+ return partyVInfo;
+ }
+
+ /** {@inheritDoc} */
+ public void setPartyVInfo(@Nullable final String newPartyVInfo) {
+ partyVInfo = prepareForAssignment(partyVInfo, newPartyVInfo);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public byte[] getPartyVInfoBytes() {
+ try {
+ return partyVInfo == null ? null : Hex.decodeHex(partyVInfo);
+ } catch (final DecoderException e) {
+ throw new XMLRuntimeException(e);
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void setPartyVInfoBytes(@Nullable final byte[] newPartyVInfo) {
+ setPartyVInfo(newPartyVInfo == null ? null : Hex.encodeHexString(newPartyVInfo, false));
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public String getSuppPubInfo() {
+ return suppPubInfo;
+ }
+
+ /** {@inheritDoc} */
+ public void setSuppPubInfo(@Nullable final String newSuppPubInfo) {
+ suppPubInfo = prepareForAssignment(suppPubInfo, newSuppPubInfo);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public byte[] getSuppPubInfoBytes() {
+ try {
+ return suppPubInfo == null ? null : Hex.decodeHex(suppPubInfo);
+ } catch (final DecoderException e) {
+ throw new XMLRuntimeException(e);
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void setSuppPubInfoBytes(@Nullable final byte[] newSuppPubInfo) {
+ setSuppPubInfo(newSuppPubInfo == null ? null : Hex.encodeHexString(newSuppPubInfo, false));
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public String getSuppPrivInfo() {
+ return suppPrivInfo;
+ }
+
+ /** {@inheritDoc} */
+ public void setSuppPrivInfo(@Nullable final String newSuppPrivInfo) {
+ suppPrivInfo = prepareForAssignment(suppPrivInfo, newSuppPrivInfo);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public byte[] getSuppPrivInfoBytes() {
+ try {
+ return suppPrivInfo == null ? null : Hex.decodeHex(suppPrivInfo);
+ } catch (final DecoderException e) {
+ throw new XMLRuntimeException(e);
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void setSuppPrivInfoBytes(@Nullable final byte[] newSuppPrivInfo) {
+ setSuppPrivInfo(newSuppPrivInfo == null ? null : Hex.encodeHexString(newSuppPrivInfo, false));
+ }
+
+ /** {@inheritDoc} */
+ public List<XMLObject> getOrderedChildren() {
+ final ArrayList<XMLObject> children = new ArrayList<>();
+
+ if (digestMethod != null) {
+ children.add(digestMethod);
+ }
+
+ if (children.size() == 0) {
+ return null;
+ }
+
+ return Collections.unmodifiableList(children);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsMarshaller.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsMarshaller.java
new file mode 100644
index 000000000..ad65fe344
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsMarshaller.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.io.MarshallingException;
+import org.opensaml.xmlsec.encryption.ConcatKDFParams;
+import org.w3c.dom.Element;
+
+/**
+ * A thread-safe Marshaller for {@link org.opensaml.xmlsec.encryption.ConcatKDFParams} objects.
+ */
+public class ConcatKDFParamsMarshaller extends AbstractXMLEncryptionMarshaller {
+
+ /** {@inheritDoc} */
+ protected void marshallAttributes(final XMLObject xmlObject, final Element domElement) throws MarshallingException {
+ final ConcatKDFParams params = (ConcatKDFParams) xmlObject;
+
+ if (params.getAlgorithmID() != null) {
+ domElement.setAttributeNS(null, ConcatKDFParams.ALGORITHM_ID_ATTRIBUTE_NAME, params.getAlgorithmID());
+ }
+ if (params.getPartyUInfo() != null) {
+ domElement.setAttributeNS(null, ConcatKDFParams.PARTY_U_INFO_ATTRIBUTE_NAME, params.getPartyUInfo());
+ }
+ if (params.getPartyVInfo() != null) {
+ domElement.setAttributeNS(null, ConcatKDFParams.PARTY_V_INFO_ATTRIBUTE_NAME, params.getPartyVInfo());
+ }
+ if (params.getSuppPubInfo() != null) {
+ domElement.setAttributeNS(null, ConcatKDFParams.SUPP_PUB_INFO_ATTRIBUTE_NAME, params.getSuppPubInfo());
+ }
+ if (params.getSuppPrivInfo() != null) {
+ domElement.setAttributeNS(null, ConcatKDFParams.SUPP_PRIV_INFO_ATTRIBUTE_NAME, params.getSuppPrivInfo());
+ }
+
+ super.marshallAttributes(xmlObject, domElement);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsUnmarshaller.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsUnmarshaller.java
new file mode 100644
index 000000000..da211b896
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsUnmarshaller.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.io.UnmarshallingException;
+import org.opensaml.xmlsec.encryption.ConcatKDFParams;
+import org.opensaml.xmlsec.signature.DigestMethod;
+import org.w3c.dom.Attr;
+
+/**
+ * A thread-safe Unmarshaller for {@link org.opensaml.xmlsec.encryption.ConcatKDFParams} objects.
+ */
+public class ConcatKDFParamsUnmarshaller extends AbstractXMLEncryptionUnmarshaller {
+
+ /** {@inheritDoc} */
+ protected void processAttribute(final XMLObject xmlObject, final Attr attribute) throws UnmarshallingException {
+ final ConcatKDFParams params = (ConcatKDFParams) xmlObject;
+
+ if (attribute.getLocalName().equals(ConcatKDFParams.ALGORITHM_ID_ATTRIBUTE_NAME)) {
+ params.setAlgorithmID(attribute.getValue());
+ } else if (attribute.getLocalName().equals(ConcatKDFParams.PARTY_U_INFO_ATTRIBUTE_NAME)) {
+ params.setPartyUInfo(attribute.getValue());
+ } else if (attribute.getLocalName().equals(ConcatKDFParams.PARTY_V_INFO_ATTRIBUTE_NAME)) {
+ params.setPartyVInfo(attribute.getValue());
+ } else if (attribute.getLocalName().equals(ConcatKDFParams.SUPP_PUB_INFO_ATTRIBUTE_NAME)) {
+ params.setSuppPubInfo(attribute.getValue());
+ } else if (attribute.getLocalName().equals(ConcatKDFParams.SUPP_PRIV_INFO_ATTRIBUTE_NAME)) {
+ params.setSuppPrivInfo(attribute.getValue());
+ } else {
+ super.processAttribute(xmlObject, attribute);
+ }
+ }
+
+ /** {@inheritDoc} */
+ protected void processChildElement(final XMLObject parentXMLObject, final XMLObject childXMLObject)
+ throws UnmarshallingException {
+ final ConcatKDFParams params = (ConcatKDFParams) parentXMLObject;
+
+ if (childXMLObject instanceof DigestMethod) {
+ params.setDigestMethod((DigestMethod) childXMLObject);
+ } else {
+ super.processChildElement(parentXMLObject, childXMLObject);
+ }
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyBuilder.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyBuilder.java
new file mode 100644
index 000000000..726ee0fb0
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyBuilder.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.AbstractXMLObjectBuilder;
+import org.opensaml.xmlsec.encryption.DerivedKey;
+import org.opensaml.xmlsec.encryption.XMLEncryptionBuilder;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * Builder of {@link org.opensaml.xmlsec.encryption.CarriedKeyName}.
+ */
+public class DerivedKeyBuilder extends AbstractXMLObjectBuilder<DerivedKey> implements
+ XMLEncryptionBuilder<DerivedKey> {
+
+ /** Constructor. */
+ public DerivedKeyBuilder() {
+ }
+
+ /** {@inheritDoc} */
+ public DerivedKey buildObject(final String namespaceURI, final String localName, final String namespacePrefix) {
+ return new DerivedKeyImpl(namespaceURI, localName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ public DerivedKey buildObject() {
+ return buildObject(EncryptionConstants.XMLENC11_NS, DerivedKey.DEFAULT_ELEMENT_LOCAL_NAME,
+ EncryptionConstants.XMLENC11_PREFIX);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyImpl.java
new file mode 100644
index 000000000..b05dee27e
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyImpl.java
@@ -0,0 +1,171 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+import org.opensaml.core.xml.AbstractXMLObject;
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.xmlsec.encryption.DerivedKey;
+import org.opensaml.xmlsec.encryption.DerivedKeyName;
+import org.opensaml.xmlsec.encryption.KeyDerivationMethod;
+import org.opensaml.xmlsec.encryption.MasterKeyName;
+import org.opensaml.xmlsec.encryption.ReferenceList;
+
+/**
+ * Concrete implementation of {@link org.opensaml.xmlsec.encryption.DerivedKey}.
+ */
+public class DerivedKeyImpl extends AbstractXMLObject implements DerivedKey {
+
+ /** KeyDerivationMethod child element. */
+ @Nullable private KeyDerivationMethod keyDerivationMethod;
+
+ /** ReferenceList child element. */
+ @Nullable private ReferenceList referenceList;
+
+ /** DerivedKeyName child element. */
+ @Nullable private DerivedKeyName derivedKeyName;
+
+ /** MasterKeyName child element. */
+ @Nullable private MasterKeyName masterKeyName;
+
+ /** Recipient attribute. */
+ @Nullable private String recipient;
+
+ /** Id attribute. */
+ @Nullable private String id;
+
+ /** Type attribute. */
+ @Nullable private String type;
+
+ /**
+ * Constructor.
+ *
+ * @param namespaceURI namespace URI
+ * @param elementLocalName local name
+ * @param namespacePrefix namespace prefix
+ */
+ protected DerivedKeyImpl(final String namespaceURI, final String elementLocalName,
+ final String namespacePrefix) {
+ super(namespaceURI, elementLocalName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public KeyDerivationMethod getKeyDerivationMethod() {
+ return keyDerivationMethod;
+ }
+
+ /** {@inheritDoc} */
+ public void setKeyDerivationMethod(@Nullable final KeyDerivationMethod method) {
+ keyDerivationMethod = prepareForAssignment(keyDerivationMethod, method);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public ReferenceList getReferenceList() {
+ return referenceList;
+ }
+
+ /** {@inheritDoc} */
+ public void setReferenceList(@Nullable final ReferenceList newReferenceList) {
+ referenceList = prepareForAssignment(referenceList, newReferenceList);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public DerivedKeyName getDerivedKeyName() {
+ return derivedKeyName;
+ }
+
+ /** {@inheritDoc} */
+ public void setDerivedKeyName(@Nullable final DerivedKeyName name) {
+ derivedKeyName = prepareForAssignment(derivedKeyName, name);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public MasterKeyName getMasterKeyName() {
+ return masterKeyName;
+ }
+
+ /** {@inheritDoc} */
+ public void setMasterKeyName(@Nullable final MasterKeyName name) {
+ masterKeyName = prepareForAssignment(masterKeyName, name);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public String getRecipient() {
+ return recipient;
+ }
+
+ /** {@inheritDoc} */
+ public void setRecipient(@Nullable final String newRecipient) {
+ recipient = prepareForAssignment(recipient, newRecipient);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public String getId() {
+ return id;
+ }
+
+ /** {@inheritDoc} */
+ public void setId(@Nullable final String newId) {
+ final String oldID = id;
+ id = prepareForAssignment(id, newId);
+ registerOwnID(oldID, id);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public String getType() {
+ return type;
+ }
+
+ /** {@inheritDoc} */
+ public void setType(@Nullable final String newType) {
+ type = prepareForAssignment(type, newType);
+ }
+
+ /** {@inheritDoc} */
+ public List<XMLObject> getOrderedChildren() {
+ final ArrayList<XMLObject> children = new ArrayList<>();
+
+ if (keyDerivationMethod != null) {
+ children.add(keyDerivationMethod);
+ }
+
+ if (referenceList != null) {
+ children.add(referenceList);
+ }
+
+ if (derivedKeyName != null) {
+ children.add(derivedKeyName);
+ }
+
+ if (masterKeyName != null) {
+ children.add(masterKeyName);
+ }
+
+ if (children.size() == 0) {
+ return null;
+ }
+
+ return Collections.unmodifiableList(children);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyMarshaller.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyMarshaller.java
new file mode 100644
index 000000000..88ae0b118
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyMarshaller.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.io.MarshallingException;
+import org.opensaml.core.xml.util.XMLObjectSupport;
+import org.opensaml.xmlsec.encryption.DerivedKey;
+import org.w3c.dom.Element;
+
+/**
+ * A thread-safe Marshaller for {@link org.opensaml.xmlsec.encryption.DerivedKey} objects.
+ */
+public class DerivedKeyMarshaller extends AbstractXMLEncryptionMarshaller {
+
+ /** {@inheritDoc} */
+ protected void marshallAttributes(final XMLObject xmlObject, final Element domElement) throws MarshallingException {
+ final DerivedKey dk = (DerivedKey) xmlObject;
+
+ if (dk.getRecipient() != null) {
+ domElement.setAttributeNS(null, DerivedKey.RECIPIENT_ATTRIBUTE_NAME, dk.getRecipient());
+ }
+ if (dk.getId() != null) {
+ domElement.setAttributeNS(null, DerivedKey.ID_ATTRIBUTE_NAME, dk.getId());
+ }
+ if (dk.getType() != null) {
+ domElement.setAttributeNS(null, DerivedKey.TYPE_ATTRIBUTE_NAME, dk.getType());
+ }
+
+ super.marshallAttributes(xmlObject, domElement);
+ }
+
+ /** {@inheritDoc} */
+ protected void marshallAttributeIDness(final XMLObject xmlObject, final Element domElement)
+ throws MarshallingException {
+
+ XMLObjectSupport.marshallAttributeIDness(null, DerivedKey.ID_ATTRIBUTE_NAME, domElement, true);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyNameBuilder.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyNameBuilder.java
new file mode 100644
index 000000000..fec5d9e49
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyNameBuilder.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.AbstractXMLObjectBuilder;
+import org.opensaml.xmlsec.encryption.CarriedKeyName;
+import org.opensaml.xmlsec.encryption.DerivedKeyName;
+import org.opensaml.xmlsec.encryption.XMLEncryptionBuilder;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * Builder of {@link org.opensaml.xmlsec.encryption.CarriedKeyName}.
+ */
+public class DerivedKeyNameBuilder extends AbstractXMLObjectBuilder<DerivedKeyName> implements
+ XMLEncryptionBuilder<DerivedKeyName> {
+
+ /** Constructor. */
+ public DerivedKeyNameBuilder() {
+ }
+
+ /** {@inheritDoc} */
+ public DerivedKeyName buildObject(final String namespaceURI, final String localName, final String namespacePrefix) {
+ return new DerivedKeyNameImpl(namespaceURI, localName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ public DerivedKeyName buildObject() {
+ return buildObject(EncryptionConstants.XMLENC11_NS, CarriedKeyName.DEFAULT_ELEMENT_LOCAL_NAME,
+ EncryptionConstants.XMLENC11_PREFIX);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyNameImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyNameImpl.java
new file mode 100644
index 000000000..bd97ab1a6
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyNameImpl.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.schema.impl.XSStringImpl;
+import org.opensaml.xmlsec.encryption.DerivedKeyName;
+
+/**
+ * Concrete implementation of {@link org.opensaml.xmlsec.encryption.DerivedKeyName}.
+ */
+public class DerivedKeyNameImpl extends XSStringImpl implements DerivedKeyName {
+
+ /**
+ * Constructor.
+ *
+ * @param namespaceURI namespace URI
+ * @param elementLocalName local name
+ * @param namespacePrefix namespace prefix
+ */
+ protected DerivedKeyNameImpl(final String namespaceURI, final String elementLocalName,
+ final String namespacePrefix) {
+ super(namespaceURI, elementLocalName, namespacePrefix);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyUnmarshaller.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyUnmarshaller.java
new file mode 100644
index 000000000..154230464
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyUnmarshaller.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.io.UnmarshallingException;
+import org.opensaml.xmlsec.encryption.DerivedKey;
+import org.opensaml.xmlsec.encryption.DerivedKeyName;
+import org.opensaml.xmlsec.encryption.KeyDerivationMethod;
+import org.opensaml.xmlsec.encryption.MasterKeyName;
+import org.opensaml.xmlsec.encryption.ReferenceList;
+import org.w3c.dom.Attr;
+
+/**
+ * A thread-safe Unmarshaller for {@link org.opensaml.xmlsec.encryption.DerivedKey} objects.
+ */
+public class DerivedKeyUnmarshaller extends AbstractXMLEncryptionUnmarshaller {
+
+ /** {@inheritDoc} */
+ protected void processAttribute(final XMLObject xmlObject, final Attr attribute) throws UnmarshallingException {
+ final DerivedKey dk = (DerivedKey) xmlObject;
+
+ if (attribute.getLocalName().equals(DerivedKey.ID_ATTRIBUTE_NAME)) {
+ dk.setId(attribute.getValue());
+ attribute.getOwnerElement().setIdAttributeNode(attribute, true);
+ } else if (attribute.getLocalName().equals(DerivedKey.RECIPIENT_ATTRIBUTE_NAME)) {
+ dk.setRecipient(attribute.getValue());
+ } else if (attribute.getLocalName().equals(DerivedKey.TYPE_ATTRIBUTE_NAME)) {
+ dk.setType(attribute.getValue());
+ } else {
+ super.processAttribute(xmlObject, attribute);
+ }
+ }
+
+ /** {@inheritDoc} */
+ protected void processChildElement(final XMLObject parentXMLObject, final XMLObject childXMLObject)
+ throws UnmarshallingException {
+ final DerivedKey dk = (DerivedKey) parentXMLObject;
+
+ if (childXMLObject instanceof KeyDerivationMethod) {
+ dk.setKeyDerivationMethod((KeyDerivationMethod) childXMLObject);
+ } else if (childXMLObject instanceof ReferenceList) {
+ dk.setReferenceList((ReferenceList) childXMLObject);
+ } else if (childXMLObject instanceof DerivedKeyName) {
+ dk.setDerivedKeyName((DerivedKeyName) childXMLObject);
+ } else if (childXMLObject instanceof MasterKeyName) {
+ dk.setMasterKeyName((MasterKeyName) childXMLObject);
+ } else {
+ super.processChildElement(parentXMLObject, childXMLObject);
+ }
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/IterationCountBuilder.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/IterationCountBuilder.java
new file mode 100644
index 000000000..24eca0d09
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/IterationCountBuilder.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.AbstractXMLObjectBuilder;
+import org.opensaml.xmlsec.encryption.IterationCount;
+import org.opensaml.xmlsec.encryption.XMLEncryptionBuilder;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * Builder of {@link org.opensaml.xmlsec.encryption.CarriedKeyName}.
+ */
+public class IterationCountBuilder extends AbstractXMLObjectBuilder<IterationCount> implements
+ XMLEncryptionBuilder<IterationCount> {
+
+ /** Constructor. */
+ public IterationCountBuilder() {
+ }
+
+ /** {@inheritDoc} */
+ public IterationCount buildObject(final String namespaceURI, final String localName, final String namespacePrefix) {
+ return new IterationCountImpl(namespaceURI, localName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ public IterationCount buildObject() {
+ return buildObject(EncryptionConstants.XMLENC11_NS, IterationCount.DEFAULT_ELEMENT_LOCAL_NAME,
+ EncryptionConstants.XMLENC11_PREFIX);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/IterationCountImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/IterationCountImpl.java
new file mode 100644
index 000000000..64930e2f7
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/IterationCountImpl.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.schema.impl.XSIntegerImpl;
+import org.opensaml.xmlsec.encryption.IterationCount;
+
+/**
+ * Concrete implementation of {@link org.opensaml.xmlsec.encryption.IterationCount}.
+ */
+public class IterationCountImpl extends XSIntegerImpl implements IterationCount {
+
+ /**
+ * Constructor.
+ *
+ * @param namespaceURI namespace URI
+ * @param elementLocalName local name
+ * @param namespacePrefix namespace prefix
+ */
+ protected IterationCountImpl(final String namespaceURI, final String elementLocalName,
+ final String namespacePrefix) {
+ super(namespaceURI, elementLocalName, namespacePrefix);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodBuilder.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodBuilder.java
new file mode 100644
index 000000000..e8e4c3ae9
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodBuilder.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.AbstractXMLObjectBuilder;
+import org.opensaml.xmlsec.encryption.KeyDerivationMethod;
+import org.opensaml.xmlsec.encryption.XMLEncryptionBuilder;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * Builder of {@link org.opensaml.xmlsec.encryption.KANonce}.
+ */
+public class KeyDerivationMethodBuilder extends AbstractXMLObjectBuilder<KeyDerivationMethod>
+ implements XMLEncryptionBuilder<KeyDerivationMethod> {
+
+ /**
+ * Constructor.
+ */
+ public KeyDerivationMethodBuilder() {
+ }
+
+ /** {@inheritDoc} */
+ public KeyDerivationMethod buildObject(final String namespaceURI, final String localName,
+ final String namespacePrefix) {
+ return new KeyDerivationMethodImpl(namespaceURI, localName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ public KeyDerivationMethod buildObject() {
+ return buildObject(EncryptionConstants.XMLENC11_NS, KeyDerivationMethod.DEFAULT_ELEMENT_LOCAL_NAME,
+ EncryptionConstants.XMLENC11_PREFIX);
+ }
+
+}
\ No newline at end of file
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodImpl.java
new file mode 100644
index 000000000..09f86a057
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodImpl.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import javax.xml.namespace.QName;
+
+import org.opensaml.core.xml.AbstractXMLObject;
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.util.IndexedXMLObjectChildrenList;
+import org.opensaml.xmlsec.encryption.KeyDerivationMethod;
+
+/**
+ * Concrete implementation of {@link org.opensaml.xmlsec.encryption.KeyDerivationMethod}.
+ */
+public class KeyDerivationMethodImpl extends AbstractXMLObject implements KeyDerivationMethod {
+
+ /** Algorithm attribute value. */
+ private String algorithm;
+
+ /** Wildcard children. */
+ private IndexedXMLObjectChildrenList<XMLObject> unknownChildren;
+
+ /**
+ * Constructor.
+ *
+ * @param namespaceURI namespace URI
+ * @param elementLocalName local name
+ * @param namespacePrefix namespace prefix
+ */
+ protected KeyDerivationMethodImpl(final String namespaceURI, final String elementLocalName,
+ final String namespacePrefix) {
+ super(namespaceURI, elementLocalName, namespacePrefix);
+
+ unknownChildren = new IndexedXMLObjectChildrenList<>(this);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public String getAlgorithm() {
+ return algorithm;
+ }
+
+ /** {@inheritDoc} */
+ public void setAlgorithm(@Nullable final String newAlgorithm) {
+ algorithm = prepareForAssignment(algorithm, newAlgorithm);
+ }
+
+ /** {@inheritDoc} */
+ public List<XMLObject> getUnknownXMLObjects() {
+ return unknownChildren;
+ }
+
+ /** {@inheritDoc} */
+ public List<XMLObject> getUnknownXMLObjects(@Nonnull final QName typeOrName) {
+ return (List<XMLObject>) unknownChildren.subList(typeOrName);
+ }
+
+ /** {@inheritDoc} */
+ public List<XMLObject> getOrderedChildren() {
+ final ArrayList<XMLObject> children = new ArrayList<>();
+
+ children.addAll(unknownChildren);
+
+ if (children.size() == 0) {
+ return null;
+ }
+
+ return Collections.unmodifiableList(children);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodMarshaller.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodMarshaller.java
new file mode 100644
index 000000000..f3cf0dfc3
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodMarshaller.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.io.MarshallingException;
+import org.opensaml.xmlsec.encryption.KeyDerivationMethod;
+import org.w3c.dom.Element;
+
+/**
+ * A thread-safe Marshaller for {@link org.opensaml.xmlsec.encryption.DerivedKey} objects.
+ */
+public class KeyDerivationMethodMarshaller extends AbstractXMLEncryptionMarshaller {
+
+ /** {@inheritDoc} */
+ protected void marshallAttributes(final XMLObject xmlObject, final Element domElement) throws MarshallingException {
+ final KeyDerivationMethod kdm = (KeyDerivationMethod) xmlObject;
+
+ if (kdm.getAlgorithm() != null) {
+ domElement.setAttributeNS(null, KeyDerivationMethod.ALGORITHM_ATTRIBUTE_NAME, kdm.getAlgorithm());
+ }
+
+ super.marshallAttributes(xmlObject, domElement);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodUnmarshaller.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodUnmarshaller.java
new file mode 100644
index 000000000..44500134f
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodUnmarshaller.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.io.UnmarshallingException;
+import org.opensaml.xmlsec.encryption.KeyDerivationMethod;
+import org.w3c.dom.Attr;
+
+/**
+ * A thread-safe Unmarshaller for {@link org.opensaml.xmlsec.encryption.AgreementMethod} objects.
+ */
+public class KeyDerivationMethodUnmarshaller extends AbstractXMLEncryptionUnmarshaller {
+
+ /** {@inheritDoc} */
+ protected void processAttribute(final XMLObject xmlObject, final Attr attribute) throws UnmarshallingException {
+ final KeyDerivationMethod kdm = (KeyDerivationMethod) xmlObject;
+
+ if (attribute.getLocalName().equals(KeyDerivationMethod.ALGORITHM_ATTRIBUTE_NAME)) {
+ kdm.setAlgorithm(attribute.getValue());
+ } else {
+ super.processAttribute(xmlObject, attribute);
+ }
+ }
+
+ /** {@inheritDoc} */
+ protected void processChildElement(final XMLObject parentXMLObject, final XMLObject childXMLObject)
+ throws UnmarshallingException {
+ final KeyDerivationMethod kdm = (KeyDerivationMethod) parentXMLObject;
+
+ kdm.getUnknownXMLObjects().add(childXMLObject);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyLengthBuilder.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyLengthBuilder.java
new file mode 100644
index 000000000..efca56136
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyLengthBuilder.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.AbstractXMLObjectBuilder;
+import org.opensaml.xmlsec.encryption.KeyLength;
+import org.opensaml.xmlsec.encryption.XMLEncryptionBuilder;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * Builder of {@link org.opensaml.xmlsec.encryption.CarriedKeyName}.
+ */
+public class KeyLengthBuilder extends AbstractXMLObjectBuilder<KeyLength> implements
+ XMLEncryptionBuilder<KeyLength> {
+
+ /** Constructor. */
+ public KeyLengthBuilder() {
+ }
+
+ /** {@inheritDoc} */
+ public KeyLength buildObject(final String namespaceURI, final String localName, final String namespacePrefix) {
+ return new KeyLengthImpl(namespaceURI, localName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ public KeyLength buildObject() {
+ return buildObject(EncryptionConstants.XMLENC11_NS, KeyLength.DEFAULT_ELEMENT_LOCAL_NAME,
+ EncryptionConstants.XMLENC11_PREFIX);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyLengthImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyLengthImpl.java
new file mode 100644
index 000000000..a3abc713f
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/KeyLengthImpl.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.schema.impl.XSIntegerImpl;
+import org.opensaml.xmlsec.encryption.KeyLength;
+
+/**
+ * Concrete implementation of {@link org.opensaml.xmlsec.encryption.IterationCount}.
+ */
+public class KeyLengthImpl extends XSIntegerImpl implements KeyLength {
+
+ /**
+ * Constructor.
+ *
+ * @param namespaceURI namespace URI
+ * @param elementLocalName local name
+ * @param namespacePrefix namespace prefix
+ */
+ protected KeyLengthImpl(final String namespaceURI, final String elementLocalName,
+ final String namespacePrefix) {
+ super(namespaceURI, elementLocalName, namespacePrefix);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/MasterKeyNameBuilder.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/MasterKeyNameBuilder.java
new file mode 100644
index 000000000..2272eaa48
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/MasterKeyNameBuilder.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.AbstractXMLObjectBuilder;
+import org.opensaml.xmlsec.encryption.MasterKeyName;
+import org.opensaml.xmlsec.encryption.XMLEncryptionBuilder;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * Builder of {@link org.opensaml.xmlsec.encryption.CarriedKeyName}.
+ */
+public class MasterKeyNameBuilder extends AbstractXMLObjectBuilder<MasterKeyName> implements
+ XMLEncryptionBuilder<MasterKeyName> {
+
+ /** Constructor. */
+ public MasterKeyNameBuilder() {
+ }
+
+ /** {@inheritDoc} */
+ public MasterKeyName buildObject(final String namespaceURI, final String localName, final String namespacePrefix) {
+ return new MasterKeyNameImpl(namespaceURI, localName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ public MasterKeyName buildObject() {
+ return buildObject(EncryptionConstants.XMLENC11_NS, MasterKeyName.DEFAULT_ELEMENT_LOCAL_NAME,
+ EncryptionConstants.XMLENC11_PREFIX);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/MasterKeyNameImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/MasterKeyNameImpl.java
new file mode 100644
index 000000000..08d5df61d
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/MasterKeyNameImpl.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.schema.impl.XSStringImpl;
+import org.opensaml.xmlsec.encryption.MasterKeyName;
+
+/**
+ * Concrete implementation of {@link org.opensaml.xmlsec.encryption.MasterKeyName}.
+ */
+public class MasterKeyNameImpl extends XSStringImpl implements MasterKeyName {
+
+ /**
+ * Constructor.
+ *
+ * @param namespaceURI namespace URI
+ * @param elementLocalName local name
+ * @param namespacePrefix namespace prefix
+ */
+ protected MasterKeyNameImpl(final String namespaceURI, final String elementLocalName,
+ final String namespacePrefix) {
+ super(namespaceURI, elementLocalName, namespacePrefix);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/OtherSourceBuilder.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/OtherSourceBuilder.java
new file mode 100644
index 000000000..3a67eee18
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/OtherSourceBuilder.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.AbstractXMLObjectBuilder;
+import org.opensaml.xmlsec.encryption.OtherSource;
+import org.opensaml.xmlsec.encryption.XMLEncryptionBuilder;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * Builder of {@link org.opensaml.xmlsec.encryption.OtherSource}.
+ */
+public class OtherSourceBuilder extends AbstractXMLObjectBuilder<OtherSource> implements XMLEncryptionBuilder<OtherSource> {
+
+ /**
+ * Constructor.
+ */
+ public OtherSourceBuilder() {
+ }
+
+ /** {@inheritDoc} */
+ public OtherSource buildObject(final String namespaceURI, final String localName, final String namespacePrefix) {
+ return new OtherSourceImpl(namespaceURI, localName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ public OtherSource buildObject() {
+ return buildObject(EncryptionConstants.XMLENC11_NS, OtherSource.DEFAULT_ELEMENT_LOCAL_NAME,
+ EncryptionConstants.XMLENC11_PREFIX);
+ }
+
+}
\ No newline at end of file
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/OtherSourceImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/OtherSourceImpl.java
new file mode 100644
index 000000000..cdd6b16ca
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/OtherSourceImpl.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.xmlsec.encryption.OtherSource;
+
+/**
+ * Abstract implementation of {@link org.opensaml.xmlsec.encryption.OtherSource}.
+ */
+public class OtherSourceImpl extends AlgorithmIdentifierTypeImpl implements OtherSource {
+
+ /**
+ * Constructor.
+ *
+ * @param namespaceURI namespace URI
+ * @param elementLocalName local name
+ * @param namespacePrefix namespace prefix
+ */
+ protected OtherSourceImpl(final String namespaceURI, final String elementLocalName, final String namespacePrefix) {
+ super(namespaceURI, elementLocalName, namespacePrefix);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/OtherSourceMarshaller.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/OtherSourceMarshaller.java
new file mode 100644
index 000000000..c939e3a1f
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/OtherSourceMarshaller.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+/**
+ * A thread-safe Marshaller for {@link org.opensaml.xmlsec.encryption.OtherSource} objects.
+ */
+public class OtherSourceMarshaller extends AlgorithmIdentifierTypeMarshaller {
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/OtherSourceUnmarshaller.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/OtherSourceUnmarshaller.java
new file mode 100644
index 000000000..18f3fea7e
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/OtherSourceUnmarshaller.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+/**
+ * A thread-safe Unmarshaller for {@link org.opensaml.xmlsec.encryption.OtherSource} objects.
+ */
+public class OtherSourceUnmarshaller extends AlgorithmIdentifierTypeUnmarshaller {
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsBuilder.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsBuilder.java
new file mode 100644
index 000000000..0a2211147
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsBuilder.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.AbstractXMLObjectBuilder;
+import org.opensaml.xmlsec.encryption.PBKDF2Params;
+import org.opensaml.xmlsec.encryption.XMLEncryptionBuilder;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * Builder of {@link org.opensaml.xmlsec.encryption.PBKDF2Params}.
+ */
+public class PBKDF2ParamsBuilder extends AbstractXMLObjectBuilder<PBKDF2Params>
+ implements XMLEncryptionBuilder<PBKDF2Params> {
+
+ /**
+ * Constructor.
+ */
+ public PBKDF2ParamsBuilder() {
+ }
+
+ /** {@inheritDoc} */
+ public PBKDF2Params buildObject(final String namespaceURI, final String localName, final String namespacePrefix) {
+ return new PBKDF2ParamsImpl(namespaceURI, localName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ public PBKDF2Params buildObject() {
+ return buildObject(EncryptionConstants.XMLENC11_NS, PBKDF2Params.DEFAULT_ELEMENT_LOCAL_NAME,
+ EncryptionConstants.XMLENC11_PREFIX);
+ }
+
+}
\ No newline at end of file
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsImpl.java
new file mode 100644
index 000000000..1277dd4c5
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsImpl.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+import org.opensaml.core.xml.AbstractXMLObject;
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.xmlsec.encryption.IterationCount;
+import org.opensaml.xmlsec.encryption.KeyLength;
+import org.opensaml.xmlsec.encryption.PBKDF2Params;
+import org.opensaml.xmlsec.encryption.PRF;
+import org.opensaml.xmlsec.encryption.Salt;
+
+/**
+ * Concrete implementation of {@link org.opensaml.xmlsec.encryption.PBKDF2Params}.
+ */
+public class PBKDF2ParamsImpl extends AbstractXMLObject implements PBKDF2Params {
+
+ /** Salt child element. */
+ @Nullable private Salt salt;
+
+ /** IterationCount child element. */
+ @Nullable private IterationCount iterationCount;
+
+ /** KeyLength child element. */
+ @Nullable private KeyLength keyLength;
+
+ /** PRF child element. */
+ @Nullable private PRF prf;
+
+ /**
+ * Constructor.
+ *
+ * @param namespaceURI namespace URI
+ * @param elementLocalName local name
+ * @param namespacePrefix namespace prefix
+ */
+ protected PBKDF2ParamsImpl(final String namespaceURI, final String elementLocalName, final String namespacePrefix) {
+ super(namespaceURI, elementLocalName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public Salt getSalt() {
+ return salt;
+ }
+
+ /** {@inheritDoc} */
+ public void setSalt(@Nullable final Salt newSalt) {
+ salt = prepareForAssignment(salt, newSalt);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public IterationCount getIterationCount() {
+ return iterationCount;
+ }
+
+ /** {@inheritDoc} */
+ public void setIterationCount(@Nullable final IterationCount count) {
+ iterationCount = prepareForAssignment(iterationCount, count);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public KeyLength getKeyLength() {
+ return keyLength;
+ }
+
+ /** {@inheritDoc} */
+ public void setKeyLength(@Nullable final KeyLength length) {
+ keyLength = prepareForAssignment(keyLength, length);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public PRF getPRF() {
+ return prf;
+ }
+
+ /** {@inheritDoc} */
+ public void setPRF(@Nullable final PRF newPRF) {
+ prf = prepareForAssignment(prf, newPRF);
+ }
+
+ /** {@inheritDoc} */
+ public List<XMLObject> getOrderedChildren() {
+ final ArrayList<XMLObject> children = new ArrayList<>();
+
+ if (salt != null) {
+ children.add(salt);
+ }
+ if (iterationCount != null) {
+ children.add(iterationCount);
+ }
+ if (keyLength != null) {
+ children.add(keyLength);
+ }
+ if (prf != null) {
+ children.add(prf);
+ }
+
+ if (children.size() == 0) {
+ return null;
+ }
+
+ return Collections.unmodifiableList(children);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsMarshaller.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsMarshaller.java
new file mode 100644
index 000000000..a74929b07
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsMarshaller.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+/**
+ * A thread-safe Marshaller for {@link org.opensaml.xmlsec.encryption.PBKDF2Params} objects.
+ */
+public class PBKDF2ParamsMarshaller extends AbstractXMLEncryptionMarshaller {
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsUnmarshaller.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsUnmarshaller.java
new file mode 100644
index 000000000..faf3e1cb8
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsUnmarshaller.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.io.UnmarshallingException;
+import org.opensaml.xmlsec.encryption.IterationCount;
+import org.opensaml.xmlsec.encryption.KeyLength;
+import org.opensaml.xmlsec.encryption.PBKDF2Params;
+import org.opensaml.xmlsec.encryption.PRF;
+import org.opensaml.xmlsec.encryption.Salt;
+
+/**
+ * A thread-safe Unmarshaller for {@link org.opensaml.xmlsec.encryption.PBKDF2Params} objects.
+ */
+public class PBKDF2ParamsUnmarshaller extends AbstractXMLEncryptionUnmarshaller {
+
+ /** {@inheritDoc} */
+ protected void processChildElement(final XMLObject parentXMLObject, final XMLObject childXMLObject)
+ throws UnmarshallingException {
+
+ final PBKDF2Params params = (PBKDF2Params) parentXMLObject;
+
+ if (childXMLObject instanceof Salt) {
+ params.setSalt((Salt) childXMLObject);
+ } else if (childXMLObject instanceof IterationCount) {
+ params.setIterationCount((IterationCount) childXMLObject);
+ } else if (childXMLObject instanceof KeyLength) {
+ params.setKeyLength((KeyLength) childXMLObject);
+ } else if (childXMLObject instanceof PRF) {
+ params.setPRF((PRF) childXMLObject);
+ } else {
+ super.processChildElement(parentXMLObject, childXMLObject);
+ }
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PRFBuilder.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PRFBuilder.java
new file mode 100644
index 000000000..b00f69243
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PRFBuilder.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.AbstractXMLObjectBuilder;
+import org.opensaml.xmlsec.encryption.PRF;
+import org.opensaml.xmlsec.encryption.XMLEncryptionBuilder;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * Builder of {@link org.opensaml.xmlsec.encryption.PRF}.
+ */
+public class PRFBuilder extends AbstractXMLObjectBuilder<PRF> implements XMLEncryptionBuilder<PRF> {
+
+ /**
+ * Constructor.
+ */
+ public PRFBuilder() {
+ }
+
+ /** {@inheritDoc} */
+ public PRF buildObject(final String namespaceURI, final String localName, final String namespacePrefix) {
+ return new PRFImpl(namespaceURI, localName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ public PRF buildObject() {
+ return buildObject(EncryptionConstants.XMLENC11_NS, PRF.DEFAULT_ELEMENT_LOCAL_NAME,
+ EncryptionConstants.XMLENC11_PREFIX);
+ }
+
+}
\ No newline at end of file
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PRFImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PRFImpl.java
new file mode 100644
index 000000000..aaaef5021
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PRFImpl.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.xmlsec.encryption.PRF;
+
+/**
+ * Abstract implementation of {@link org.opensaml.xmlsec.encryption.PRF}.
+ */
+public class PRFImpl extends AlgorithmIdentifierTypeImpl implements PRF {
+
+ /**
+ * Constructor.
+ *
+ * @param namespaceURI namespace URI
+ * @param elementLocalName local name
+ * @param namespacePrefix namespace prefix
+ */
+ protected PRFImpl(final String namespaceURI, final String elementLocalName, final String namespacePrefix) {
+ super(namespaceURI, elementLocalName, namespacePrefix);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PRFMarshaller.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PRFMarshaller.java
new file mode 100644
index 000000000..4519fb007
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PRFMarshaller.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+/**
+ * A thread-safe Marshaller for {@link org.opensaml.xmlsec.encryption.PRF} objects.
+ */
+public class PRFMarshaller extends AlgorithmIdentifierTypeMarshaller {
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PRFUnmarshaller.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PRFUnmarshaller.java
new file mode 100644
index 000000000..b5079477f
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/PRFUnmarshaller.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+/**
+ * A thread-safe Unmarshaller for {@link org.opensaml.xmlsec.encryption.PRF} objects.
+ */
+public class PRFUnmarshaller extends AlgorithmIdentifierTypeUnmarshaller {
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SaltBuilder.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SaltBuilder.java
new file mode 100644
index 000000000..fc21c689a
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SaltBuilder.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.AbstractXMLObjectBuilder;
+import org.opensaml.xmlsec.encryption.Salt;
+import org.opensaml.xmlsec.encryption.XMLEncryptionBuilder;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * Builder of {@link org.opensaml.xmlsec.encryption.EncryptionMethod}.
+ */
+public class SaltBuilder extends AbstractXMLObjectBuilder<Salt> implements
+ XMLEncryptionBuilder<Salt> {
+
+ /**
+ * Constructor.
+ *
+ */
+ public SaltBuilder() {
+ }
+
+ /** {@inheritDoc} */
+ public Salt buildObject(final String namespaceURI, final String localName,
+ final String namespacePrefix) {
+ return new SaltImpl(namespaceURI, localName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ public Salt buildObject() {
+ return buildObject(EncryptionConstants.XMLENC11_NS, Salt.DEFAULT_ELEMENT_LOCAL_NAME,
+ EncryptionConstants.XMLENC11_PREFIX);
+ }
+
+}
\ No newline at end of file
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SaltImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SaltImpl.java
new file mode 100644
index 000000000..bfdc7b90d
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SaltImpl.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+import org.opensaml.core.xml.AbstractXMLObject;
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.xmlsec.encryption.OtherSource;
+import org.opensaml.xmlsec.encryption.Salt;
+import org.opensaml.xmlsec.encryption.Specified;
+
+/**
+ * Concrete implementation of {@link org.opensaml.xmlsec.encryption.Salt}.
+ */
+public class SaltImpl extends AbstractXMLObject implements Salt {
+
+ /** Specified child element value. */
+ private Specified specified;
+
+ /** OtherSource child element value. */
+ private OtherSource otherSource;
+
+ /**
+ * Constructor.
+ *
+ * @param namespaceURI namespace URI
+ * @param elementLocalName local name
+ * @param namespacePrefix namespace prefix
+ */
+ protected SaltImpl(final String namespaceURI, final String elementLocalName,
+ final String namespacePrefix) {
+ super(namespaceURI, elementLocalName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public Specified getSpecified() {
+ return specified;
+ }
+
+ /** {@inheritDoc} */
+ public void setSpecified(@Nullable final Specified newSpecified) {
+ specified = prepareForAssignment(specified, newSpecified);
+ }
+
+ /** {@inheritDoc} */
+ @Nullable public OtherSource getOtherSource() {
+ return otherSource;
+ }
+
+ /** {@inheritDoc} */
+ public void setOtherSource(@Nullable final OtherSource newOtherSource) {
+ otherSource = prepareForAssignment(otherSource, newOtherSource);
+ }
+
+ /** {@inheritDoc} */
+ public List<XMLObject> getOrderedChildren() {
+ final ArrayList<XMLObject> children = new ArrayList<>();
+
+ if (specified != null) {
+ children.add(specified);
+ }
+ if (otherSource != null) {
+ children.add(otherSource);
+ }
+
+ if (children.size() == 0) {
+ return null;
+ }
+
+ return Collections.unmodifiableList(children);
+ }
+
+}
\ No newline at end of file
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SaltMarshaller.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SaltMarshaller.java
new file mode 100644
index 000000000..2776a6a66
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SaltMarshaller.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+/**
+ * A thread-safe Marshaller for {@link org.opensaml.xmlsec.encryption.Salt} objects.
+ */
+public class SaltMarshaller extends AbstractXMLEncryptionMarshaller {
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SaltUnmarshaller.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SaltUnmarshaller.java
new file mode 100644
index 000000000..7dcddb606
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SaltUnmarshaller.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.io.UnmarshallingException;
+import org.opensaml.xmlsec.encryption.OtherSource;
+import org.opensaml.xmlsec.encryption.Salt;
+import org.opensaml.xmlsec.encryption.Specified;
+
+/**
+ * A thread-safe Unmarshaller for {@link org.opensaml.xmlsec.encryption.Salt} objects.
+ */
+public class SaltUnmarshaller extends AbstractXMLEncryptionUnmarshaller {
+
+ /** {@inheritDoc} */
+ protected void processChildElement(final XMLObject parentXMLObject, final XMLObject childXMLObject)
+ throws UnmarshallingException {
+
+ final Salt salt = (Salt) parentXMLObject;
+
+ if (childXMLObject instanceof Specified) {
+ salt.setSpecified((Specified) childXMLObject);
+ } else if (childXMLObject instanceof OtherSource) {
+ salt.setOtherSource((OtherSource) childXMLObject);
+ } else {
+ super.processChildElement(parentXMLObject, childXMLObject);
+ }
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SpecifiedBuilder.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SpecifiedBuilder.java
new file mode 100644
index 000000000..6ee4d86b9
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SpecifiedBuilder.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.AbstractXMLObjectBuilder;
+import org.opensaml.xmlsec.encryption.Specified;
+import org.opensaml.xmlsec.encryption.XMLEncryptionBuilder;
+import org.opensaml.xmlsec.encryption.support.EncryptionConstants;
+
+/**
+ * Builder of {@link org.opensaml.xmlsec.encryption.Specified}.
+ */
+public class SpecifiedBuilder
+ extends AbstractXMLObjectBuilder<Specified> implements XMLEncryptionBuilder<Specified> {
+
+ /**
+ * Constructor.
+ */
+ public SpecifiedBuilder() {
+ }
+
+ /** {@inheritDoc} */
+ public Specified buildObject(final String namespaceURI, final String localName, final String namespacePrefix) {
+ return new SpecifiedImpl(namespaceURI, localName, namespacePrefix);
+ }
+
+ /** {@inheritDoc} */
+ public Specified buildObject() {
+ return buildObject(EncryptionConstants.XMLENC11_NS, Specified.DEFAULT_ELEMENT_LOCAL_NAME,
+ EncryptionConstants.XMLENC11_PREFIX);
+ }
+
+}
\ No newline at end of file
diff --git a/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SpecifiedImpl.java b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SpecifiedImpl.java
new file mode 100644
index 000000000..7ec18053c
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/encryption/impl/SpecifiedImpl.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+import org.opensaml.core.xml.schema.impl.XSBase64BinaryImpl;
+import org.opensaml.xmlsec.encryption.Specified;
+
+/**
+ * Concrete implementation of {@link org.opensaml.xmlsec.encryption.Specified}.
+ */
+public class SpecifiedImpl extends XSBase64BinaryImpl implements Specified {
+
+ /**
+ * Constructor.
+ *
+ * @param namespaceURI namespace URI
+ * @param elementLocalName local name
+ * @param namespacePrefix namespace prefix
+ */
+ protected SpecifiedImpl(final String namespaceURI, final String elementLocalName, final String namespacePrefix) {
+ super(namespaceURI, elementLocalName, namespacePrefix);
+ }
+
+}
\ No newline at end of file
diff --git a/opensaml-xmlsec-impl/src/main/resources/encryption-config.xml b/opensaml-xmlsec-impl/src/main/resources/encryption-config.xml
index 9ded3a142..05adde279 100644
--- a/opensaml-xmlsec-impl/src/main/resources/encryption-config.xml
+++ b/opensaml-xmlsec-impl/src/main/resources/encryption-config.xml
@@ -187,12 +187,97 @@
<!-- 1.1 stuff -->
+ <!-- DerivedKey -->
+ <ObjectProvider qualifiedName="xenc11:DerivedKey">
+ <BuilderClass className="org.opensaml.xmlsec.encryption.impl.DerivedKeyBuilder"/>
+ <MarshallingClass className="org.opensaml.xmlsec.encryption.impl.DerivedKeyMarshaller"/>
+ <UnmarshallingClass className="org.opensaml.xmlsec.encryption.impl.DerivedKeyUnmarshaller"/>
+ </ObjectProvider>
+
+ <!-- DerivedKeyName -->
+ <ObjectProvider qualifiedName="xenc11:DerivedKeyName">
+ <BuilderClass className="org.opensaml.xmlsec.encryption.impl.DerivedKeyNameBuilder"/>
+ <MarshallingClass className="org.opensaml.core.xml.schema.impl.XSStringMarshaller"/>
+ <UnmarshallingClass className="org.opensaml.core.xml.schema.impl.XSStringUnmarshaller"/>
+ </ObjectProvider>
+
+ <!-- ConcatKDFParams -->
+ <ObjectProvider qualifiedName="xenc11:ConcatKDFParams">
+ <BuilderClass className="org.opensaml.xmlsec.encryption.impl.ConcatKDFParamsBuilder"/>
+ <MarshallingClass className="org.opensaml.xmlsec.encryption.impl.ConcatKDFParamsMarshaller"/>
+ <UnmarshallingClass className="org.opensaml.xmlsec.encryption.impl.ConcatKDFParamsUnmarshaller"/>
+ </ObjectProvider>
+
+ <!-- IterationCount -->
+ <ObjectProvider qualifiedName="xenc11:IterationCount">
+ <BuilderClass className="org.opensaml.xmlsec.encryption.impl.IterationCountBuilder"/>
+ <MarshallingClass className="org.opensaml.core.xml.schema.impl.XSIntegerMarshaller"/>
+ <UnmarshallingClass className="org.opensaml.core.xml.schema.impl.XSIntegerUnmarshaller"/>
+ </ObjectProvider>
+
+ <!-- IterationCount -->
+ <ObjectProvider qualifiedName="xenc11:KeyLength">
+ <BuilderClass className="org.opensaml.xmlsec.encryption.impl.KeyLengthBuilder"/>
+ <MarshallingClass className="org.opensaml.core.xml.schema.impl.XSIntegerMarshaller"/>
+ <UnmarshallingClass className="org.opensaml.core.xml.schema.impl.XSIntegerUnmarshaller"/>
+ </ObjectProvider>
+
+ <!-- KeyDerivationMethod -->
+ <ObjectProvider qualifiedName="xenc11:KeyDerivationMethod">
+ <BuilderClass className="org.opensaml.xmlsec.encryption.impl.KeyDerivationMethodBuilder"/>
+ <MarshallingClass className="org.opensaml.xmlsec.encryption.impl.KeyDerivationMethodMarshaller"/>
+ <UnmarshallingClass className="org.opensaml.xmlsec.encryption.impl.KeyDerivationMethodUnmarshaller"/>
+ </ObjectProvider>
+
<!-- MGF -->
<ObjectProvider qualifiedName="xenc11:MGF">
<BuilderClass className="org.opensaml.xmlsec.encryption.impl.MGFBuilder"/>
<MarshallingClass className="org.opensaml.xmlsec.encryption.impl.MGFMarshaller"/>
<UnmarshallingClass className="org.opensaml.xmlsec.encryption.impl.MGFUnmarshaller"/>
</ObjectProvider>
+
+ <!-- MasterKeyName -->
+ <ObjectProvider qualifiedName="xenc11:MasterKeyName">
+ <BuilderClass className="org.opensaml.xmlsec.encryption.impl.MasterKeyNameBuilder"/>
+ <MarshallingClass className="org.opensaml.core.xml.schema.impl.XSStringMarshaller"/>
+ <UnmarshallingClass className="org.opensaml.core.xml.schema.impl.XSStringUnmarshaller"/>
+ </ObjectProvider>
+
+ <!-- OtherSource -->
+ <ObjectProvider qualifiedName="xenc11:OtherSource">
+ <BuilderClass className="org.opensaml.xmlsec.encryption.impl.OtherSourceBuilder"/>
+ <MarshallingClass className="org.opensaml.xmlsec.encryption.impl.OtherSourceMarshaller"/>
+ <UnmarshallingClass className="org.opensaml.xmlsec.encryption.impl.OtherSourceUnmarshaller"/>
+ </ObjectProvider>
+
+ <!-- PBKDF2-params-->
+ <ObjectProvider qualifiedName="xenc11:PBKDF2-params">
+ <BuilderClass className="org.opensaml.xmlsec.encryption.impl.PBKDF2ParamsBuilder"/>
+ <MarshallingClass className="org.opensaml.xmlsec.encryption.impl.PBKDF2ParamsMarshaller"/>
+ <UnmarshallingClass className="org.opensaml.xmlsec.encryption.impl.PBKDF2ParamsUnmarshaller"/>
+ </ObjectProvider>
+
+ <!-- PRF -->
+ <ObjectProvider qualifiedName="xenc11:PRF">
+ <BuilderClass className="org.opensaml.xmlsec.encryption.impl.PRFBuilder"/>
+ <MarshallingClass className="org.opensaml.xmlsec.encryption.impl.PRFMarshaller"/>
+ <UnmarshallingClass className="org.opensaml.xmlsec.encryption.impl.PRFUnmarshaller"/>
+ </ObjectProvider>
+
+ <!-- Salt -->
+ <ObjectProvider qualifiedName="xenc11:Salt">
+ <BuilderClass className="org.opensaml.xmlsec.encryption.impl.SaltBuilder"/>
+ <MarshallingClass className="org.opensaml.xmlsec.encryption.impl.SaltMarshaller"/>
+ <UnmarshallingClass className="org.opensaml.xmlsec.encryption.impl.SaltUnmarshaller"/>
+ </ObjectProvider>
+
+ <!-- Specified -->
+ <ObjectProvider qualifiedName="xenc11:Specified">
+ <BuilderClass className="org.opensaml.xmlsec.encryption.impl.SpecifiedBuilder"/>
+ <MarshallingClass className="org.opensaml.core.xml.schema.impl.XSBase64BinaryMarshaller"/>
+ <UnmarshallingClass className="org.opensaml.core.xml.schema.impl.XSBase64BinaryUnmarshaller"/>
+ </ObjectProvider>
+
</ObjectProviders>
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsTest.java
new file mode 100644
index 000000000..d56fee9b3
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsTest.java
@@ -0,0 +1,217 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+
+import org.opensaml.core.testing.XMLObjectProviderBaseTestCase;
+import org.opensaml.core.xml.XMLRuntimeException;
+import org.opensaml.xmlsec.encryption.ConcatKDFParams;
+import org.opensaml.xmlsec.signature.DigestMethod;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ *
+ */
+public class ConcatKDFParamsTest extends XMLObjectProviderBaseTestCase {
+
+ private String expectedDigestMethod;
+ private String expectedAlgorithmID;
+ private String expectedPartyUInfo;
+ private String expectedPartyVInfo;
+ private String expectedSuppPubInfo;
+ private String expectedSuppPrivInfo;
+
+ /**
+ * Constructor
+ *
+ */
+ public ConcatKDFParamsTest() {
+ singleElementFile = "/org/opensaml/xmlsec/encryption/impl/ConcatKDFParams.xml";
+ childElementsFile = "/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsChildElements.xml";
+ }
+
+ @BeforeMethod
+ protected void setUp() throws Exception {
+ expectedDigestMethod = "urn:string:foo";
+ expectedAlgorithmID = "00AA";
+ expectedPartyUInfo = "00BB";
+ expectedPartyVInfo = "00CC";
+ expectedSuppPubInfo = "00DD";
+ expectedSuppPrivInfo = "00EE";
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementUnmarshall() {
+ ConcatKDFParams params = (ConcatKDFParams) unmarshallElement(singleElementFile);
+
+ Assert.assertNotNull(params);
+ Assert.assertEquals(params.getAlgorithmID(), expectedAlgorithmID);
+ Assert.assertEquals(params.getPartyVInfo(), expectedPartyVInfo);
+ Assert.assertEquals(params.getPartyUInfo(), expectedPartyUInfo);
+ Assert.assertEquals(params.getSuppPubInfo(), expectedSuppPubInfo);
+ Assert.assertEquals(params.getSuppPrivInfo(), expectedSuppPrivInfo);
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testChildElementsUnmarshall() {
+ ConcatKDFParams params = (ConcatKDFParams) unmarshallElement(childElementsFile);
+
+ Assert.assertNotNull(params);
+ Assert.assertEquals(params.getAlgorithmID(), expectedAlgorithmID);
+ Assert.assertEquals(params.getPartyVInfo(), expectedPartyVInfo);
+ Assert.assertEquals(params.getPartyUInfo(), expectedPartyUInfo);
+ Assert.assertEquals(params.getSuppPubInfo(), expectedSuppPubInfo);
+ Assert.assertEquals(params.getSuppPrivInfo(), expectedSuppPrivInfo);
+
+ Assert.assertNotNull(params.getDigestMethod());
+ Assert.assertEquals(params.getDigestMethod().getAlgorithm(), expectedDigestMethod);
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementMarshall() {
+ ConcatKDFParams params = (ConcatKDFParams) buildXMLObject(ConcatKDFParams.DEFAULT_ELEMENT_NAME);
+
+ params.setAlgorithmID(expectedAlgorithmID);
+ params.setPartyUInfo(expectedPartyUInfo);
+ params.setPartyVInfo(expectedPartyVInfo);
+ params.setSuppPubInfo(expectedSuppPubInfo);
+ params.setSuppPrivInfo(expectedSuppPrivInfo);
+
+ assertXMLEquals(expectedDOM, params);
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testChildElementsMarshall() {
+ ConcatKDFParams params = (ConcatKDFParams) buildXMLObject(ConcatKDFParams.DEFAULT_ELEMENT_NAME);
+
+ params.setAlgorithmID(expectedAlgorithmID);
+ params.setPartyUInfo(expectedPartyUInfo);
+ params.setPartyVInfo(expectedPartyVInfo);
+ params.setSuppPubInfo(expectedSuppPubInfo);
+ params.setSuppPrivInfo(expectedSuppPrivInfo);
+
+ DigestMethod dm = buildXMLObject(DigestMethod.DEFAULT_ELEMENT_NAME);
+ dm.setAlgorithm(expectedDigestMethod);
+ params.setDigestMethod(dm);
+
+ assertXMLEquals(expectedChildElementsDOM, params);
+ }
+
+ @Test
+ public void testStringBytesConversions() {
+ ConcatKDFParams params = null;
+
+ // AlgorithmID
+ params = buildXMLObject(ConcatKDFParams.DEFAULT_ELEMENT_NAME);
+ params.setAlgorithmID(expectedAlgorithmID);
+ Assert.assertEquals(params.getAlgorithmIDBytes(), new byte[] {0x0, (byte) 0xAA});
+ params.setAlgorithmID(null);
+ Assert.assertNull(params.getAlgorithmIDBytes());
+ params.setAlgorithmIDBytes(new byte[] {0x0, (byte) 0xAA});
+ Assert.assertEquals(params.getAlgorithmID(), expectedAlgorithmID);
+ params.setAlgorithmIDBytes(null);
+ Assert.assertNull(params.getAlgorithmID());
+ try {
+ params.setAlgorithmID("FOO");
+ params.getAlgorithmIDBytes();
+ Assert.fail("Invalid hexBinary value, auto-decoding should have failed");
+ } catch (XMLRuntimeException e) {
+ // expected, do nothing
+ }
+
+ // PartyUInfo
+ params = buildXMLObject(ConcatKDFParams.DEFAULT_ELEMENT_NAME);
+ params.setPartyUInfo(expectedPartyUInfo);
+ Assert.assertEquals(params.getPartyUInfoBytes(), new byte[] {0x0, (byte) 0xBB});
+ params.setPartyUInfo(null);
+ Assert.assertNull(params.getPartyUInfoBytes());
+ params.setPartyUInfoBytes(new byte[] {0x0, (byte) 0xBB});
+ Assert.assertEquals(params.getPartyUInfo(), expectedPartyUInfo);
+ params.setPartyUInfoBytes(null);
+ Assert.assertNull(params.getPartyUInfo());
+ try {
+ params.setPartyUInfo("FOO");
+ params.getPartyUInfoBytes();
+ Assert.fail("Invalid hexBinary value, auto-decoding should have failed");
+ } catch (XMLRuntimeException e) {
+ // expected, do nothing
+ }
+
+ // PartyVInfo
+ params = buildXMLObject(ConcatKDFParams.DEFAULT_ELEMENT_NAME);
+ params.setPartyVInfo(expectedPartyVInfo);
+ Assert.assertEquals(params.getPartyVInfoBytes(), new byte[] {0x0, (byte) 0xCC});
+ params.setPartyVInfo(null);
+ Assert.assertNull(params.getPartyVInfoBytes());
+ params.setPartyVInfoBytes(new byte[] {0x0, (byte) 0xCC});
+ Assert.assertEquals(params.getPartyVInfo(), expectedPartyVInfo);
+ params.setPartyVInfoBytes(null);
+ Assert.assertNull(params.getPartyVInfo());
+ try {
+ params.setPartyVInfo("FOO");
+ params.getPartyVInfoBytes();
+ Assert.fail("Invalid hexBinary value, auto-decoding should have failed");
+ } catch (XMLRuntimeException e) {
+ // expected, do nothing
+ }
+
+ // SuppPubInfo
+ params = buildXMLObject(ConcatKDFParams.DEFAULT_ELEMENT_NAME);
+ params.setSuppPubInfo(expectedSuppPubInfo);
+ Assert.assertEquals(params.getSuppPubInfoBytes(), new byte[] {0x0, (byte) 0xDD});
+ params.setSuppPubInfo(null);
+ Assert.assertNull(params.getSuppPubInfoBytes());
+ params.setSuppPubInfoBytes(new byte[] {0x0, (byte) 0xDD});
+ Assert.assertEquals(params.getSuppPubInfo(), expectedSuppPubInfo);
+ params.setSuppPubInfoBytes(null);
+ Assert.assertNull(params.getSuppPubInfo());
+ try {
+ params.setSuppPubInfo("FOO");
+ params.getSuppPubInfoBytes();
+ Assert.fail("Invalid hexBinary value, auto-decoding should have failed");
+ } catch (XMLRuntimeException e) {
+ // expected, do nothing
+ }
+
+ // SuppPrivInfo
+ params = buildXMLObject(ConcatKDFParams.DEFAULT_ELEMENT_NAME);
+ params.setSuppPrivInfo(expectedSuppPrivInfo);
+ Assert.assertEquals(params.getSuppPrivInfoBytes(), new byte[] {0x0, (byte) 0xEE});
+ params.setSuppPrivInfo(null);
+ Assert.assertNull(params.getSuppPrivInfoBytes());
+ params.setSuppPrivInfoBytes(new byte[] {0x0, (byte) 0xEE});
+ Assert.assertEquals(params.getSuppPrivInfo(), expectedSuppPrivInfo);
+ params.setSuppPrivInfoBytes(null);
+ Assert.assertNull(params.getSuppPrivInfo());
+ try {
+ params.setSuppPrivInfo("FOO");
+ params.getSuppPrivInfoBytes();
+ Assert.fail("Invalid hexBinary value, auto-decoding should have failed");
+ } catch (XMLRuntimeException e) {
+ // expected, do nothing
+ }
+
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyNameTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyNameTest.java
new file mode 100644
index 000000000..e9c1dddf7
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyNameTest.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeMethod;
+import org.testng.Assert;
+import org.opensaml.core.testing.XMLObjectProviderBaseTestCase;
+import org.opensaml.xmlsec.encryption.DerivedKeyName;
+
+/**
+ *
+ */
+public class DerivedKeyNameTest extends XMLObjectProviderBaseTestCase {
+
+ private String expectedStringContent;
+
+ /**
+ * Constructor
+ *
+ */
+ public DerivedKeyNameTest() {
+ singleElementFile = "/org/opensaml/xmlsec/encryption/impl/DerivedKeyName.xml";
+
+ }
+
+ @BeforeMethod
+ protected void setUp() throws Exception {
+ expectedStringContent = "someKeyName";
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementUnmarshall() {
+ DerivedKeyName dkn = (DerivedKeyName) unmarshallElement(singleElementFile);
+
+ Assert.assertNotNull(dkn, "DerivedKeyName");
+ Assert.assertEquals(expectedStringContent, dkn.getValue(), "DerivedKeyName value");
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementMarshall() {
+ DerivedKeyName dkn = (DerivedKeyName) buildXMLObject(DerivedKeyName.DEFAULT_ELEMENT_NAME);
+ dkn.setValue(expectedStringContent);
+
+ assertXMLEquals(expectedDOM, dkn);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyTest.java
new file mode 100644
index 000000000..7c76a63fa
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/DerivedKeyTest.java
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+
+import org.opensaml.core.testing.XMLObjectProviderBaseTestCase;
+import org.opensaml.xmlsec.encryption.DerivedKey;
+import org.opensaml.xmlsec.encryption.DerivedKeyName;
+import org.opensaml.xmlsec.encryption.KeyDerivationMethod;
+import org.opensaml.xmlsec.encryption.MasterKeyName;
+import org.opensaml.xmlsec.encryption.ReferenceList;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ *
+ */
+public class DerivedKeyTest extends XMLObjectProviderBaseTestCase {
+
+ private String expectedId;
+ private String expectedRecipient;
+ private String expectedType;
+
+ /**
+ * Constructor
+ *
+ */
+ public DerivedKeyTest() {
+ singleElementFile = "/org/opensaml/xmlsec/encryption/impl/DerivedKey.xml";
+ singleElementOptionalAttributesFile = "/org/opensaml/xmlsec/encryption/impl/DerivedKeyOptionalAttributes.xml";
+ childElementsFile = "/org/opensaml/xmlsec/encryption/impl/DerivedKeyChildElements.xml";
+ }
+
+ @BeforeMethod
+ protected void setUp() throws Exception {
+ expectedId = "abc123";
+ expectedRecipient = "theRecipient";
+ expectedType = "urn:string:foo";
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementUnmarshall() {
+ DerivedKey dk = (DerivedKey) unmarshallElement(singleElementFile);
+
+ Assert.assertNotNull(dk);
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testChildElementsUnmarshall() {
+ DerivedKey dk = (DerivedKey) unmarshallElement(childElementsFile);
+
+ Assert.assertNotNull(dk.getKeyDerivationMethod());
+ Assert.assertNotNull(dk.getReferenceList());
+ Assert.assertNotNull(dk.getDerivedKeyName());
+ Assert.assertNotNull(dk.getMasterKeyName());
+ Assert.assertNotNull(dk);
+ }
+
+ /** {@inheritDoc} */
+ public void testSingleElementOptionalAttributesUnmarshall() {
+ DerivedKey dk = (DerivedKey) unmarshallElement(singleElementOptionalAttributesFile);
+
+ Assert.assertNotNull(dk);
+ Assert.assertEquals(dk.getId(), expectedId);
+ Assert.assertEquals(dk.getRecipient(), expectedRecipient);
+ Assert.assertEquals(dk.getType(), expectedType);
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementMarshall() {
+ DerivedKey dk = (DerivedKey) buildXMLObject(DerivedKey.DEFAULT_ELEMENT_NAME);
+
+ assertXMLEquals(expectedDOM, dk);
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testChildElementsMarshall() {
+ DerivedKey dk = (DerivedKey) buildXMLObject(DerivedKey.DEFAULT_ELEMENT_NAME);
+
+ dk.setKeyDerivationMethod(buildXMLObject(KeyDerivationMethod.DEFAULT_ELEMENT_NAME));
+ dk.setReferenceList(buildXMLObject(ReferenceList.DEFAULT_ELEMENT_NAME));
+ dk.setDerivedKeyName(buildXMLObject(DerivedKeyName.DEFAULT_ELEMENT_NAME));
+ dk.setMasterKeyName(buildXMLObject(MasterKeyName.DEFAULT_ELEMENT_NAME));
+
+ assertXMLEquals(expectedChildElementsDOM, dk);
+ }
+
+ /** {@inheritDoc} */
+ public void testSingleElementOptionalAttributesMarshall() {
+ DerivedKey dk = (DerivedKey) buildXMLObject(DerivedKey.DEFAULT_ELEMENT_NAME);
+
+ dk.setId(expectedId);
+ dk.setRecipient(expectedRecipient);
+ dk.setType(expectedType);
+
+ assertXMLEquals(expectedOptionalAttributesDOM, dk);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/IterationCountTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/IterationCountTest.java
new file mode 100644
index 000000000..8cb7af6d0
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/IterationCountTest.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeMethod;
+import org.testng.Assert;
+import org.opensaml.core.testing.XMLObjectProviderBaseTestCase;
+import org.opensaml.xmlsec.encryption.IterationCount;
+
+/**
+ *
+ */
+public class IterationCountTest extends XMLObjectProviderBaseTestCase {
+
+ private Integer expectedIntegerContent;
+
+ /**
+ * Constructor
+ *
+ */
+ public IterationCountTest() {
+ singleElementFile = "/org/opensaml/xmlsec/encryption/impl/IterationCount.xml";
+
+ }
+
+ @BeforeMethod
+ protected void setUp() throws Exception {
+ expectedIntegerContent = 2020;
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementUnmarshall() {
+ IterationCount ic = (IterationCount) unmarshallElement(singleElementFile);
+
+ Assert.assertNotNull(ic, "IterationCount");
+ Assert.assertEquals(expectedIntegerContent, ic.getValue(), "IterationCount value");
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementMarshall() {
+ IterationCount ic = (IterationCount) buildXMLObject(IterationCount.DEFAULT_ELEMENT_NAME);
+ ic.setValue(expectedIntegerContent);
+
+ assertXMLEquals(expectedDOM, ic);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodTest.java
new file mode 100644
index 000000000..85e7e1874
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodTest.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+
+import org.opensaml.core.testing.XMLObjectProviderBaseTestCase;
+import org.opensaml.core.xml.mock.SimpleXMLObject;
+import org.opensaml.xmlsec.encryption.KeyDerivationMethod;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ *
+ */
+public class KeyDerivationMethodTest extends XMLObjectProviderBaseTestCase {
+
+ private String expectedAlgorithm;
+ private int expectedNumUnknownChildren;
+
+ /**
+ * Constructor
+ *
+ */
+ public KeyDerivationMethodTest() {
+ singleElementFile = "/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethod.xml";
+ childElementsFile = "/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodChildElements.xml";
+ }
+
+ @BeforeMethod
+ protected void setUp() throws Exception {
+ expectedAlgorithm = "urn:string:foo";
+ expectedNumUnknownChildren = 3;
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementUnmarshall() {
+ KeyDerivationMethod kdm = (KeyDerivationMethod) unmarshallElement(singleElementFile);
+
+ Assert.assertNotNull(kdm, "KeyDerivationMethod");
+ Assert.assertEquals(kdm.getAlgorithm(), expectedAlgorithm, "Algorithm attribute");
+ Assert.assertEquals(kdm.getUnknownXMLObjects().size(), 0, "Unknown children");
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testChildElementsUnmarshall() {
+ KeyDerivationMethod kdm = (KeyDerivationMethod) unmarshallElement(childElementsFile);
+
+ Assert.assertNotNull(kdm, "KeyDerivationMethod");
+ Assert.assertEquals(kdm.getAlgorithm(), expectedAlgorithm, "Algorithm attribute");
+ Assert.assertEquals(kdm.getUnknownXMLObjects().size(), expectedNumUnknownChildren, "Unknown children");
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementMarshall() {
+ KeyDerivationMethod kdm = (KeyDerivationMethod) buildXMLObject(KeyDerivationMethod.DEFAULT_ELEMENT_NAME);
+
+ kdm.setAlgorithm(expectedAlgorithm);
+
+ assertXMLEquals(expectedDOM, kdm);
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testChildElementsMarshall() {
+ KeyDerivationMethod kdm = (KeyDerivationMethod) buildXMLObject(KeyDerivationMethod.DEFAULT_ELEMENT_NAME);
+
+ kdm.setAlgorithm(expectedAlgorithm);
+ kdm.getUnknownXMLObjects().add(buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
+ kdm.getUnknownXMLObjects().add(buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
+ kdm.getUnknownXMLObjects().add(buildXMLObject(SimpleXMLObject.ELEMENT_NAME));
+
+ assertXMLEquals(expectedChildElementsDOM, kdm);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/KeyLengthTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/KeyLengthTest.java
new file mode 100644
index 000000000..27be76eaf
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/KeyLengthTest.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeMethod;
+import org.testng.Assert;
+import org.opensaml.core.testing.XMLObjectProviderBaseTestCase;
+import org.opensaml.xmlsec.encryption.KeyLength;
+
+/**
+ *
+ */
+public class KeyLengthTest extends XMLObjectProviderBaseTestCase {
+
+ private Integer expectedIntegerContent;
+
+ /**
+ * Constructor
+ *
+ */
+ public KeyLengthTest() {
+ singleElementFile = "/org/opensaml/xmlsec/encryption/impl/KeyLength.xml";
+
+ }
+
+ @BeforeMethod
+ protected void setUp() throws Exception {
+ expectedIntegerContent = 256;
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementUnmarshall() {
+ KeyLength kl = (KeyLength) unmarshallElement(singleElementFile);
+
+ Assert.assertNotNull(kl, "KeyLength");
+ Assert.assertEquals(expectedIntegerContent, kl.getValue(), "KeyLength value");
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementMarshall() {
+ KeyLength kl = (KeyLength) buildXMLObject(KeyLength.DEFAULT_ELEMENT_NAME);
+ kl.setValue(expectedIntegerContent);
+
+ assertXMLEquals(expectedDOM, kl);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/MasterKeyNameTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/MasterKeyNameTest.java
new file mode 100644
index 000000000..96d6843a1
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/MasterKeyNameTest.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeMethod;
+import org.testng.Assert;
+import org.opensaml.core.testing.XMLObjectProviderBaseTestCase;
+import org.opensaml.xmlsec.encryption.MasterKeyName;
+
+/**
+ *
+ */
+public class MasterKeyNameTest extends XMLObjectProviderBaseTestCase {
+
+ private String expectedStringContent;
+
+ /**
+ * Constructor
+ *
+ */
+ public MasterKeyNameTest() {
+ singleElementFile = "/org/opensaml/xmlsec/encryption/impl/MasterKeyName.xml";
+
+ }
+
+ @BeforeMethod
+ protected void setUp() throws Exception {
+ expectedStringContent = "someKeyName";
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementUnmarshall() {
+ MasterKeyName mkn = (MasterKeyName) unmarshallElement(singleElementFile);
+
+ Assert.assertNotNull(mkn, "MasterKeyName");
+ Assert.assertEquals(expectedStringContent, mkn.getValue(), "MasterKeyName value");
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementMarshall() {
+ MasterKeyName mkn = (MasterKeyName) buildXMLObject(MasterKeyName.DEFAULT_ELEMENT_NAME);
+ mkn.setValue(expectedStringContent);
+
+ assertXMLEquals(expectedDOM, mkn);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/OtherSourceTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/OtherSourceTest.java
new file mode 100644
index 000000000..5a80fafe8
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/OtherSourceTest.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+
+import org.opensaml.core.testing.XMLObjectProviderBaseTestCase;
+import org.opensaml.core.xml.XMLObjectBuilder;
+import org.opensaml.core.xml.schema.XSAny;
+import org.opensaml.xmlsec.encryption.OtherSource;
+import org.opensaml.xmlsec.encryption.Parameters;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ *
+ */
+public class OtherSourceTest extends XMLObjectProviderBaseTestCase {
+
+ private String expectedAlgorithm;
+
+ private String expectedParametersContent;
+
+ /**
+ * Constructor
+ *
+ */
+ public OtherSourceTest() {
+ singleElementFile = "/org/opensaml/xmlsec/encryption/impl/OtherSource.xml";
+ childElementsFile = "/org/opensaml/xmlsec/encryption/impl/OtherSourceChildElements.xml";
+ }
+
+ @BeforeMethod
+ protected void setUp() throws Exception {
+ expectedAlgorithm = "urn:string:foo";
+ expectedParametersContent = "MyParams";
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementUnmarshall() {
+ OtherSource otherSource = (OtherSource) unmarshallElement(singleElementFile);
+
+ Assert.assertNotNull(otherSource, "OtherSource");
+ Assert.assertEquals(otherSource.getAlgorithm(), expectedAlgorithm, "Algorithm attribute");
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testChildElementsUnmarshall() {
+ OtherSource otherSource = (OtherSource) unmarshallElement(childElementsFile);
+
+ Assert.assertNotNull(otherSource, "OtherSource");
+ Assert.assertEquals(otherSource.getAlgorithm(), expectedAlgorithm, "Algorithm attribute");
+ Assert.assertNotNull(otherSource.getParameters(), "Parameters child element");
+ System.out.println("Parameters: " + otherSource.getParameters().getClass().getName());
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementMarshall() {
+ OtherSource otherSource = (OtherSource) buildXMLObject(OtherSource.DEFAULT_ELEMENT_NAME);
+
+ otherSource.setAlgorithm(expectedAlgorithm);
+
+ assertXMLEquals(expectedDOM, otherSource);
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testChildElementsMarshall() {
+ OtherSource otherSource = (OtherSource) buildXMLObject(OtherSource.DEFAULT_ELEMENT_NAME);
+
+ otherSource.setAlgorithm(expectedAlgorithm);
+
+ XMLObjectBuilder<XSAny> xsAnyBuilder = builderFactory.getBuilderOrThrow(XSAny.TYPE_NAME);
+ XSAny parameters = xsAnyBuilder.buildObject(Parameters.DEFAULT_ELEMENT_NAME);
+ parameters.setTextContent(expectedParametersContent);
+ otherSource.setParameters(parameters);
+
+ assertXMLEquals(expectedChildElementsDOM, otherSource);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsTest.java
new file mode 100644
index 000000000..3d6270bbb
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsTest.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+
+import org.opensaml.core.testing.XMLObjectProviderBaseTestCase;
+import org.opensaml.xmlsec.encryption.IterationCount;
+import org.opensaml.xmlsec.encryption.KeyLength;
+import org.opensaml.xmlsec.encryption.PBKDF2Params;
+import org.opensaml.xmlsec.encryption.PRF;
+import org.opensaml.xmlsec.encryption.Salt;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ *
+ */
+public class PBKDF2ParamsTest extends XMLObjectProviderBaseTestCase {
+
+ /**
+ * Constructor
+ *
+ */
+ public PBKDF2ParamsTest() {
+ singleElementFile = "/org/opensaml/xmlsec/encryption/impl/PBKDF2Params.xml";
+ childElementsFile = "/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsChildElements.xml";
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementUnmarshall() {
+ PBKDF2Params params = (PBKDF2Params) unmarshallElement(singleElementFile);
+
+ Assert.assertNotNull(params, "PBKDF2Params");
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testChildElementsUnmarshall() {
+ PBKDF2Params params = (PBKDF2Params) unmarshallElement(childElementsFile);
+
+ Assert.assertNotNull(params, "PBKDF2Params");
+ Assert.assertNotNull(params.getSalt());
+ Assert.assertNotNull(params.getIterationCount());
+ Assert.assertNotNull(params.getKeyLength());
+ Assert.assertNotNull(params.getPRF());
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementMarshall() {
+ PBKDF2Params params = (PBKDF2Params) buildXMLObject(PBKDF2Params.DEFAULT_ELEMENT_NAME);
+
+ assertXMLEquals(expectedDOM, params);
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testChildElementsMarshall() {
+ PBKDF2Params params = (PBKDF2Params) buildXMLObject(PBKDF2Params.DEFAULT_ELEMENT_NAME);
+
+ params.setSalt(buildXMLObject(Salt.DEFAULT_ELEMENT_NAME));
+ params.setIterationCount(buildXMLObject(IterationCount.DEFAULT_ELEMENT_NAME));
+ params.setKeyLength(buildXMLObject(KeyLength.DEFAULT_ELEMENT_NAME));
+ params.setPRF(buildXMLObject(PRF.DEFAULT_ELEMENT_NAME));
+
+ assertXMLEquals(expectedChildElementsDOM, params);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/PRFTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/PRFTest.java
new file mode 100644
index 000000000..81f011a6b
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/PRFTest.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+
+import org.opensaml.core.testing.XMLObjectProviderBaseTestCase;
+import org.opensaml.core.xml.XMLObjectBuilder;
+import org.opensaml.core.xml.schema.XSAny;
+import org.opensaml.xmlsec.encryption.PRF;
+import org.opensaml.xmlsec.encryption.Parameters;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ *
+ */
+public class PRFTest extends XMLObjectProviderBaseTestCase {
+
+ private String expectedAlgorithm;
+
+ private String expectedParametersContent;
+
+ /**
+ * Constructor
+ *
+ */
+ public PRFTest() {
+ singleElementFile = "/org/opensaml/xmlsec/encryption/impl/PRF.xml";
+ childElementsFile = "/org/opensaml/xmlsec/encryption/impl/PRFChildElements.xml";
+ }
+
+ @BeforeMethod
+ protected void setUp() throws Exception {
+ expectedAlgorithm = "urn:string:foo";
+ expectedParametersContent = "MyParams";
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementUnmarshall() {
+ PRF prf = (PRF) unmarshallElement(singleElementFile);
+
+ Assert.assertNotNull(prf, "PRF");
+ Assert.assertEquals(prf.getAlgorithm(), expectedAlgorithm, "Algorithm attribute");
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testChildElementsUnmarshall() {
+ PRF prf = (PRF) unmarshallElement(childElementsFile);
+
+ Assert.assertNotNull(prf, "PRF");
+ Assert.assertEquals(prf.getAlgorithm(), expectedAlgorithm, "Algorithm attribute");
+ Assert.assertNotNull(prf.getParameters(), "Parameters child element");
+ System.out.println("Parameters: " + prf.getParameters().getClass().getName());
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementMarshall() {
+ PRF prf = (PRF) buildXMLObject(PRF.DEFAULT_ELEMENT_NAME);
+
+ prf.setAlgorithm(expectedAlgorithm);
+
+ assertXMLEquals(expectedDOM, prf);
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testChildElementsMarshall() {
+ PRF prf = (PRF) buildXMLObject(PRF.DEFAULT_ELEMENT_NAME);
+
+ prf.setAlgorithm(expectedAlgorithm);
+
+ XMLObjectBuilder<XSAny> xsAnyBuilder = builderFactory.getBuilderOrThrow(XSAny.TYPE_NAME);
+ XSAny parameters = xsAnyBuilder.buildObject(Parameters.DEFAULT_ELEMENT_NAME);
+ parameters.setTextContent(expectedParametersContent);
+ prf.setParameters(parameters);
+
+ assertXMLEquals(expectedChildElementsDOM, prf);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/SaltTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/SaltTest.java
new file mode 100644
index 000000000..6e52755f1
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/SaltTest.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+
+import org.opensaml.core.testing.XMLObjectProviderBaseTestCase;
+import org.opensaml.xmlsec.encryption.OtherSource;
+import org.opensaml.xmlsec.encryption.Salt;
+import org.opensaml.xmlsec.encryption.Specified;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ *
+ */
+public class SaltTest extends XMLObjectProviderBaseTestCase {
+
+ /**
+ * Constructor
+ *
+ */
+ public SaltTest() {
+ singleElementFile = "/org/opensaml/xmlsec/encryption/impl/Salt.xml";
+ childElementsFile = "/org/opensaml/xmlsec/encryption/impl/SaltChildElements.xml";
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementUnmarshall() {
+ Salt salt = (Salt) unmarshallElement(singleElementFile);
+
+ Assert.assertNotNull(salt, "Salt");
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testChildElementsUnmarshall() {
+ Salt salt = (Salt) unmarshallElement(childElementsFile);
+
+ Assert.assertNotNull(salt, "Salt");
+ Assert.assertNotNull(salt.getSpecified());
+ Assert.assertNotNull(salt.getOtherSource());
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementMarshall() {
+ Salt salt = (Salt) buildXMLObject(Salt.DEFAULT_ELEMENT_NAME);
+
+ assertXMLEquals(expectedDOM, salt);
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testChildElementsMarshall() {
+ Salt salt = (Salt) buildXMLObject(Salt.DEFAULT_ELEMENT_NAME);
+
+ salt.setSpecified(buildXMLObject(Specified.DEFAULT_ELEMENT_NAME));
+ salt.setOtherSource(buildXMLObject(OtherSource.DEFAULT_ELEMENT_NAME));
+
+ assertXMLEquals(expectedChildElementsDOM, salt);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/SpecifiedTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/SpecifiedTest.java
new file mode 100644
index 000000000..98648c191
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/encryption/impl/SpecifiedTest.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.xmlsec.encryption.impl;
+
+
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeMethod;
+import org.testng.Assert;
+import org.opensaml.core.testing.XMLObjectProviderBaseTestCase;
+import org.opensaml.xmlsec.encryption.Specified;
+
+/**
+ *
+ */
+public class SpecifiedTest extends XMLObjectProviderBaseTestCase {
+
+ private String expectedStringContent;
+
+ /**
+ * Constructor
+ *
+ */
+ public SpecifiedTest() {
+ singleElementFile = "/org/opensaml/xmlsec/encryption/impl/Specified.xml";
+
+ }
+
+ @BeforeMethod
+ protected void setUp() throws Exception {
+ expectedStringContent = "someBase64==";
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementUnmarshall() {
+ Specified specified = (Specified) unmarshallElement(singleElementFile);
+
+ Assert.assertNotNull(specified, "Specified");
+ Assert.assertEquals(expectedStringContent, specified.getValue(), "Specified value");
+ }
+
+ /** {@inheritDoc} */
+ @Test
+ public void testSingleElementMarshall() {
+ Specified specified = (Specified) buildXMLObject(Specified.DEFAULT_ELEMENT_NAME);
+ specified.setValue(expectedStringContent);
+
+ assertXMLEquals(expectedDOM, specified);
+ }
+
+}
diff --git a/opensaml-xmlsec-impl/src/test/resources/logback-test.xml b/opensaml-xmlsec-impl/src/test/resources/logback-test.xml
index 188709e07..3de039be6 100644
--- a/opensaml-xmlsec-impl/src/test/resources/logback-test.xml
+++ b/opensaml-xmlsec-impl/src/test/resources/logback-test.xml
@@ -14,6 +14,11 @@
<logger name="org.apache.xml.security.encryption.XMLCipherUtil">
<level value="TRACE"/>
</logger>
+
+ <logger name="org.opensaml.core.testing">
+ <level value="TRACE"/>
+ </logger>
+
<logger name="org.opensaml.xmlsec.encryption.support">
<level value="TRACE"/>
</logger>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/ConcatKDFParams.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/ConcatKDFParams.xml
new file mode 100644
index 000000000..fac2bbdec
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/ConcatKDFParams.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:ConcatKDFParams xmlns:xenc11="http://www.w3.org/2009/xmlenc11#"
+ AlgorithmID="00AA"
+ PartyUInfo="00BB"
+ PartyVInfo="00CC"
+ SuppPubInfo="00DD"
+ SuppPrivInfo="00EE" />
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsChildElements.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsChildElements.xml
new file mode 100644
index 000000000..fd9ad9caf
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/ConcatKDFParamsChildElements.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:ConcatKDFParams xmlns:xenc11="http://www.w3.org/2009/xmlenc11#"
+ AlgorithmID="00AA"
+ PartyUInfo="00BB"
+ PartyVInfo="00CC"
+ SuppPubInfo="00DD"
+ SuppPrivInfo="00EE" >
+
+ <ds:DigestMethod xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Algorithm="urn:string:foo"/>
+
+</xenc11:ConcatKDFParams>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/DerivedKey.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/DerivedKey.xml
new file mode 100644
index 000000000..bac716d68
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/DerivedKey.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:DerivedKey xmlns:xenc11="http://www.w3.org/2009/xmlenc11#">
+
+</xenc11:DerivedKey>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/DerivedKeyChildElements.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/DerivedKeyChildElements.xml
new file mode 100644
index 000000000..fac89f4ae
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/DerivedKeyChildElements.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:DerivedKey xmlns:xenc11="http://www.w3.org/2009/xmlenc11#">
+
+ <xenc11:KeyDerivationMethod></xenc11:KeyDerivationMethod>
+
+ <xenc:ReferenceList xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" ></xenc:ReferenceList>
+
+ <xenc11:DerivedKeyName></xenc11:DerivedKeyName>
+
+ <xenc11:MasterKeyName></xenc11:MasterKeyName>
+
+</xenc11:DerivedKey>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/DerivedKeyName.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/DerivedKeyName.xml
new file mode 100644
index 000000000..0f375b845
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/DerivedKeyName.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:DerivedKeyName xmlns:xenc11="http://www.w3.org/2009/xmlenc11#">someKeyName</xenc11:DerivedKeyName>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/DerivedKeyOptionalAttributes.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/DerivedKeyOptionalAttributes.xml
new file mode 100644
index 000000000..a12180ee4
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/DerivedKeyOptionalAttributes.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:DerivedKey xmlns:xenc11="http://www.w3.org/2009/xmlenc11#" Id="abc123" Recipient="theRecipient" Type="urn:string:foo">
+
+</xenc11:DerivedKey>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/IterationCount.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/IterationCount.xml
new file mode 100644
index 000000000..efeed2875
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/IterationCount.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:IterationCount xmlns:xenc11="http://www.w3.org/2009/xmlenc11#">2020</xenc11:IterationCount>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethod.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethod.xml
new file mode 100644
index 000000000..ef61ec91f
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethod.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:KeyDerivationMethod xmlns:xenc11="http://www.w3.org/2009/xmlenc11#" Algorithm="urn:string:foo">
+
+</xenc11:KeyDerivationMethod>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodChildElements.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodChildElements.xml
new file mode 100644
index 000000000..791149389
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/KeyDerivationMethodChildElements.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:KeyDerivationMethod xmlns:xenc11="http://www.w3.org/2009/xmlenc11#" Algorithm="urn:string:foo">
+ <test:SimpleElement xmlns:test="http://www.example.org/testObjects"/>
+ <test:SimpleElement xmlns:test="http://www.example.org/testObjects"/>
+ <test:SimpleElement xmlns:test="http://www.example.org/testObjects"/>
+</xenc11:KeyDerivationMethod>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/KeyLength.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/KeyLength.xml
new file mode 100644
index 000000000..794a7cb6b
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/KeyLength.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:KeyLength xmlns:xenc11="http://www.w3.org/2009/xmlenc11#">256</xenc11:KeyLength>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/MasterKeyName.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/MasterKeyName.xml
new file mode 100644
index 000000000..ec47e9e3e
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/MasterKeyName.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:MasterKeyName xmlns:xenc11="http://www.w3.org/2009/xmlenc11#">someKeyName</xenc11:MasterKeyName>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/OtherSource.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/OtherSource.xml
new file mode 100644
index 000000000..177b6a87e
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/OtherSource.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:OtherSource xmlns:xenc11="http://www.w3.org/2009/xmlenc11#" Algorithm="urn:string:foo"/>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/OtherSourceChildElements.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/OtherSourceChildElements.xml
new file mode 100644
index 000000000..c9a2b1ff1
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/OtherSourceChildElements.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:OtherSource xmlns:xenc11="http://www.w3.org/2009/xmlenc11#" Algorithm="urn:string:foo">
+ <xenc11:Parameters>MyParams</xenc11:Parameters>
+</xenc11:OtherSource>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/PBKDF2Params.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/PBKDF2Params.xml
new file mode 100644
index 000000000..3c444b5ec
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/PBKDF2Params.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:PBKDF2-params xmlns:xenc11="http://www.w3.org/2009/xmlenc11#" />
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsChildElements.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsChildElements.xml
new file mode 100644
index 000000000..92ef6bc3c
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/PBKDF2ParamsChildElements.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:PBKDF2-params xmlns:xenc11="http://www.w3.org/2009/xmlenc11#">
+ <xenc11:Salt />
+ <xenc11:IterationCount/>
+ <xenc11:KeyLength/>
+ <xenc11:PRF/>
+</xenc11:PBKDF2-params>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/PRF.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/PRF.xml
new file mode 100644
index 000000000..109edf094
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/PRF.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:PRF xmlns:xenc11="http://www.w3.org/2009/xmlenc11#" Algorithm="urn:string:foo"/>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/PRFChildElements.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/PRFChildElements.xml
new file mode 100644
index 000000000..9d8f60290
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/PRFChildElements.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:PRF xmlns:xenc11="http://www.w3.org/2009/xmlenc11#" Algorithm="urn:string:foo">
+ <xenc11:Parameters>MyParams</xenc11:Parameters>
+</xenc11:PRF>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/Salt.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/Salt.xml
new file mode 100644
index 000000000..75e350b28
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/Salt.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:Salt xmlns:xenc11="http://www.w3.org/2009/xmlenc11#" />
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/SaltChildElements.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/SaltChildElements.xml
new file mode 100644
index 000000000..8bc5faa5d
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/SaltChildElements.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:Salt xmlns:xenc11="http://www.w3.org/2009/xmlenc11#">
+ <xenc11:Specified />
+ <xenc11:OtherSource />
+</xenc11:Salt>
diff --git a/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/Specified.xml b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/Specified.xml
new file mode 100644
index 000000000..34933f871
--- /dev/null
+++ b/opensaml-xmlsec-impl/src/test/resources/org/opensaml/xmlsec/encryption/impl/Specified.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xenc11:Specified xmlns:xenc11="http://www.w3.org/2009/xmlenc11#">someBase64==</xenc11:Specified>
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list