Author: ruchithf
Date: Sat Jul 14 04:51:22 2007
New Revision: 556267
URL: http://svn.apache.org/viewvc?view=rev&rev=556267
Log:
Fixed some typos
Got rid of hardcoded key alias for the trusted service's cert in SAMLTokenIssuer
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/RahasData.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenCanceler.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenIssuer.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRenewer.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRequestDispatcher.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRequestDispatcherConfig.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenValidator.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TrustUtil.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuer.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/TokenIssuerUtil.java
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java
Sat Jul 14 04:51:22 2007
@@ -131,7 +131,7 @@
}
/*
- * Checking wether MTOMSerializable is there. If so set optimizeElement.
+ * Checking whether MTOMSerializable is there. If so set
optimizeElement.
* */
if(rpd.isMTOMSerialize()){
String optimizeElement = rpd.getOptimizeParts();
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
Sat Jul 14 04:51:22 2007
@@ -24,7 +24,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.rahas.Token;
-import org.apache.rahas.TrustException;
import org.apache.rampart.policy.RampartPolicyData;
import org.apache.rampart.util.Axis2Util;
import org.apache.rampart.util.RampartUtil;
@@ -34,12 +33,10 @@
import org.apache.ws.security.WSSecurityEngineResult;
import org.apache.ws.security.WSSecurityException;
import org.apache.ws.security.components.crypto.Crypto;
-import org.apache.ws.security.handler.WSHandlerResult;
import org.apache.ws.security.saml.SAMLKeyInfo;
import org.apache.ws.security.saml.SAMLUtil;
import org.apache.ws.security.util.WSSecurityUtil;
import org.opensaml.SAMLAssertion;
-import org.opensaml.SAMLException;
import javax.xml.namespace.QName;
@@ -186,7 +183,7 @@
if(dotDebug){
t3 = System.currentTimeMillis();
tlog.debug("processHeader by WSSecurityEngine took : "
+ (t1 - t0) +
- ", DOOM Converstion took :" + (t2 - t1)
+
+ ", DOOM conversion took :" + (t2 - t1) +
", PolicyBasedResultsValidattor took "
+ (t3 - t2));
}
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
(original)
+++
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
Sat Jul 14 04:51:22 2007
@@ -21,7 +21,7 @@
canotFindContextIdentifier = Cannot find context identifier
missingWSAAction = wsa:Action value missing
missingWSATo = wsa:To address value missing
-cannotCrateCryptoInstance = Cannot create Crypto instace
+cannotCrateCryptoInstance = Cannot create Crypto instance
noInfoForCBhandler = Cannot obtain a callback handler with available
configuration information
missingEncryptionUser=Encryption user not specified (The context is created by
the initiating party)
@@ -32,7 +32,7 @@
errorInObtainingToken=Error in obtaining a token
errorInExtractingMsgProps = Error in extracting message properties
userMissing = No user value in the rampart configuration policy
-cbHandlerMissing = Password CallbackHandler not speficied in rampart
configuration policy or the CallbackHandler instance not available in the
MessageContext
+cbHandlerMissing = Password CallbackHandler not specified in rampart
configuration policy or the CallbackHandler instance not available in the
MessageContext
errorInGettingPasswordForUser = Error in getting password for user : \"{0}\"
noPasswordForUser = No password supplied by the callback handler for the user
: \"{0}\"
unsupportedSignedSupportingToken = Unsupported SignedSupportingToken : \"{0}\"
@@ -53,11 +53,11 @@
errorCreatingRahasToken = Error in creating a org.apache.rahas.Token instance
UnsupportedTokenInSupportingToken = Unsupported token in supporting tokens
encryptionTokenMissing = Encryption token missing
-signatureTokenMissing = Signature token missging
+signatureTokenMissing = Signature token missing
errorInEncryption = Error during encryption
sctIssuerPolicyMissing = sct-issuer-policy parameter missing
-errorInTokenCancellation = Error in cancelling token
-tokenToBeCancelledInvalid = Token to be cancelled is invalid or expired
+errorInTokenCancellation = Error in canceling token
+tokenToBeCancelledInvalid = Token to be canceled is invalid or expired
errorCreatingRSTTemplateForSCT=Error in creating RST template for SCT
noSecurityToken = Missing security token
noSecurityResults= No security processing results from the incoming message
Modified:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/RahasData.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/RahasData.java?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/RahasData.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/RahasData.java
Sat Jul 14 04:51:22 2007
@@ -126,7 +126,7 @@
/**
* Processes the authenticated user information from the WSS4J security
- * resutls.
+ * results.
*
* @throws TrustException
*/
Modified:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java
Sat Jul 14 04:51:22 2007
@@ -41,7 +41,7 @@
* Also this holds the <code>OMElement</code>s representing the token in its
* present state and the previous state.
*
- * These tokens are stired using the storage mechanism provided via the
+ * These tokens are stored using the storage mechanism provided via the
* <code>TokenStorage</code> interface.
* @see org.apache.rahas.TokenStorage
*/
@@ -168,14 +168,14 @@
}
/**
- * @return Returns the chnaged.
+ * @return Returns the changed.
*/
public boolean isChanged() {
return changed;
}
/**
- * @param chnaged The chnaged to set.
+ * @param chnaged The changed to set.
*/
public void setChanged(boolean chnaged) {
this.changed = chnaged;
Modified:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenCanceler.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenCanceler.java?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenCanceler.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenCanceler.java
Sat Jul 14 04:51:22 2007
@@ -46,7 +46,7 @@
* This is the <configuration> element of the
* token-dispatcher-configuration
*
- * @param configElement <code>OMElement</code> representing the
configuation
+ * @param configElement <code>OMElement</code> representing the
configuration
*/
void setConfigurationElement(OMElement configElement);
Modified:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenIssuer.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenIssuer.java?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenIssuer.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenIssuer.java
Sat Jul 14 04:51:22 2007
@@ -60,7 +60,7 @@
* This is the <configuration> element of the
* token-dispatcher-configuration
*
- * @param configElement <code>OMElement</code> representing the
configuation
+ * @param configElement <code>OMElement</code> representing the
configuration
*/
void setConfigurationElement(OMElement configElement);
Modified:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRenewer.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRenewer.java?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRenewer.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRenewer.java
Sat Jul 14 04:51:22 2007
@@ -47,7 +47,7 @@
* token-dispatcher-configuration
*
* @param configElement
- * <code>OMElement</code> representing the configuation
+ * <code>OMElement</code> representing the configuration
*/
public void setConfigurationElement(String configElement);
Modified:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRequestDispatcher.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRequestDispatcher.java?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRequestDispatcher.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRequestDispatcher.java
Sat Jul 14 04:51:22 2007
@@ -50,7 +50,7 @@
MessageContext outMsgCtx) throws TrustException
{
if(mlog.isDebugEnabled()){
- mlog.debug("*********************** TokenRequestDispatcher
recieved \n"+inMsgCtx.getEnvelope());
+ mlog.debug("*********************** TokenRequestDispatcher
received \n"+inMsgCtx.getEnvelope());
}
RahasData data = new RahasData(inMsgCtx);
@@ -68,7 +68,7 @@
SOAPEnvelope response = issuer.issue(data);
- //set the response wsa/soap action in teh out message context
+ //set the response wsa/soap action in the out message context
outMsgCtx.getOptions().setAction(issuer.getResponseAction(data));
if(mlog.isDebugEnabled()){
Modified:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRequestDispatcherConfig.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRequestDispatcherConfig.java?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRequestDispatcherConfig.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRequestDispatcherConfig.java
Sat Jul 14 04:51:22 2007
@@ -120,7 +120,7 @@
if (conf.issuers == null) {
conf.issuers = new Hashtable();
}
- //If the token type is not aleady declared then add it to the
+ //If the token type is not already declared then add it to the
//table with the issuer classname
if (!conf.issuers.keySet().contains(value)) {
conf.issuers.put(value, issuerClass);
Modified:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenValidator.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenValidator.java?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenValidator.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TokenValidator.java
Sat Jul 14 04:51:22 2007
@@ -47,7 +47,7 @@
* token-dispatcher-configuration
*
* @param configElement
- * <code>OMElement</code> representing the configuation
+ * <code>OMElement</code> representing the configuration
*/
public void setConfigurationElement(String configElement);
Modified:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TrustUtil.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TrustUtil.java?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TrustUtil.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/TrustUtil.java
Sat Jul 14 04:51:22 2007
@@ -47,7 +47,7 @@
private static final QName NAME = new QName("name");
/**
- * Create a wsse:Reference element with the given uri and the value type
+ * Create a wsse:Reference element with the given URI and the value type
*
* @param doc
* @param refUri
Modified:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties
(original)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties
Sat Jul 14 04:51:22 2007
@@ -31,7 +31,7 @@
errorInObtainingToken = Error in obtaining token from : \"{0}\"
incorrectConfiguration = The given configuration element is not a
"token-dispatcher-configuration" element
missingClassName = Class attribute missing
-cannotLoadClass = Error in loading and instanciating the class \"{0}\"
+cannotLoadClass = Error in loading and instantiating the class \"{0}\"
invalidTokenTypeDefinition = Invalid 'tokenType' definition in \"{0}\" :
\"{1}\"
errorLoadingConfigFile = Error in loading configuration file : \"{0}\"
defaultIssuerMissing = The default issuer must be specified
@@ -50,9 +50,9 @@
invlidTTL = timeToLive (in milliseconds) must be a positive long value.
invalidKeysize = Invalid key size
unsupportedWSTVersion = Unsupported WS-Trust version
-unsupportedKeyType = Upsupported KeyType
+unsupportedKeyType = Unsupported KeyType
invalidAppliesToElem = Invalid AppliesTo element
-errorSettingUpRequestorEntropy = Error setting up requestor entropy
+errorSettingUpRequestorEntropy = Error setting up requester entropy
errorInProcessingSTR = Error in processing SecurityTokenReference : {0}
cannotObtainTokenIdentifier = Cannot obtain token identifier
lifeTimeProcessingError = Error in processing Lifetime : {0}
@@ -71,7 +71,7 @@
samlIssuerKeyPasswdMissing = issuerKeyPassword missing in SAMLTokenIssuer
configuration
samlIssuerKeyAliasMissing = user value missing in the SAMLTokenIssuer
configuration
samlConverstionError = Error in converting a SAML token to DOOM
-samlAssertionCreationError = Error in creating a SAMLToken using opensaml
library
+samlAssertionCreationError = Error in creating a SAMLToken using Opensaml
library
aliasMissingForService = Certificate alias missing for service : \"{0}\"
samlIssuerNameMissing = issuerName value missing in the SAMLTokenIssuer
configuration
Modified:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuer.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuer.java?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuer.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuer.java
Sat Jul 14 04:51:22 2007
@@ -141,7 +141,7 @@
*
* If the KeyType is Bearer then issue a Bearer assertion
*
- * If the key type is missing we will issue a HoK asserstion
+ * If the key type is missing we will issue a HoK assertion
*/
String keyType = data.getKeyType();
@@ -276,12 +276,12 @@
X509Certificate serviceCert = null;
try {
- // Get ApliesTo to figureout which service to issue the token
+ // Get ApliesTo to figure out which service to issue the token
// for
serviceCert = getServiceCert(config, crypto, data
.getAppliesToAddress());
- // Ceate the encrypted key
+ // Create the encrypted key
WSSecEncryptedKey encrKeyBuilder = new WSSecEncryptedKey();
// Use thumbprint id
@@ -376,20 +376,18 @@
private X509Certificate getServiceCert(SAMLTokenIssuerConfig config,
Crypto crypto, String serviceAddress) throws WSSecurityException {
- return crypto.getCertificates("bob")[0];
-//
-// if (serviceAddress != null && !"".equals(serviceAddress)) {
-// String alias = (String)
config.trustedServices.get(serviceAddress);
-// if (alias != null) {
-// return crypto.getCertificates(alias)[0];
-// } else {
-// alias = (String) config.trustedServices.get("*");
-// return crypto.getCertificates(alias)[0];
-// }
-// } else {
-// String alias = (String) config.trustedServices.get("*");
-// return crypto.getCertificates(alias)[0];
-// }
+ if (serviceAddress != null && !"".equals(serviceAddress)) {
+ String alias = (String) config.trustedServices.get(serviceAddress);
+ if (alias != null) {
+ return crypto.getCertificates(alias)[0];
+ } else {
+ alias = (String) config.trustedServices.get("*");
+ return crypto.getCertificates(alias)[0];
+ }
+ } else {
+ String alias = (String) config.trustedServices.get("*");
+ return crypto.getCertificates(alias)[0];
+ }
}
@@ -516,11 +514,8 @@
}
}
- /*
- * (non-Javadoc)
- *
- * @see
org.apache.rahas.TokenIssuer#getResponseAction(org.apache.axiom.om.OMElement,
- * org.apache.axis2.context.MessageContext)
+ /**
+ * [EMAIL PROTECTED]
*/
public String getResponseAction(RahasData data) throws TrustException {
return TrustUtil.getActionValue(data.getVersion(),
@@ -544,29 +539,23 @@
}
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.rahas.TokenIssuer#setConfigurationFile(java.lang.String)
+ /**
+ * [EMAIL PROTECTED]
*/
public void setConfigurationFile(String configFile) {
// TODO TODO SAMLTokenIssuer setConfigurationFile
}
-
- /*
- * (non-Javadoc)
- *
- * @see
org.apache.rahas.TokenIssuer#setConfigurationElement(org.apache.axiom.om.OMElement)
+
+ /**
+ * [EMAIL PROTECTED]
*/
public void setConfigurationElement(OMElement configElement) {
// TODO TODO SAMLTokenIssuer setConfigurationElement
}
- /*
- * (non-Javadoc)
- *
- * @see
org.apache.rahas.TokenIssuer#setConfigurationParamName(java.lang.String)
+ /**
+ * [EMAIL PROTECTED]
*/
public void setConfigurationParamName(String configParamName) {
this.configParamName = configParamName;
Modified:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/TokenIssuerUtil.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/TokenIssuerUtil.java?view=diff&rev=556267&r1=556266&r2=556267
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/TokenIssuerUtil.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/TokenIssuerUtil.java
Sat Jul 14 04:51:22 2007
@@ -52,7 +52,7 @@
try {
if (reqEntrPresent &&
keyComputation !=
SAMLTokenIssuerConfig.KeyComputation.KEY_COMP_USE_OWN_KEY) {
- //If there is requestor entropy and if the issuer is not
+ //If there is requester entropy and if the issuer is not
//configured to use its own key
if (keyComputation ==
@@ -89,7 +89,7 @@
if (config.keyComputation ==
AbstractIssuerConfig.KeyComputation.KEY_COMP_PROVIDE_ENT
&& data.getRequestEntropy() != null) {
- //If we there's requestor entropy and its configured to provide
+ //If we there's requester entropy and its configured to provide
//entropy then we have to set the entropy value and
//set the RPT to include a ComputedKey element