SecurityHeaderElement she = (SecurityHeaderElement)next;
SignedMessageHeader smh = new SignedMessageHeader(she);
secMessage.replaceHeader(she, smh);
targets.add(smh);
} else if(next instanceof Header){
Header header = (Header)next;
SignedMessageHeader smh = toSignedMessageHeader(header, fpContext);
secMessage.replaceHeader(header, smh);
targets.add(smh);
}
}
SecurityHeader sh = fpContext.getSecurityHeader();
headers = sh.getHeaders(name.getLocalPart(), name.getNamespaceURI());
while(headers.hasNext()){
SecurityHeaderElement she = (SecurityHeaderElement) headers.next();
if(she instanceof SignedMessageHeader){
targets.add((SignedMessageHeader)she);
} else{
if(she.getId() == null){
she.setId(fpContext.generateID());
}
SignedMessageHeader smh = new SignedMessageHeader(she);
targets.add(smh);
}
}
}
if(targets.size() <= 0){
if(signatureTarget.getEnforce()){
throw new XWSSecurityException("SignatureTarget with URI "+signatureTarget.getValue()+
" is not in the message");
} else
continue;
}
if(logger.isLoggable(Level.FINEST)){
logger.log(Level.FINEST, "Number of nodes "+ targets.size());
logger.log(Level.FINEST, "+++++++++++++++END+++++++++++++++");
}
HashMap elementCache = null;
if(fpContext != null ){
elementCache = fpContext.getElementCache();
}
for(int i = 0; i < targets.size(); i++){
SignedMessagePart targetRef = targets.get(i);
ArrayList clonedTransformList = (ArrayList)transformList.clone();
if (exclTransformToBeAdded) {
// exc-14-n must be one of the last transforms under ReferenceList by default.
String transformAlgo = MessageConstants.TRANSFORM_C14N_EXCL_OMIT_COMMENTS;
((NamespaceContextEx)fpContext.getNamespaceContext()).addExc14NS();
ExcC14NParameterSpec spec = null;
if(!fpContext.getDisableIncPrefix()){
ArrayList list = new ArrayList();
/*list.add("wsu");list.add("wsse");*/ list.add("S");
spec = new ExcC14NParameterSpec(list); //TO BE SET
}
Transform transform = signatureFactory.newTransform(transformAlgo,spec);
// Commenting this - content is now set directly in com.sun.xml.ws.security.opt.crypto.dsig.Transform
// class
// if(!fpContext.getDisableIncPrefix()){
// List contentList = setInclusiveNamespaces(spec);
// ((com.sun.xml.ws.security.opt.crypto.dsig.Transform)transform).setContent(contentList);
// }
clonedTransformList.add(transform);
}
String id = targetRef.getId();
if (id == null || id.equals("")) {
id = fpContext.generateID();
if(!verify){
targetRef.setId(id);
} else{
//add to context. dont modify the message.
elementCache.put(id, targetRef);
}
}
if(logger.isLoggable(Level.FINEST))
logger.log(Level.FINEST, "SignedInfo val id "+id);
targetURI = "#"+id;
Reference reference = null;
reference = signatureFactory.newReference(targetURI,digestMethod,clonedTransformList,null,null);
references.add(reference);
}
continue;
} else if(SignatureTarget.TARGET_TYPE_VALUE_URI.equals(signatureType)){
targetURI = signatureTarget.getValue();
if(targetURI == null){
targetURI="";
}
QName policyName = signatureTarget.getPolicyQName();
if(policyName != null && policyName == MessageConstants.SCT_NAME){
String _uri = targetURI;
if(targetURI.length() > 0 && targetURI.charAt(0)=='#'){
_uri = targetURI.substring(1);
}
com.sun.xml.ws.security.IssuedTokenContext ictx = fpContext.getIssuedTokenContext(_uri);
com.sun.xml.ws.security.SecurityContextToken sct1 =(com.sun.xml.ws.security.SecurityContextToken)ictx.getSecurityToken();
targetURI = sct1.getWsuId();
}
if(MessageConstants.PROCESS_ALL_ATTACHMENTS.equals(targetURI)){
AttachmentSet as = secMessage.getAttachments();
if(as != null && as.isEmpty()){
logger.log(Level.WARNING, LogStringsMessages.WSS_1766_NO_ATTACHMENT_PARTS_TOBE_SECURED());
continue;
}
for(Attachment attachment : as){
String cid = "cid:" + attachment.getContentId();
Reference reference = signatureFactory.newReference(cid, digestMethod, transformList, null, null);
references.add(reference);
}
continue;
} else{
if (exclTransformToBeAdded) {
String _uri = targetURI;
if(targetURI.length() > 0 && targetURI.charAt(0)=='#'){
_uri = targetURI.substring(1);
}
Object reqdPart = getPartFromId(fpContext, _uri);
if(reqdPart != null){
String transformAlgo = MessageConstants.TRANSFORM_C14N_EXCL_OMIT_COMMENTS;
ExcC14NParameterSpec spec = null;
if(!fpContext.getDisableIncPrefix()){
ArrayList list = new ArrayList();
list.add("wsu");list.add("wsse"); list.add("S");
spec = new ExcC14NParameterSpec(list);
}
Transform transform = signatureFactory.newTransform(transformAlgo,spec);
// Commenting this - content is now set directly in com.sun.xml.ws.security.opt.crypto.dsig.Transform
// class
// if(!fpContext.getDisableIncPrefix()){
// List contentList = setInclusiveNamespaces(spec);
// ((com.sun.xml.ws.security.opt.crypto.dsig.Transform)transform).setContent(contentList);
// }
transformList.add(transform);
}
}
if(targetURI.equals(SignatureTarget.ALL_MESSAGE_HEADERS)){
//throw new UnsupportedOperationException(SignatureTarget.ALL_MESSAGE_HEADERS +
// " not supported yet");
ArrayList headers = secMessage.getHeaders();
for(int i = 0; i < headers.size(); i++){
Object header = headers.get(i);
String tmpUri = null;
if(header instanceof SignedMessageHeader){
tmpUri = "#" + ((SignedMessageHeader)header).getId();
} else if(header instanceof SecurityHeaderElement){
SecurityHeaderElement she = (SecurityHeaderElement)header;
SignedMessageHeader smh = new SignedMessageHeader(she);
String id = smh.getId();
if(id == null){
id = fpContext.generateID();
smh.setId(id);
}
secMessage.replaceHeader(she, smh);
tmpUri = "#" + id;
} else if(header instanceof Header){
Header jwHeader = (Header)header;
tmpUri = fpContext.generateID();
SignedMessageHeader smh = createSignedMessageHeader(jwHeader, tmpUri, fpContext);
secMessage.replaceHeader(jwHeader, smh);
if (!tmpUri.startsWith("#")) {
tmpUri = "#" + tmpUri;