/*
* Copyright 2008 Federal Chancellery Austria and
* Graz University of Technology
*
* Licensed 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 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;
}
}