Class XMLSignature
java.lang.Object
org.apache.xml.security.utils.ElementProxy
org.apache.xml.security.utils.SignatureElementProxy
org.apache.xml.security.signature.XMLSignature
Handles
<ds:Signature>
elements.
This is the main class that deals with creating and verifying signatures.
There are 2 types of constructors for this class. The ones that take a document, baseURI and 1 or more Java Objects. This is mostly used for signing purposes. The other constructor is the one that takes a DOM Element and a BaseURI. This is used mostly with for verifying, when you have a SignatureElement. There are a few different types of methods:
- The addDocument* methods are used to add References with optional transforms during signing.
- addKeyInfo* methods are to add Certificates and Keys to the KeyInfo tags during signing.
- appendObject allows a user to add any XML Structure as an ObjectContainer during signing.
- sign and checkSignatureValue methods are used to sign and validate the signature.
- Author:
- $Author$
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final String
HMAC - NOT Recommended HMAC-MD5static final String
HMAC - Optional HMAC-RIPEMD160static final String
MAC - Required HMAC-SHA1static final String
HMAC - Optional HMAC-SHA256static final String
HMAC - Optional HMAC-SHA284static final String
HMAC - Optional HMAC-SHA512static final String
Signature - Required DSAwithSHA1 (DSS)static final String
Signature - NOT Recommended RSAwithMD5static final String
Signature - Recommended RSAwithSHA1static final String
Signature - Optional RSAwithRIPEMD160static final String
Signature - Recommended RSAwithSHA1static final String
Signature - Optional RSAwithSHA256static final String
Signature - Optional RSAwithSHA384static final String
Signature - Optional RSAwithSHA512Fields inherited from class org.apache.xml.security.utils.ElementProxy
_baseURI, _constructionElement, _doc, _state, MODE_CREATE, MODE_DECRYPT, MODE_ENCRYPT, MODE_PROCESS, MODE_SIGN, MODE_UNKNOWN, MODE_VERIFY
-
Constructor Summary
ConstructorsConstructorDescriptionXMLSignature
(Document doc, String BaseURI, String SignatureMethodURI) This creates a newds:Signature
Element and adds an emptyds:SignedInfo
.XMLSignature
(Document doc, String BaseURI, String SignatureMethodURI, int HMACOutputLength) Constructor XMLSignatureXMLSignature
(Document doc, String BaseURI, String SignatureMethodURI, int HMACOutputLength, String CanonicalizationMethodURI) Constructor XMLSignatureXMLSignature
(Document doc, String BaseURI, String SignatureMethodURI, String CanonicalizationMethodURI) Constructor XMLSignatureXMLSignature
(Document doc, String BaseURI, Element SignatureMethodElem, Element CanonicalizationMethodElem) Creates a XMLSignature in a DocumentXMLSignature
(Element element, String BaseURI) This will parse the element and construct the Java Objects. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addDocument
(String referenceURI) Add a Reference with just this URI.void
addDocument
(String referenceURI, Transforms trans) Adds a Reference with just the URI and the transforms.void
addDocument
(String referenceURI, Transforms trans, String digestURI) This method is a proxy method for theManifest.addDocument(java.lang.String, java.lang.String, org.apache.xml.security.transforms.Transforms, java.lang.String, java.lang.String, java.lang.String)
method.void
addDocument
(String referenceURI, Transforms trans, String digestURI, String ReferenceId, String ReferenceType) Add a Reference with full parameters to this Signaturevoid
addKeyInfo
(X509Certificate cert) Add an X509 Certificate to the KeyInfo.void
addKeyInfo
(PublicKey pk) Add this public key to the KeyInfo.void
addResourceResolver
(ResourceResolver resolver) Adds aResourceResolver
to enable the retrieval of resources.void
addResourceResolver
(ResourceResolverSpi resolver) Adds aResourceResolverSpi
to enable the retrieval of resources.void
appendObject
(ObjectContainer object) Appends an Object (not ajava.lang.Object
but an Object element) to the Signature.boolean
Extracts the public key from the certificate and verifies if the signature is valid by re-digesting all References, comparing those against the stored DigestValues and then checking to see if the Signatures match on the SignedInfo.boolean
Verifies if the signature is valid by redigesting all References, comparing those against the stored DigestValues and then checking to see if the Signatures match on the SignedInfo.createSecretKey
(byte[] secretKeyBytes) Proxy method forSignedInfo.createSecretKey(byte[])
.Get the local name of this elementgetId()
Returns theId
attributeReturns the KeyInfo child.getObjectItem
(int i) Returns thei
th
ds:Object
child of the signature or null if no suchds:Object
element exists.int
Returns the number of allds:Object
elements.byte[]
Returns the octet value of the SignatureValue element.Returns the completely parsedSignedInfo
object.void
setFollowNestedManifests
(boolean followManifests) Signal wether Manifest should be automatically validated.void
Sets theId
attributevoid
Digests all References in the SignedInfo, calculates the signature value and sets it in the SignatureValue Element.Methods inherited from class org.apache.xml.security.utils.SignatureElementProxy
getBaseNamespace
Methods inherited from class org.apache.xml.security.utils.ElementProxy
addBase64Element, addBase64Text, addBigIntegerElement, addText, addTextElement, createElementForFamily, getBaseURI, getBigIntegerFromChildElement, getBytesFromChildElement, getBytesFromTextChild, getDefaultPrefix, getDocument, getElement, getElementPlusReturns, getTextFromChildElement, getTextFromTextChild, guaranteeThatElementInCorrectSpace, length, setDefaultPrefix, setElement, setXPathNamespaceContext
-
Field Details
-
ALGO_ID_MAC_HMAC_SHA1
MAC - Required HMAC-SHA1- See Also:
-
ALGO_ID_SIGNATURE_DSA
Signature - Required DSAwithSHA1 (DSS)- See Also:
-
ALGO_ID_SIGNATURE_RSA
Signature - Recommended RSAwithSHA1- See Also:
-
ALGO_ID_SIGNATURE_RSA_SHA1
Signature - Recommended RSAwithSHA1- See Also:
-
ALGO_ID_SIGNATURE_NOT_RECOMMENDED_RSA_MD5
Signature - NOT Recommended RSAwithMD5- See Also:
-
ALGO_ID_SIGNATURE_RSA_RIPEMD160
Signature - Optional RSAwithRIPEMD160- See Also:
-
ALGO_ID_SIGNATURE_RSA_SHA256
Signature - Optional RSAwithSHA256- See Also:
-
ALGO_ID_SIGNATURE_RSA_SHA384
Signature - Optional RSAwithSHA384- See Also:
-
ALGO_ID_SIGNATURE_RSA_SHA512
Signature - Optional RSAwithSHA512- See Also:
-
ALGO_ID_MAC_HMAC_NOT_RECOMMENDED_MD5
HMAC - NOT Recommended HMAC-MD5- See Also:
-
ALGO_ID_MAC_HMAC_RIPEMD160
HMAC - Optional HMAC-RIPEMD160- See Also:
-
ALGO_ID_MAC_HMAC_SHA256
HMAC - Optional HMAC-SHA256- See Also:
-
ALGO_ID_MAC_HMAC_SHA384
HMAC - Optional HMAC-SHA284- See Also:
-
ALGO_ID_MAC_HMAC_SHA512
HMAC - Optional HMAC-SHA512- See Also:
-
-
Constructor Details
-
XMLSignature
public XMLSignature(Document doc, String BaseURI, String SignatureMethodURI) throws XMLSecurityException This creates a newds:Signature
Element and adds an emptyds:SignedInfo
. Theds:SignedInfo
is initialized with the specified Signature algorithm and Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS which is REQUIRED by the spec. This method's main use is for creating a new signature.- Parameters:
doc
- Document in which the signature will be appended after creation.BaseURI
- URI to be used as context for all relative URIs.SignatureMethodURI
- signature algorithm to use.- Throws:
XMLSecurityException
-
XMLSignature
public XMLSignature(Document doc, String BaseURI, String SignatureMethodURI, int HMACOutputLength) throws XMLSecurityException Constructor XMLSignature- Parameters:
doc
-BaseURI
-SignatureMethodURI
- the Signature method to be used.HMACOutputLength
-- Throws:
XMLSecurityException
-
XMLSignature
public XMLSignature(Document doc, String BaseURI, String SignatureMethodURI, String CanonicalizationMethodURI) throws XMLSecurityException Constructor XMLSignature- Parameters:
doc
-BaseURI
-SignatureMethodURI
- the Signature method to be used.CanonicalizationMethodURI
- the canonicalization algorithm to be used to c14nize the SignedInfo element.- Throws:
XMLSecurityException
-
XMLSignature
public XMLSignature(Document doc, String BaseURI, String SignatureMethodURI, int HMACOutputLength, String CanonicalizationMethodURI) throws XMLSecurityException Constructor XMLSignature- Parameters:
doc
-BaseURI
-SignatureMethodURI
-HMACOutputLength
-CanonicalizationMethodURI
-- Throws:
XMLSecurityException
-
XMLSignature
public XMLSignature(Document doc, String BaseURI, Element SignatureMethodElem, Element CanonicalizationMethodElem) throws XMLSecurityException Creates a XMLSignature in a Document- Parameters:
doc
-BaseURI
-SignatureMethodElem
-CanonicalizationMethodElem
-- Throws:
XMLSecurityException
-
XMLSignature
public XMLSignature(Element element, String BaseURI) throws XMLSignatureException, XMLSecurityException This will parse the element and construct the Java Objects. That will allow a user to validate the signature.- Parameters:
element
- ds:Signature element that contains the whole signatureBaseURI
- URI to be prepended to all relative URIs- Throws:
XMLSecurityException
XMLSignatureException
- if the signature is badly formatted
-
-
Method Details
-
setId
Sets theId
attribute- Parameters:
Id
- Id value to be used by the id attribute on the Signature Element
-
getId
Returns theId
attribute- Returns:
- the
Id
attribute
-
getSignedInfo
Returns the completely parsedSignedInfo
object.- Returns:
- the completely parsed
SignedInfo
object.
-
getSignatureValue
Returns the octet value of the SignatureValue element. Throws an XMLSignatureException if it has no or wrong content.- Returns:
- the value of the SignatureValue element.
- Throws:
XMLSignatureException
- If there is no content
-
getKeyInfo
Returns the KeyInfo child. If we are in signing mode and the KeyInfo does not exist yet, it is created on demand and added to the Signature.
This allows to add arbitrary content to the KeyInfo during signing.- Returns:
- the KeyInfo object
-
appendObject
Appends an Object (not ajava.lang.Object
but an Object element) to the Signature. Please note that this is only possible when signing.- Parameters:
object
- ds:Object to be appended.- Throws:
XMLSignatureException
- When this object is used to verify.
-
getObjectItem
Returns thei
th
ds:Object
child of the signature or null if no suchds:Object
element exists.- Parameters:
i
-- Returns:
- the
i
th
ds:Object
child of the signature or null if no suchds:Object
element exists.
-
getObjectLength
public int getObjectLength()Returns the number of allds:Object
elements.- Returns:
- the number of all
ds:Object
elements.
-
sign
Digests all References in the SignedInfo, calculates the signature value and sets it in the SignatureValue Element.- Parameters:
signingKey
- thePrivateKey
orSecretKey
that is used to sign.- Throws:
XMLSignatureException
-
addResourceResolver
Adds aResourceResolver
to enable the retrieval of resources.- Parameters:
resolver
-
-
addResourceResolver
Adds aResourceResolverSpi
to enable the retrieval of resources.- Parameters:
resolver
-
-
checkSignatureValue
Extracts the public key from the certificate and verifies if the signature is valid by re-digesting all References, comparing those against the stored DigestValues and then checking to see if the Signatures match on the SignedInfo.- Parameters:
cert
- Certificate that contains the public key part of the keypair that was used to sign.- Returns:
- true if the signature is valid, false otherwise
- Throws:
XMLSignatureException
-
checkSignatureValue
Verifies if the signature is valid by redigesting all References, comparing those against the stored DigestValues and then checking to see if the Signatures match on the SignedInfo.- Parameters:
pk
-PublicKey
part of the keypair orSecretKey
that was used to sign- Returns:
- true if the signature is valid, false otherwise
- Throws:
XMLSignatureException
-
addDocument
public void addDocument(String referenceURI, Transforms trans, String digestURI, String ReferenceId, String ReferenceType) throws XMLSignatureException Add a Reference with full parameters to this Signature- Parameters:
referenceURI
- URI of the resource to be signed. Can be null in which case the dereferencing is application specific. Can be "" in which it's the parent node (or parent document?). There can only be one "" in each signature.trans
- Optional list of transformations to be done before digestingdigestURI
- Mandatory URI of the digesting algorithm to use.ReferenceId
- Optional id attribute for this ReferenceReferenceType
- Optional mimetype for the URI- Throws:
XMLSignatureException
-
addDocument
public void addDocument(String referenceURI, Transforms trans, String digestURI) throws XMLSignatureException This method is a proxy method for theManifest.addDocument(java.lang.String, java.lang.String, org.apache.xml.security.transforms.Transforms, java.lang.String, java.lang.String, java.lang.String)
method.- Parameters:
referenceURI
- URI according to the XML Signature specification.trans
- List of transformations to be applied.digestURI
- URI of the digest algorithm to be used.- Throws:
XMLSignatureException
- See Also:
-
addDocument
Adds a Reference with just the URI and the transforms. This used the SHA1 algorithm as a default digest algorithm.- Parameters:
referenceURI
- URI according to the XML Signature specification.trans
- List of transformations to be applied.- Throws:
XMLSignatureException
-
addDocument
Add a Reference with just this URI. It uses SHA1 by default as the digest algorithm- Parameters:
referenceURI
- URI according to the XML Signature specification.- Throws:
XMLSignatureException
-
addKeyInfo
Add an X509 Certificate to the KeyInfo. This will include the whole cert inside X509Data/X509Certificate tags.- Parameters:
cert
- Certificate to be included. This should be the certificate of the key that was used to sign.- Throws:
XMLSecurityException
-
addKeyInfo
Add this public key to the KeyInfo. This will include the complete key in the KeyInfo structure.- Parameters:
pk
-
-
createSecretKey
Proxy method forSignedInfo.createSecretKey(byte[])
. If you want to create a MAC, this method helps you to obtain theSecretKey
from octets.- Parameters:
secretKeyBytes
-- Returns:
- the secret key created.
- See Also:
-
setFollowNestedManifests
public void setFollowNestedManifests(boolean followManifests) Signal wether Manifest should be automatically validated. Checking the digests in References in a Signature are mandatory, but for References inside a Manifest it is application specific. This boolean is to indicate that the References inside Manifests should be validated.- Parameters:
followManifests
-- See Also:
-
getBaseLocalName
Get the local name of this element- Specified by:
getBaseLocalName
in classElementProxy
- Returns:
- Constant._TAG_SIGNATURE
-