author | mullan |
Fri, 21 Nov 2014 15:23:36 -0500 | |
changeset 27747 | 3a271dc8b758 |
parent 25859 | 3317bb8137f4 |
permissions | -rw-r--r-- |
2 | 1 |
/* |
1337 | 2 |
* reserved comment block |
3 |
* DO NOT REMOVE OR ALTER! |
|
4 |
*/ |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
5 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
6 |
* Licensed to the Apache Software Foundation (ASF) under one |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
7 |
* or more contributor license agreements. See the NOTICE file |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
8 |
* distributed with this work for additional information |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
9 |
* regarding copyright ownership. The ASF licenses this file |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
10 |
* to you under the Apache License, Version 2.0 (the |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
11 |
* "License"); you may not use this file except in compliance |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
12 |
* with the License. You may obtain a copy of the License at |
2 | 13 |
* |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
14 |
* http://www.apache.org/licenses/LICENSE-2.0 |
2 | 15 |
* |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
16 |
* Unless required by applicable law or agreed to in writing, |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
17 |
* software distributed under the License is distributed on an |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
18 |
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
19 |
* KIND, either express or implied. See the License for the |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
20 |
* specific language governing permissions and limitations |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
21 |
* under the License. |
2 | 22 |
*/ |
1337 | 23 |
/* |
24970
094bfaa699c3
8046044: Fix raw and unchecked lint warnings in XML Signature Impl
mullan
parents:
23010
diff
changeset
|
24 |
* Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. |
1337 | 25 |
*/ |
2 | 26 |
/* |
27 |
* =========================================================================== |
|
28 |
* |
|
29 |
* (C) Copyright IBM Corp. 2003 All Rights Reserved. |
|
30 |
* |
|
31 |
* =========================================================================== |
|
32 |
*/ |
|
33 |
/* |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
34 |
* $Id: DOMXMLSignature.java 1333415 2012-05-03 12:03:51Z coheigea $ |
2 | 35 |
*/ |
36 |
package org.jcp.xml.dsig.internal.dom; |
|
37 |
||
38 |
import javax.xml.crypto.*; |
|
39 |
import javax.xml.crypto.dom.*; |
|
40 |
import javax.xml.crypto.dsig.*; |
|
41 |
import javax.xml.crypto.dsig.dom.DOMSignContext; |
|
42 |
import javax.xml.crypto.dsig.dom.DOMValidateContext; |
|
43 |
import javax.xml.crypto.dsig.keyinfo.KeyInfo; |
|
44 |
||
45 |
import java.security.InvalidKeyException; |
|
46 |
import java.security.Key; |
|
1337 | 47 |
import java.security.Provider; |
2 | 48 |
import java.util.Collections; |
49 |
import java.util.ArrayList; |
|
50 |
import java.util.HashMap; |
|
51 |
import java.util.List; |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
52 |
|
18240 | 53 |
import org.w3c.dom.Attr; |
2 | 54 |
import org.w3c.dom.Document; |
55 |
import org.w3c.dom.Element; |
|
56 |
import org.w3c.dom.Node; |
|
57 |
||
58 |
import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException; |
|
59 |
import com.sun.org.apache.xml.internal.security.utils.Base64; |
|
60 |
||
61 |
/** |
|
62 |
* DOM-based implementation of XMLSignature. |
|
63 |
* |
|
64 |
* @author Sean Mullan |
|
65 |
* @author Joyce Leung |
|
66 |
*/ |
|
67 |
public final class DOMXMLSignature extends DOMStructure |
|
68 |
implements XMLSignature { |
|
69 |
||
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
70 |
private static java.util.logging.Logger log = |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
71 |
java.util.logging.Logger.getLogger("org.jcp.xml.dsig.internal.dom"); |
2 | 72 |
private String id; |
73 |
private SignatureValue sv; |
|
74 |
private KeyInfo ki; |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
75 |
private List<XMLObject> objects; |
2 | 76 |
private SignedInfo si; |
77 |
private Document ownerDoc = null; |
|
78 |
private Element localSigElem = null; |
|
79 |
private Element sigElem = null; |
|
80 |
private boolean validationStatus; |
|
81 |
private boolean validated = false; |
|
82 |
private KeySelectorResult ksr; |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
83 |
private HashMap<String, XMLStructure> signatureIdMap; |
2 | 84 |
|
85 |
static { |
|
86 |
com.sun.org.apache.xml.internal.security.Init.init(); |
|
87 |
} |
|
88 |
||
89 |
/** |
|
90 |
* Creates a <code>DOMXMLSignature</code> from the specified components. |
|
91 |
* |
|
92 |
* @param si the <code>SignedInfo</code> |
|
93 |
* @param ki the <code>KeyInfo</code>, or <code>null</code> if not specified |
|
94 |
* @param objs a list of <code>XMLObject</code>s or <code>null</code> |
|
95 |
* if not specified. The list is copied to protect against subsequent |
|
96 |
* modification. |
|
97 |
* @param id an optional id (specify <code>null</code> to omit) |
|
98 |
* @param signatureValueId an optional id (specify <code>null</code> to |
|
99 |
* omit) |
|
100 |
* @throws NullPointerException if <code>si</code> is <code>null</code> |
|
101 |
*/ |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
102 |
public DOMXMLSignature(SignedInfo si, KeyInfo ki, |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
103 |
List<? extends XMLObject> objs, |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
104 |
String id, String signatureValueId) |
2 | 105 |
{ |
106 |
if (si == null) { |
|
107 |
throw new NullPointerException("signedInfo cannot be null"); |
|
108 |
} |
|
109 |
this.si = si; |
|
110 |
this.id = id; |
|
111 |
this.sv = new DOMSignatureValue(signatureValueId); |
|
27747 | 112 |
List<XMLObject> tempList = |
113 |
Collections.checkedList(new ArrayList<XMLObject>(), |
|
114 |
XMLObject.class); |
|
115 |
if (objs != null) { |
|
116 |
tempList.addAll(objs); |
|
2 | 117 |
} |
27747 | 118 |
this.objects = Collections.unmodifiableList(tempList); |
2 | 119 |
this.ki = ki; |
120 |
} |
|
121 |
||
122 |
/** |
|
123 |
* Creates a <code>DOMXMLSignature</code> from XML. |
|
124 |
* |
|
125 |
* @param sigElem Signature element |
|
126 |
* @throws MarshalException if XMLSignature cannot be unmarshalled |
|
127 |
*/ |
|
1337 | 128 |
public DOMXMLSignature(Element sigElem, XMLCryptoContext context, |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
129 |
Provider provider) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
130 |
throws MarshalException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
131 |
{ |
2 | 132 |
localSigElem = sigElem; |
133 |
ownerDoc = localSigElem.getOwnerDocument(); |
|
134 |
||
135 |
// get Id attribute, if specified |
|
136 |
id = DOMUtils.getAttributeValue(localSigElem, "Id"); |
|
137 |
||
138 |
// unmarshal SignedInfo |
|
19051
6c0cfc00b3ed
8012288: XML DSig API allows wrong tag names and extra elements in SignedInfo
mullan
parents:
18780
diff
changeset
|
139 |
Element siElem = DOMUtils.getFirstChildElement(localSigElem, |
6c0cfc00b3ed
8012288: XML DSig API allows wrong tag names and extra elements in SignedInfo
mullan
parents:
18780
diff
changeset
|
140 |
"SignedInfo"); |
1337 | 141 |
si = new DOMSignedInfo(siElem, context, provider); |
2 | 142 |
|
143 |
// unmarshal SignatureValue |
|
19051
6c0cfc00b3ed
8012288: XML DSig API allows wrong tag names and extra elements in SignedInfo
mullan
parents:
18780
diff
changeset
|
144 |
Element sigValElem = DOMUtils.getNextSiblingElement(siElem, |
6c0cfc00b3ed
8012288: XML DSig API allows wrong tag names and extra elements in SignedInfo
mullan
parents:
18780
diff
changeset
|
145 |
"SignatureValue"); |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
146 |
sv = new DOMSignatureValue(sigValElem, context); |
2 | 147 |
|
148 |
// unmarshal KeyInfo, if specified |
|
149 |
Element nextSibling = DOMUtils.getNextSiblingElement(sigValElem); |
|
150 |
if (nextSibling != null && nextSibling.getLocalName().equals("KeyInfo")) { |
|
1337 | 151 |
ki = new DOMKeyInfo(nextSibling, context, provider); |
2 | 152 |
nextSibling = DOMUtils.getNextSiblingElement(nextSibling); |
153 |
} |
|
154 |
||
155 |
// unmarshal Objects, if specified |
|
156 |
if (nextSibling == null) { |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
157 |
objects = Collections.emptyList(); |
2 | 158 |
} else { |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
159 |
List<XMLObject> tempObjects = new ArrayList<XMLObject>(); |
2 | 160 |
while (nextSibling != null) { |
19051
6c0cfc00b3ed
8012288: XML DSig API allows wrong tag names and extra elements in SignedInfo
mullan
parents:
18780
diff
changeset
|
161 |
String name = nextSibling.getLocalName(); |
6c0cfc00b3ed
8012288: XML DSig API allows wrong tag names and extra elements in SignedInfo
mullan
parents:
18780
diff
changeset
|
162 |
if (!name.equals("Object")) { |
6c0cfc00b3ed
8012288: XML DSig API allows wrong tag names and extra elements in SignedInfo
mullan
parents:
18780
diff
changeset
|
163 |
throw new MarshalException("Invalid element name: " + name + |
6c0cfc00b3ed
8012288: XML DSig API allows wrong tag names and extra elements in SignedInfo
mullan
parents:
18780
diff
changeset
|
164 |
", expected KeyInfo or Object"); |
6c0cfc00b3ed
8012288: XML DSig API allows wrong tag names and extra elements in SignedInfo
mullan
parents:
18780
diff
changeset
|
165 |
} |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
166 |
tempObjects.add(new DOMXMLObject(nextSibling, |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
167 |
context, provider)); |
2 | 168 |
nextSibling = DOMUtils.getNextSiblingElement(nextSibling); |
169 |
} |
|
170 |
objects = Collections.unmodifiableList(tempObjects); |
|
171 |
} |
|
172 |
} |
|
173 |
||
174 |
public String getId() { |
|
175 |
return id; |
|
176 |
} |
|
177 |
||
178 |
public KeyInfo getKeyInfo() { |
|
179 |
return ki; |
|
180 |
} |
|
181 |
||
182 |
public SignedInfo getSignedInfo() { |
|
183 |
return si; |
|
184 |
} |
|
185 |
||
24970
094bfaa699c3
8046044: Fix raw and unchecked lint warnings in XML Signature Impl
mullan
parents:
23010
diff
changeset
|
186 |
public List<XMLObject> getObjects() { |
2 | 187 |
return objects; |
188 |
} |
|
189 |
||
190 |
public SignatureValue getSignatureValue() { |
|
191 |
return sv; |
|
192 |
} |
|
193 |
||
194 |
public KeySelectorResult getKeySelectorResult() { |
|
195 |
return ksr; |
|
196 |
} |
|
197 |
||
198 |
public void marshal(Node parent, String dsPrefix, DOMCryptoContext context) |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
199 |
throws MarshalException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
200 |
{ |
2 | 201 |
marshal(parent, null, dsPrefix, context); |
202 |
} |
|
203 |
||
204 |
public void marshal(Node parent, Node nextSibling, String dsPrefix, |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
205 |
DOMCryptoContext context) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
206 |
throws MarshalException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
207 |
{ |
2 | 208 |
ownerDoc = DOMUtils.getOwnerDocument(parent); |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
209 |
sigElem = DOMUtils.createElement(ownerDoc, "Signature", |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
210 |
XMLSignature.XMLNS, dsPrefix); |
2 | 211 |
|
212 |
// append xmlns attribute |
|
1337 | 213 |
if (dsPrefix == null || dsPrefix.length() == 0) { |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
214 |
sigElem.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns", |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
215 |
XMLSignature.XMLNS); |
2 | 216 |
} else { |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
217 |
sigElem.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:" + |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
218 |
dsPrefix, XMLSignature.XMLNS); |
2 | 219 |
} |
220 |
||
221 |
// create and append SignedInfo element |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
222 |
((DOMSignedInfo)si).marshal(sigElem, dsPrefix, context); |
2 | 223 |
|
224 |
// create and append SignatureValue element |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
225 |
((DOMSignatureValue)sv).marshal(sigElem, dsPrefix, context); |
2 | 226 |
|
227 |
// create and append KeyInfo element if necessary |
|
228 |
if (ki != null) { |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
229 |
((DOMKeyInfo)ki).marshal(sigElem, null, dsPrefix, context); |
2 | 230 |
} |
231 |
||
232 |
// create and append Object elements if necessary |
|
233 |
for (int i = 0, size = objects.size(); i < size; i++) { |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
234 |
((DOMXMLObject)objects.get(i)).marshal(sigElem, dsPrefix, context); |
2 | 235 |
} |
236 |
||
237 |
// append Id attribute |
|
238 |
DOMUtils.setAttributeID(sigElem, "Id", id); |
|
239 |
||
240 |
parent.insertBefore(sigElem, nextSibling); |
|
241 |
} |
|
242 |
||
243 |
public boolean validate(XMLValidateContext vc) |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
244 |
throws XMLSignatureException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
245 |
{ |
2 | 246 |
if (vc == null) { |
247 |
throw new NullPointerException("validateContext is null"); |
|
248 |
} |
|
249 |
||
250 |
if (!(vc instanceof DOMValidateContext)) { |
|
251 |
throw new ClassCastException |
|
252 |
("validateContext must be of type DOMValidateContext"); |
|
253 |
} |
|
254 |
||
255 |
if (validated) { |
|
256 |
return validationStatus; |
|
257 |
} |
|
258 |
||
259 |
// validate the signature |
|
260 |
boolean sigValidity = sv.validate(vc); |
|
261 |
if (!sigValidity) { |
|
262 |
validationStatus = false; |
|
263 |
validated = true; |
|
264 |
return validationStatus; |
|
265 |
} |
|
266 |
||
267 |
// validate all References |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
268 |
List<Reference> refs = this.si.getReferences(); |
2 | 269 |
boolean validateRefs = true; |
270 |
for (int i = 0, size = refs.size(); validateRefs && i < size; i++) { |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
271 |
Reference ref = refs.get(i); |
2 | 272 |
boolean refValid = ref.validate(vc); |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
273 |
if (log.isLoggable(java.util.logging.Level.FINE)) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
274 |
log.log(java.util.logging.Level.FINE, "Reference[" + ref.getURI() + "] is valid: " + refValid); |
2 | 275 |
} |
276 |
validateRefs &= refValid; |
|
277 |
} |
|
278 |
if (!validateRefs) { |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
279 |
if (log.isLoggable(java.util.logging.Level.FINE)) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
280 |
log.log(java.util.logging.Level.FINE, "Couldn't validate the References"); |
2 | 281 |
} |
282 |
validationStatus = false; |
|
283 |
validated = true; |
|
284 |
return validationStatus; |
|
285 |
} |
|
286 |
||
287 |
// validate Manifests, if property set |
|
288 |
boolean validateMans = true; |
|
289 |
if (Boolean.TRUE.equals(vc.getProperty |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
290 |
("org.jcp.xml.dsig.validateManifests"))) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
291 |
{ |
2 | 292 |
for (int i=0, size=objects.size(); validateMans && i < size; i++) { |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
293 |
XMLObject xo = objects.get(i); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
294 |
List<XMLStructure> content = xo.getContent(); |
2 | 295 |
int csize = content.size(); |
296 |
for (int j = 0; validateMans && j < csize; j++) { |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
297 |
XMLStructure xs = content.get(j); |
2 | 298 |
if (xs instanceof Manifest) { |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
299 |
if (log.isLoggable(java.util.logging.Level.FINE)) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
300 |
log.log(java.util.logging.Level.FINE, "validating manifest"); |
2 | 301 |
} |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
302 |
Manifest man = (Manifest)xs; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
303 |
List<Reference> manRefs = man.getReferences(); |
2 | 304 |
int rsize = manRefs.size(); |
305 |
for (int k = 0; validateMans && k < rsize; k++) { |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
306 |
Reference ref = manRefs.get(k); |
2 | 307 |
boolean refValid = ref.validate(vc); |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
308 |
if (log.isLoggable(java.util.logging.Level.FINE)) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
309 |
log.log(java.util.logging.Level.FINE, |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
310 |
"Manifest ref[" + ref.getURI() + "] is valid: " + refValid |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
311 |
); |
2 | 312 |
} |
313 |
validateMans &= refValid; |
|
314 |
} |
|
315 |
} |
|
316 |
} |
|
317 |
} |
|
318 |
} |
|
319 |
||
320 |
validationStatus = validateMans; |
|
321 |
validated = true; |
|
322 |
return validationStatus; |
|
323 |
} |
|
324 |
||
325 |
public void sign(XMLSignContext signContext) |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
326 |
throws MarshalException, XMLSignatureException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
327 |
{ |
2 | 328 |
if (signContext == null) { |
329 |
throw new NullPointerException("signContext cannot be null"); |
|
330 |
} |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
331 |
DOMSignContext context = (DOMSignContext)signContext; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
332 |
marshal(context.getParent(), context.getNextSibling(), |
2 | 333 |
DOMUtils.getSignaturePrefix(context), context); |
334 |
||
335 |
// generate references and signature value |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
336 |
List<Reference> allReferences = new ArrayList<Reference>(); |
2 | 337 |
|
338 |
// traverse the Signature and register all objects with IDs that |
|
339 |
// may contain References |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
340 |
signatureIdMap = new HashMap<String, XMLStructure>(); |
2 | 341 |
signatureIdMap.put(id, this); |
342 |
signatureIdMap.put(si.getId(), si); |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
343 |
List<Reference> refs = si.getReferences(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
344 |
for (Reference ref : refs) { |
2 | 345 |
signatureIdMap.put(ref.getId(), ref); |
346 |
} |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
347 |
for (XMLObject obj : objects) { |
2 | 348 |
signatureIdMap.put(obj.getId(), obj); |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
349 |
List<XMLStructure> content = obj.getContent(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
350 |
for (XMLStructure xs : content) { |
2 | 351 |
if (xs instanceof Manifest) { |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
352 |
Manifest man = (Manifest)xs; |
2 | 353 |
signatureIdMap.put(man.getId(), man); |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
354 |
List<Reference> manRefs = man.getReferences(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
355 |
for (Reference ref : manRefs) { |
2 | 356 |
allReferences.add(ref); |
357 |
signatureIdMap.put(ref.getId(), ref); |
|
358 |
} |
|
359 |
} |
|
360 |
} |
|
361 |
} |
|
4506
402b248b41de
6867348: Digest Value of References inside Manifest - calculation order problem
mullan
parents:
1337
diff
changeset
|
362 |
// always add SignedInfo references after Manifest references so |
402b248b41de
6867348: Digest Value of References inside Manifest - calculation order problem
mullan
parents:
1337
diff
changeset
|
363 |
// that Manifest reference are digested first |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
364 |
allReferences.addAll(refs); |
2 | 365 |
|
366 |
// generate/digest each reference |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
367 |
for (Reference ref : allReferences) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
368 |
digestReference((DOMReference)ref, signContext); |
2 | 369 |
} |
370 |
||
371 |
// do final sweep to digest any references that were skipped or missed |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
372 |
for (Reference ref : allReferences) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
373 |
if (((DOMReference)ref).isDigested()) { |
2 | 374 |
continue; |
375 |
} |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
376 |
((DOMReference)ref).digest(signContext); |
2 | 377 |
} |
378 |
||
379 |
Key signingKey = null; |
|
380 |
KeySelectorResult ksr = null; |
|
381 |
try { |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
382 |
ksr = signContext.getKeySelector().select(ki, |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
383 |
KeySelector.Purpose.SIGN, |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
384 |
si.getSignatureMethod(), |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
385 |
signContext); |
2 | 386 |
signingKey = ksr.getKey(); |
387 |
if (signingKey == null) { |
|
388 |
throw new XMLSignatureException("the keySelector did not " + |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
389 |
"find a signing key"); |
2 | 390 |
} |
391 |
} catch (KeySelectorException kse) { |
|
392 |
throw new XMLSignatureException("cannot find signing key", kse); |
|
393 |
} |
|
394 |
||
395 |
// calculate signature value |
|
396 |
try { |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
397 |
byte[] val = ((AbstractDOMSignatureMethod) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
398 |
si.getSignatureMethod()).sign(signingKey, si, signContext); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
399 |
((DOMSignatureValue)sv).setValue(val); |
2 | 400 |
} catch (InvalidKeyException ike) { |
401 |
throw new XMLSignatureException(ike); |
|
402 |
} |
|
403 |
||
404 |
this.localSigElem = sigElem; |
|
405 |
this.ksr = ksr; |
|
406 |
} |
|
407 |
||
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
408 |
@Override |
2 | 409 |
public boolean equals(Object o) { |
410 |
if (this == o) { |
|
411 |
return true; |
|
412 |
} |
|
413 |
||
414 |
if (!(o instanceof XMLSignature)) { |
|
415 |
return false; |
|
416 |
} |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
417 |
XMLSignature osig = (XMLSignature)o; |
2 | 418 |
|
419 |
boolean idEqual = |
|
420 |
(id == null ? osig.getId() == null : id.equals(osig.getId())); |
|
421 |
boolean keyInfoEqual = |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
422 |
(ki == null ? osig.getKeyInfo() == null |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
423 |
: ki.equals(osig.getKeyInfo())); |
2 | 424 |
|
425 |
return (idEqual && keyInfoEqual && |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
426 |
sv.equals(osig.getSignatureValue()) && |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
427 |
si.equals(osig.getSignedInfo()) && |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
428 |
objects.equals(osig.getObjects())); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
429 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
430 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
431 |
@Override |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
432 |
public int hashCode() { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
433 |
int result = 17; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
434 |
if (id != null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
435 |
result = 31 * result + id.hashCode(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
436 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
437 |
if (ki != null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
438 |
result = 31 * result + ki.hashCode(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
439 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
440 |
result = 31 * result + sv.hashCode(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
441 |
result = 31 * result + si.hashCode(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
442 |
result = 31 * result + objects.hashCode(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
443 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
444 |
return result; |
2 | 445 |
} |
446 |
||
447 |
private void digestReference(DOMReference ref, XMLSignContext signContext) |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
448 |
throws XMLSignatureException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
449 |
{ |
2 | 450 |
if (ref.isDigested()) { |
451 |
return; |
|
452 |
} |
|
453 |
// check dependencies |
|
454 |
String uri = ref.getURI(); |
|
455 |
if (Utils.sameDocumentURI(uri)) { |
|
456 |
String id = Utils.parseIdFromSameDocumentURI(uri); |
|
457 |
if (id != null && signatureIdMap.containsKey(id)) { |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
458 |
XMLStructure xs = signatureIdMap.get(id); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
459 |
if (xs instanceof DOMReference) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
460 |
digestReference((DOMReference)xs, signContext); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
461 |
} else if (xs instanceof Manifest) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
462 |
Manifest man = (Manifest)xs; |
24970
094bfaa699c3
8046044: Fix raw and unchecked lint warnings in XML Signature Impl
mullan
parents:
23010
diff
changeset
|
463 |
List<Reference> manRefs = |
094bfaa699c3
8046044: Fix raw and unchecked lint warnings in XML Signature Impl
mullan
parents:
23010
diff
changeset
|
464 |
DOMManifest.getManifestReferences(man); |
2 | 465 |
for (int i = 0, size = manRefs.size(); i < size; i++) { |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
466 |
digestReference((DOMReference)manRefs.get(i), |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
467 |
signContext); |
2 | 468 |
} |
469 |
} |
|
470 |
} |
|
471 |
// if uri="" and there are XPath Transforms, there may be |
|
472 |
// reference dependencies in the XPath Transform - so be on |
|
473 |
// the safe side, and skip and do at end in the final sweep |
|
474 |
if (uri.length() == 0) { |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
475 |
List<Transform> transforms = ref.getTransforms(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
476 |
for (Transform transform : transforms) { |
2 | 477 |
String transformAlg = transform.getAlgorithm(); |
478 |
if (transformAlg.equals(Transform.XPATH) || |
|
479 |
transformAlg.equals(Transform.XPATH2)) { |
|
480 |
return; |
|
481 |
} |
|
482 |
} |
|
483 |
} |
|
484 |
} |
|
485 |
ref.digest(signContext); |
|
486 |
} |
|
487 |
||
488 |
public class DOMSignatureValue extends DOMStructure |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
489 |
implements SignatureValue |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
490 |
{ |
2 | 491 |
private String id; |
492 |
private byte[] value; |
|
493 |
private String valueBase64; |
|
494 |
private Element sigValueElem; |
|
495 |
private boolean validated = false; |
|
496 |
private boolean validationStatus; |
|
497 |
||
498 |
DOMSignatureValue(String id) { |
|
499 |
this.id = id; |
|
500 |
} |
|
501 |
||
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
502 |
DOMSignatureValue(Element sigValueElem, XMLCryptoContext context) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
503 |
throws MarshalException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
504 |
{ |
2 | 505 |
try { |
506 |
// base64 decode signatureValue |
|
507 |
value = Base64.decode(sigValueElem); |
|
508 |
} catch (Base64DecodingException bde) { |
|
509 |
throw new MarshalException(bde); |
|
510 |
} |
|
511 |
||
18240 | 512 |
Attr attr = sigValueElem.getAttributeNodeNS(null, "Id"); |
513 |
if (attr != null) { |
|
514 |
id = attr.getValue(); |
|
515 |
sigValueElem.setIdAttributeNode(attr, true); |
|
516 |
} else { |
|
517 |
id = null; |
|
518 |
} |
|
2 | 519 |
this.sigValueElem = sigValueElem; |
520 |
} |
|
521 |
||
522 |
public String getId() { |
|
523 |
return id; |
|
524 |
} |
|
525 |
||
526 |
public byte[] getValue() { |
|
22584
eed64ee05369
8032733: Fix cast lint warnings in client libraries
darcy
parents:
19051
diff
changeset
|
527 |
return (value == null) ? null : value.clone(); |
2 | 528 |
} |
529 |
||
530 |
public boolean validate(XMLValidateContext validateContext) |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
531 |
throws XMLSignatureException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
532 |
{ |
2 | 533 |
if (validateContext == null) { |
534 |
throw new NullPointerException("context cannot be null"); |
|
535 |
} |
|
536 |
||
537 |
if (validated) { |
|
538 |
return validationStatus; |
|
539 |
} |
|
540 |
||
541 |
// get validating key |
|
542 |
SignatureMethod sm = si.getSignatureMethod(); |
|
543 |
Key validationKey = null; |
|
544 |
KeySelectorResult ksResult; |
|
545 |
try { |
|
546 |
ksResult = validateContext.getKeySelector().select |
|
547 |
(ki, KeySelector.Purpose.VERIFY, sm, validateContext); |
|
548 |
validationKey = ksResult.getKey(); |
|
549 |
if (validationKey == null) { |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
550 |
throw new XMLSignatureException("the keyselector did not " + |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
551 |
"find a validation key"); |
2 | 552 |
} |
553 |
} catch (KeySelectorException kse) { |
|
554 |
throw new XMLSignatureException("cannot find validation " + |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
555 |
"key", kse); |
2 | 556 |
} |
557 |
||
558 |
// canonicalize SignedInfo and verify signature |
|
559 |
try { |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
560 |
validationStatus = ((AbstractDOMSignatureMethod)sm).verify |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
561 |
(validationKey, si, value, validateContext); |
2 | 562 |
} catch (Exception e) { |
563 |
throw new XMLSignatureException(e); |
|
564 |
} |
|
565 |
||
566 |
validated = true; |
|
567 |
ksr = ksResult; |
|
568 |
return validationStatus; |
|
569 |
} |
|
570 |
||
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
571 |
@Override |
2 | 572 |
public boolean equals(Object o) { |
573 |
if (this == o) { |
|
574 |
return true; |
|
575 |
} |
|
576 |
||
577 |
if (!(o instanceof SignatureValue)) { |
|
578 |
return false; |
|
579 |
} |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
580 |
SignatureValue osv = (SignatureValue)o; |
2 | 581 |
|
582 |
boolean idEqual = |
|
583 |
(id == null ? osv.getId() == null : id.equals(osv.getId())); |
|
584 |
||
585 |
//XXX compare signature values? |
|
586 |
return idEqual; |
|
587 |
} |
|
588 |
||
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
589 |
@Override |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
590 |
public int hashCode() { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
591 |
int result = 17; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
592 |
if (id != null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
593 |
result = 31 * result + id.hashCode(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
594 |
} |
2 | 595 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
596 |
return result; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
597 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
598 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
599 |
public void marshal(Node parent, String dsPrefix, |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
600 |
DOMCryptoContext context) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
601 |
throws MarshalException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
602 |
{ |
2 | 603 |
// create SignatureValue element |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
604 |
sigValueElem = DOMUtils.createElement(ownerDoc, "SignatureValue", |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
18240
diff
changeset
|
605 |
XMLSignature.XMLNS, dsPrefix); |
2 | 606 |
if (valueBase64 != null) { |
607 |
sigValueElem.appendChild(ownerDoc.createTextNode(valueBase64)); |
|
608 |
} |
|
609 |
||
610 |
// append Id attribute, if specified |
|
611 |
DOMUtils.setAttributeID(sigValueElem, "Id", id); |
|
612 |
parent.appendChild(sigValueElem); |
|
613 |
} |
|
614 |
||
615 |
void setValue(byte[] value) { |
|
616 |
this.value = value; |
|
617 |
valueBase64 = Base64.encode(value); |
|
618 |
sigValueElem.appendChild(ownerDoc.createTextNode(valueBase64)); |
|
619 |
} |
|
620 |
} |
|
621 |
} |