From 71eb2f9155e58a5ea12daea9996f2585f525af33 Mon Sep 17 00:00:00 2001 From: clemenso Date: Thu, 11 Feb 2010 12:45:24 +0000 Subject: [#516] transforms ignored for detached signatures (merge from 1.2.12-pinguin) git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@637 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4 --- .../bku/slcommands/impl/xsect/XSECTReference.java | 197 +++++++++++---------- 1 file changed, 101 insertions(+), 96 deletions(-) (limited to 'bkucommon/src') diff --git a/bkucommon/src/main/java/at/gv/egiz/bku/slcommands/impl/xsect/XSECTReference.java b/bkucommon/src/main/java/at/gv/egiz/bku/slcommands/impl/xsect/XSECTReference.java index 6b388f2a..fa5b5802 100644 --- a/bkucommon/src/main/java/at/gv/egiz/bku/slcommands/impl/xsect/XSECTReference.java +++ b/bkucommon/src/main/java/at/gv/egiz/bku/slcommands/impl/xsect/XSECTReference.java @@ -14,99 +14,104 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package at.gv.egiz.bku.slcommands.impl.xsect; - -import iaik.xml.crypto.dsig.DigestMethodImpl; -import iaik.xml.crypto.dsig.DigestValueImpl; -import iaik.xml.crypto.dsig.ReferenceImpl; -import iaik.xml.crypto.dsig.TransformImpl; -import iaik.xml.crypto.dsig.TransformsImpl; - -import javax.xml.crypto.Data; -import javax.xml.crypto.URIDereferencer; -import javax.xml.crypto.URIReferenceException; -import javax.xml.crypto.XMLCryptoContext; -import javax.xml.crypto.dsig.DigestMethod; -import javax.xml.crypto.dsig.TransformException; - -import at.gv.egiz.bku.slexceptions.SLCommandException; -import at.gv.egiz.bku.slexceptions.SLExceptionMessages; - -/** - * This class extends the XSECT ReferenceImpl to allow for the use - * of already marshalled ds:Transforms elements for initialization. - * - * @author mcentner - */ -public class XSECTReference extends ReferenceImpl { - - /** - * The URIDereferencer to be used for dereferencing. - */ - protected URIDereferencer dereferencer; - - /** - * Creates a new instance of this XSECTReference with the given - * uri, digest method, transforms, type - * and id value. - * - * @param uri - * the URI-attribute value (may be null) - * @param dm - * the digest method - * @param transforms - * a TransformsImpl element (may be null) - * @param type - * the Type-attribute value (may be null) - * @param id - * the Id-attribute value (may be null) - * - * @throws NullPointerException - * if digestMethod is null - * @throws IllegalArgumentException - * if uri is not RFC 2396 compliant - * @throws ClassCastException - * if any of the transforms is not of type - * {@link TransformImpl} - */ - public XSECTReference(String uri, DigestMethod dm, TransformsImpl transforms, String type, - String id) { - super(uri, transforms, type, id); - digestMethod_ = (DigestMethodImpl) dm; - digestValue_ = new DigestValueImpl(); - } - - /* (non-Javadoc) - * @see iaik.xml.crypto.dsig.ReferenceType#dereference(javax.xml.crypto.XMLCryptoContext) - */ - @Override - public Data dereference(XMLCryptoContext context) throws TransformException, - URIReferenceException { - if (dereferencer != null) { - return dereferencer.dereference(this, context); - } else { - try { - return super.dereference(context); - } catch (URIReferenceException e) { - SLCommandException commandException = new SLCommandException(4003, - SLExceptionMessages.EC4003_NOT_RESOLVED, new Object[] { getURI() }); - throw new URIReferenceException("Failed to dereference data to-be signed.", commandException); - } - } - } - - /** - * @return the dereferencer to be used for dereferencing this reference - */ - public URIDereferencer getDereferencer() { - return dereferencer; - } - - /** - * @param dereferencer the dereferencer to be used for dereferencing this reference - */ - public void setDereferencer(URIDereferencer dereferencer) { - this.dereferencer = dereferencer; - } - -} +package at.gv.egiz.bku.slcommands.impl.xsect; + +import iaik.xml.crypto.dsig.DigestMethodImpl; +import iaik.xml.crypto.dsig.DigestValueImpl; +import iaik.xml.crypto.dsig.ReferenceImpl; +import iaik.xml.crypto.dsig.TransformImpl; +import iaik.xml.crypto.dsig.TransformsImpl; + +import javax.xml.crypto.Data; +import javax.xml.crypto.URIDereferencer; +import javax.xml.crypto.URIReferenceException; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.dsig.DigestMethod; +import javax.xml.crypto.dsig.TransformException; + +import at.gv.egiz.bku.slexceptions.SLCommandException; +import at.gv.egiz.bku.slexceptions.SLExceptionMessages; + +/** + * This class extends the XSECT ReferenceImpl to allow for the use + * of already marshalled ds:Transforms elements for initialization. + * + * @author mcentner + */ +public class XSECTReference extends ReferenceImpl { + + /** + * The URIDereferencer to be used for dereferencing. + */ + protected URIDereferencer dereferencer; + + /** + * Creates a new instance of this XSECTReference with the given + * uri, digest method, transforms, type + * and id value. + * + * @param uri + * the URI-attribute value (may be null) + * @param dm + * the digest method + * @param transforms + * a TransformsImpl element (may be null) + * @param type + * the Type-attribute value (may be null) + * @param id + * the Id-attribute value (may be null) + * + * @throws NullPointerException + * if digestMethod is null + * @throws IllegalArgumentException + * if uri is not RFC 2396 compliant + * @throws ClassCastException + * if any of the transforms is not of type + * {@link TransformImpl} + */ + public XSECTReference(String uri, DigestMethod dm, TransformsImpl transforms, String type, + String id) { + super(uri, transforms, type, id); + digestMethod_ = (DigestMethodImpl) dm; + digestValue_ = new DigestValueImpl(); + } + + /* (non-Javadoc) + * @see iaik.xml.crypto.dsig.ReferenceType#dereference(javax.xml.crypto.XMLCryptoContext) + */ + @Override + public Data dereference(XMLCryptoContext context) throws TransformException, + URIReferenceException { + if (dereferencer != null) { + Data result = dereferencer.dereference(this, context); + // apply transforms if any + if (transforms_ != null) { + result = transforms_.applyTransforms(context, result); + } + return result; + } else { + try { + return super.dereference(context); + } catch (URIReferenceException e) { + SLCommandException commandException = new SLCommandException(4003, + SLExceptionMessages.EC4003_NOT_RESOLVED, new Object[] { getURI() }); + throw new URIReferenceException("Failed to dereference data to-be signed.", commandException); + } + } + } + + /** + * @return the dereferencer to be used for dereferencing this reference + */ + public URIDereferencer getDereferencer() { + return dereferencer; + } + + /** + * @param dereferencer the dereferencer to be used for dereferencing this reference + */ + public void setDereferencer(URIDereferencer dereferencer) { + this.dereferencer = dereferencer; + } + +} -- cgit v1.2.3