/*
* Copyright (c) 2007, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. 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.wso2.carbon.security.util;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axis2.description.Parameter;
import org.apache.rahas.impl.AbstractIssuerConfig;
import org.apache.rahas.impl.SCTIssuerConfig;
import org.apache.rahas.impl.TokenCancelerConfig;
import org.apache.rahas.impl.TokenIssuerUtil;
import javax.xml.namespace.QName;
import java.util.Enumeration;
import java.util.Properties;
public class RahasUtil {
private RahasUtil(){}
public static Parameter getSCTIssuerConfigParameter(String cryptoImpl,
Properties cryptoProperties,
int keyComputation,
String proofKeyType,
boolean addRequestedAttachedRef,
boolean addRequestedUnattachedRef) throws Exception {
if (cryptoImpl == null || "".equals(cryptoImpl)) {
throw new Exception("Crypto impl missing");
}
OMFactory fac = OMAbstractFactory.getOMFactory();
OMElement paramElem = fac.createOMElement(new QName("parameter"), null);
paramElem.addAttribute(fac.createOMAttribute("name",
null,
SCTIssuerConfig.SCT_ISSUER_CONFIG.
getLocalPart()));
paramElem.addAttribute(fac.createOMAttribute("type",
null, Integer.toString(Parameter.OM_PARAMETER)));
OMElement elem = fac.createOMElement(
SCTIssuerConfig.SCT_ISSUER_CONFIG, paramElem);
OMElement cryptoPropElem = fac.createOMElement(
AbstractIssuerConfig.CRYPTO_PROPERTIES, elem);
OMElement cryptoElem = fac.createOMElement(
AbstractIssuerConfig.CRYPTO, cryptoPropElem);
cryptoElem.addAttribute(fac.createOMAttribute("provider", null,
cryptoImpl));
Enumeration keysEnum = cryptoProperties.keys();
while (keysEnum.hasMoreElements()) {
String key = (String) keysEnum.nextElement();
OMElement prop = fac.createOMElement(new QName("property"), cryptoElem);
prop.addAttribute(fac.createOMAttribute("name", null, key));
prop.setText(cryptoProperties.getProperty(key));
}
if (!(keyComputation == AbstractIssuerConfig.KeyComputation.KEY_COMP_PROVIDE_ENT ||
keyComputation == AbstractIssuerConfig.KeyComputation.KEY_COMP_USE_OWN_KEY ||
keyComputation == AbstractIssuerConfig.KeyComputation.KEY_COMP_USE_REQ_ENT)) {
keyComputation = AbstractIssuerConfig.KeyComputation.KEY_COMP_USE_OWN_KEY;
}
OMElement keyCompElem = fac.createOMElement(
AbstractIssuerConfig.KeyComputation.KEY_COMPUTATION, elem);
keyCompElem.setText(Integer.toString(keyComputation));
if (proofKeyType == null || "".equals(proofKeyType)) {
proofKeyType = TokenIssuerUtil.BINARY_SECRET;
} else if (!(TokenIssuerUtil.BINARY_SECRET.equals(proofKeyType)) ||
TokenIssuerUtil.ENCRYPTED_KEY.equals(proofKeyType)) {
throw new Exception("Invalid proof token type configuration : " + proofKeyType);
}
OMElement proofKeyTypeElem = fac.createOMElement(AbstractIssuerConfig.PROOF_KEY_TYPE, elem);
proofKeyTypeElem.setText(proofKeyType);
if (addRequestedAttachedRef) {
fac.createOMElement(AbstractIssuerConfig.ADD_REQUESTED_ATTACHED_REF, elem);
}
if (addRequestedUnattachedRef) {
fac.createOMElement(AbstractIssuerConfig.ADD_REQUESTED_UNATTACHED_REF, elem);
}
Parameter param = new Parameter();
param.setName(SCTIssuerConfig.SCT_ISSUER_CONFIG.getLocalPart());
param.setParameterType(Parameter.OM_PARAMETER);
param.setValue(paramElem);
param.setParameterElement(paramElem);
return param;
}
public static Parameter getTokenCancelerConfigParameter() {
OMFactory fac = OMAbstractFactory.getOMFactory();
OMElement paramElem = fac.createOMElement(new QName("parameter"), null);
paramElem.addAttribute(fac.createOMAttribute("name",
null,
TokenCancelerConfig.TOKEN_CANCELER_CONFIG.
getLocalPart()));
paramElem.addAttribute(fac.createOMAttribute("type",
null, Integer.toString(Parameter.OM_PARAMETER).
toString()));
fac.createOMElement(TokenCancelerConfig.TOKEN_CANCELER_CONFIG,
paramElem);
Parameter param = new Parameter();
param.setName(TokenCancelerConfig.TOKEN_CANCELER_CONFIG.getLocalPart());
param.setParameterElement(paramElem);
param.setValue(paramElem);
param.setParameterType(Parameter.OM_PARAMETER);
return param;
}
}