Class XMLCipher
XMLCipher encrypts and decrypts the contents of
Documents, Elements and Element
contents. It was designed to resemble javax.crypto.Cipher in
order to facilitate understanding of its functioning.- Author:
- Axl Mattheus (Sun Microsystems), Christian Geuer-Pollmann
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringAES 128 Cipherstatic final StringAES 128 Cipher KeyWrapstatic final StringAES 192 Cipherstatic final StringAES 192 Cipher KeyWrapstatic final StringAES 256 Cipherstatic final StringAES 256 Cipher KeyWrapstatic final StringBase64 encodingstatic final intDECRYPT Modestatic final StringDIFFIE_HELLMAN Cipherstatic final intENCRYPT Modestatic final StringN14C_XML excluisvestatic final StringN14C_XML exclusive with commetnsstatic final StringN14C_XMLstatic final StringN14C_XML with commentsstatic final StringRIPEMD Cipherstatic final StringRSA OAEP Cipherstatic final StringRSA 1.5 Cipherstatic final StringSHA1 Cipherstatic final StringSHA256 Cipherstatic final StringSHA512 Cipherstatic final StringTriple DES EDE (192 bit key) in CBC modestatic final StringTriple DES EDE (192 bit key) in CBC mode KEYWRAPstatic final intUNWRAP Modestatic final intWRAP Modestatic final StringXML Signature NS -
Method Summary
Modifier and TypeMethodDescriptioncreateAgreementMethod(String algorithm) Create an AgreementMethod objectcreateCipherData(int type) Create a CipherData objectCreate a CipherReference objectcreateCipherValue(String value) Create a CipherValue elementcreateEncryptedData(int type, String value) Creates anEncryptedDataElement.createEncryptedKey(int type, String value) Creates anEncryptedKeyElement.createEncryptionMethod(String algorithm) Create an EncryptedMethod objectCreate an EncryptedProperties elementCreate a new EncryptionProperty elementcreateReferenceList(int type) Create a new ReferenceList objectCreate a new Transforms objectcreateTransforms(Document doc) Create a new Transforms object Because the handling of Transforms is currently done in the signature code, the creation of a Transforms object requires a context document.decryptKey(EncryptedKey encryptedKey) Decrypt a key from a passed in EncryptedKey structure.decryptKey(EncryptedKey encryptedKey, String algorithm) Decrypt a key from a passed in EncryptedKey structurebyte[]decryptToByteArray(Element element) Decrypt an EncryptedData element to a byte array When passed in an EncryptedData node, returns the decryption as a byte array.Process a DOMDocumentnode.Process a DOMElementnode.Process the contents of a DOMElementnode.encryptData(Document context, Element element) Returns anEncryptedDatainterface.encryptData(Document context, Element element, boolean contentMode) Returns anEncryptedDatainterface.encryptKey(Document doc, Key key) Encrypts a key to an EncryptedKey structureGet the EncryptedData being build Returns the EncryptedData being built during an ENCRYPT operation.Get the EncryptedData being build Returns the EncryptedData being built during an ENCRYPT operation.static XMLCipherReturns anXMLCipherthat implements no specific transformation, and can therefore only be used for decrypt or unwrap operations where the encryption method is defined in theEncryptionMethodelement.static XMLCiphergetInstance(String transformation) Returns anXMLCipherthat implements the specified transformation and operates on the specified context document.static XMLCiphergetInstance(String transformation, String canon) Returns anXMLCipherthat implements the specified transformation, operates on the specified context document and serializes the document with the specified canonicalization algorithm before it encrypts the document.static XMLCiphergetProviderInstance(String provider) Returns anXMLCipherthat implements no specific transformation, and can therefore only be used for decrypt or unwrap operations where the encryption method is defined in theEncryptionMethodelement.static XMLCiphergetProviderInstance(String transformation, String provider) Returns anXMLCipherthat implements the specified transformation and operates on the specified context document.static XMLCiphergetProviderInstance(String transformation, String provider, String canon) Returns anXMLCipherthat implements the specified transformation, operates on the specified context document and serializes the document with the specified canonicalization algorithm before it encrypts the document.voidInitializes this cipher with a key.loadEncryptedData(Document context, Element element) Returns anEncryptedDatainterface.loadEncryptedKey(Document context, Element element) Returns anEncryptedKeyinterface.loadEncryptedKey(Element element) Returns anEncryptedKeyinterface.martial(EncryptedData encryptedData) Martial an EncryptedData Takes an EncryptedData object and returns a DOM Element that represents the appropriateEncryptedDatamartial(EncryptedKey encryptedKey) Martial an EncryptedKey Takes an EncryptedKey object and returns a DOM Element that represents the appropriateEncryptedKeymartial(Document context, EncryptedData encryptedData) Martial an EncryptedData Takes an EncryptedData object and returns a DOM Element that represents the appropriateEncryptedDatamartial(Document context, EncryptedKey encryptedKey) Martial an EncryptedKey Takes an EncryptedKey object and returns a DOM Element that represents the appropriateEncryptedKeyvoidSet a Key Encryption Key.
-
Field Details
-
TRIPLEDES
Triple DES EDE (192 bit key) in CBC mode- See Also:
-
AES_128
AES 128 Cipher- See Also:
-
AES_256
AES 256 Cipher- See Also:
-
AES_192
AES 192 Cipher- See Also:
-
RSA_v1dot5
RSA 1.5 Cipher- See Also:
-
RSA_OAEP
RSA OAEP Cipher- See Also:
-
DIFFIE_HELLMAN
DIFFIE_HELLMAN Cipher- See Also:
-
TRIPLEDES_KeyWrap
Triple DES EDE (192 bit key) in CBC mode KEYWRAP- See Also:
-
AES_128_KeyWrap
AES 128 Cipher KeyWrap- See Also:
-
AES_256_KeyWrap
AES 256 Cipher KeyWrap- See Also:
-
AES_192_KeyWrap
AES 192 Cipher KeyWrap- See Also:
-
SHA1
SHA1 Cipher- See Also:
-
SHA256
SHA256 Cipher- See Also:
-
SHA512
SHA512 Cipher- See Also:
-
RIPEMD_160
RIPEMD Cipher- See Also:
-
XML_DSIG
XML Signature NS- See Also:
-
N14C_XML
N14C_XML- See Also:
-
N14C_XML_WITH_COMMENTS
N14C_XML with comments- See Also:
-
EXCL_XML_N14C
N14C_XML excluisve- See Also:
-
EXCL_XML_N14C_WITH_COMMENTS
N14C_XML exclusive with commetns- See Also:
-
BASE64_ENCODING
Base64 encoding- See Also:
-
ENCRYPT_MODE
public static final int ENCRYPT_MODEENCRYPT Mode- See Also:
-
DECRYPT_MODE
public static final int DECRYPT_MODEDECRYPT Mode- See Also:
-
UNWRAP_MODE
public static final int UNWRAP_MODEUNWRAP Mode- See Also:
-
WRAP_MODE
public static final int WRAP_MODEWRAP Mode- See Also:
-
-
Method Details
-
getInstance
Returns anXMLCipherthat implements the specified transformation and operates on the specified context document.If the default provider package supplies an implementation of the requested transformation, an instance of Cipher containing that implementation is returned. If the transformation is not available in the default provider package, other provider packages are searched.
NOTE1: The transformation name does not follow the same pattern as that oulined in the Java Cryptography Extension Reference Guide but rather that specified by the XML Encryption Syntax and Processing document. The rational behind this is to make it easier for a novice at writing Java Encryption software to use the library.
NOTE2:
getInstance()does not follow the same pattern regarding exceptional conditions as that used injavax.crypto.Cipher. Instead, it only throws anXMLEncryptionExceptionwhich wraps an underlying exception. The stack trace from the exception should be self explanitory.- Parameters:
transformation- the name of the transformation, e.g.,XMLCipher.TRIPLEDESwhich is shorthand for "http://www.w3.org/2001/04/xmlenc#tripledes-cbc"- Returns:
- the XMLCipher
- Throws:
XMLEncryptionException- See Also:
-
getInstance
public static XMLCipher getInstance(String transformation, String canon) throws XMLEncryptionException Returns anXMLCipherthat implements the specified transformation, operates on the specified context document and serializes the document with the specified canonicalization algorithm before it encrypts the document.- Parameters:
transformation- the name of the transformation, e.g.,XMLCipher.TRIPLEDESwhich is shorthand for "http://www.w3.org/2001/04/xmlenc#tripledes-cbc"canon- the name of the c14n algorithm, ifnulluse standard serializer- Returns:
- Throws:
XMLEncryptionException
-
getProviderInstance
public static XMLCipher getProviderInstance(String transformation, String provider) throws XMLEncryptionException Returns anXMLCipherthat implements the specified transformation and operates on the specified context document.- Parameters:
transformation- the name of the transformation, e.g.,XMLCipher.TRIPLEDESwhich is shorthand for "http://www.w3.org/2001/04/xmlenc#tripledes-cbc"provider- the JCE provider that supplies the transformation- Returns:
- the XMLCipher
- Throws:
XMLEncryptionException
-
getProviderInstance
public static XMLCipher getProviderInstance(String transformation, String provider, String canon) throws XMLEncryptionException Returns anXMLCipherthat implements the specified transformation, operates on the specified context document and serializes the document with the specified canonicalization algorithm before it encrypts the document.- Parameters:
transformation- the name of the transformation, e.g.,XMLCipher.TRIPLEDESwhich is shorthand for "http://www.w3.org/2001/04/xmlenc#tripledes-cbc"provider- the JCE provider that supplies the transformationcanon- the name of the c14n algorithm, ifnulluse standard serializer- Returns:
- Throws:
XMLEncryptionException
-
getInstance
Returns anXMLCipherthat implements no specific transformation, and can therefore only be used for decrypt or unwrap operations where the encryption method is defined in theEncryptionMethodelement.- Returns:
- The XMLCipher
- Throws:
XMLEncryptionException
-
getProviderInstance
Returns anXMLCipherthat implements no specific transformation, and can therefore only be used for decrypt or unwrap operations where the encryption method is defined in theEncryptionMethodelement. Allows the caller to specify a provider that will be used for cryptographic operations.- Parameters:
provider- the JCE provider that supplies the cryptographic needs.- Returns:
- the XMLCipher
- Throws:
XMLEncryptionException
-
init
Initializes this cipher with a key.The cipher is initialized for one of the following four operations: encryption, decryption, key wrapping or key unwrapping, depending on the value of opmode. For WRAP and ENCRYPT modes, this also initialises the internal EncryptedKey or EncryptedData (with a CipherValue) structure that will be used during the ensuing operations. This can be obtained (in order to modify KeyInfo elements etc. prior to finalising the encryption) by calling
getEncryptedData()orgetEncryptedKey().- Parameters:
opmode- the operation mode of this cipher (this is one of the following: ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE or UNWRAP_MODE)key-- Throws:
XMLEncryptionException- See Also:
-
getEncryptedData
Get the EncryptedData being build Returns the EncryptedData being built during an ENCRYPT operation. This can then be used by applications to add KeyInfo elements and set other parameters.- Returns:
- The EncryptedData being built
-
getEncryptedKey
Get the EncryptedData being build Returns the EncryptedData being built during an ENCRYPT operation. This can then be used by applications to add KeyInfo elements and set other parameters.- Returns:
- The EncryptedData being built
-
setKEK
Set a Key Encryption Key.The Key Encryption Key (KEK) is used for encrypting/decrypting EncryptedKey elements. By setting this separately, the XMLCipher class can know whether a key applies to the data part or wrapped key part of an encrypted object.
- Parameters:
kek- The key to use for de/encrypting key data
-
martial
Martial an EncryptedData Takes an EncryptedData object and returns a DOM Element that represents the appropriateEncryptedDataNote: This should only be used in cases where the context document has been passed in via a call to doFinal.
- Parameters:
encryptedData- EncryptedData object to martial- Returns:
- the DOM
Elementrepresenting the passed in object
-
martial
Martial an EncryptedKey Takes an EncryptedKey object and returns a DOM Element that represents the appropriateEncryptedKeyNote: This should only be used in cases where the context document has been passed in via a call to doFinal.
- Parameters:
encryptedKey- EncryptedKey object to martial- Returns:
- the DOM
Elementrepresenting the passed in object
-
martial
Martial an EncryptedData Takes an EncryptedData object and returns a DOM Element that represents the appropriateEncryptedData- Parameters:
context- The document that will own the returned nodesencryptedData- EncryptedData object to martial- Returns:
- the DOM
Elementrepresenting the passed in object
-
martial
Martial an EncryptedKey Takes an EncryptedKey object and returns a DOM Element that represents the appropriateEncryptedKey- Parameters:
context- The document that will own the created nodesencryptedKey- EncryptedKey object to martial- Returns:
- the DOM
Elementrepresenting the passed in object
-
doFinal
Process a DOMDocumentnode. The processing depends on the initialization parameters ofinit().- Parameters:
context- the contextDocument.source- theDocumentto be encrypted or decrypted.- Returns:
- the processed
Document. - Throws:
Exception- to indicate any exceptional conditions.
-
doFinal
Process a DOMElementnode. The processing depends on the initialization parameters ofinit().- Parameters:
context- the contextDocument.element- theElementto be encrypted.- Returns:
- the processed
Document. - Throws:
Exception- to indicate any exceptional conditions.
-
doFinal
Process the contents of a DOMElementnode. The processing depends on the initialization parameters ofinit().- Parameters:
context- the contextDocument.element- theElementwhich contents is to be encrypted.content-- Returns:
- the processed
Document. - Throws:
Exception- to indicate any exceptional conditions.
-
encryptData
Returns anEncryptedDatainterface. Use this operation if you want to have full control over the contents of theEncryptedDatastructure. this does not change the source document in any way.- Parameters:
context- the contextDocument.element- theElementthat will be encrypted.- Returns:
- the
EncryptedData - Throws:
Exception
-
encryptData
public EncryptedData encryptData(Document context, Element element, boolean contentMode) throws Exception Returns anEncryptedDatainterface. Use this operation if you want to have full control over the contents of theEncryptedDatastructure. this does not change the source document in any way.- Parameters:
context- the contextDocument.element- theElementthat will be encrypted.contentMode-trueto encrypt element's content only,falseotherwise- Returns:
- the
EncryptedData - Throws:
Exception
-
loadEncryptedData
public EncryptedData loadEncryptedData(Document context, Element element) throws XMLEncryptionException Returns anEncryptedDatainterface. Use this operation if you want to load anEncryptedDatastructure from a DOM structure and manipulate the contents- Parameters:
context- the contextDocument.element- theElementthat will be loaded- Returns:
- Throws:
XMLEncryptionException
-
loadEncryptedKey
public EncryptedKey loadEncryptedKey(Document context, Element element) throws XMLEncryptionException Returns anEncryptedKeyinterface. Use this operation if you want to load anEncryptedKeystructure from a DOM structure and manipulate the contents.- Parameters:
context- the contextDocument.element- theElementthat will be loaded- Returns:
- Throws:
XMLEncryptionException
-
loadEncryptedKey
Returns anEncryptedKeyinterface. Use this operation if you want to load anEncryptedKeystructure from a DOM structure and manipulate the contents. Assumes that the context document is the document that owns the element- Parameters:
element- theElementthat will be loaded- Returns:
- Throws:
XMLEncryptionException
-
encryptKey
Encrypts a key to an EncryptedKey structure- Parameters:
doc- the Context document that will be used to general DOMkey- Key to encrypt (will use previously set KEK to perform encryption- Returns:
- Throws:
XMLEncryptionException
-
decryptKey
Decrypt a key from a passed in EncryptedKey structure- Parameters:
encryptedKey- Previously loaded EncryptedKey that needs to be decrypted.algorithm- Algorithm for the decryption- Returns:
- a key corresponding to the give type
- Throws:
XMLEncryptionException
-
decryptKey
Decrypt a key from a passed in EncryptedKey structure. This version is used mainly internally, when the cipher already has an EncryptedData loaded. The algorithm URI will be read from the EncryptedData- Parameters:
encryptedKey- Previously loaded EncryptedKey that needs to be decrypted.- Returns:
- a key corresponding to the give type
- Throws:
XMLEncryptionException
-
decryptToByteArray
Decrypt an EncryptedData element to a byte array When passed in an EncryptedData node, returns the decryption as a byte array. Does not modify the source document- Parameters:
element-- Returns:
- Throws:
XMLEncryptionException
-
createEncryptedData
Creates anEncryptedDataElement. The newEncryptedData and newEncryptedKey methods create fairly complete elements that are immediately useable. All the other create* methods return bare elements that still need to be built upon.An EncryptionMethod will still need to be added however
- Parameters:
type- Either REFERENCE_TYPE or VALUE_TYPE - defines what kind of CipherData this EncryptedData will contain.value- the Base 64 encoded, encrypted text to wrap in theEncryptedDataor the URI to set in the CipherReference (usage will depend on thetype- Returns:
- the
EncryptedDataElement. - Throws:
XMLEncryptionException
-
createEncryptedKey
Creates anEncryptedKeyElement. The newEncryptedData and newEncryptedKey methods create fairly complete elements that are immediately useable. All the other create* methods return bare elements that still need to be built upon.An EncryptionMethod will still need to be added however
- Parameters:
type- Either REFERENCE_TYPE or VALUE_TYPE - defines what kind of CipherData this EncryptedData will contain.value- the Base 64 encoded, encrypted text to wrap in theEncryptedKeyor the URI to set in the CipherReference (usage will depend on thetype- Returns:
- the
EncryptedKeyElement. - Throws:
XMLEncryptionException
-
createAgreementMethod
Create an AgreementMethod object- Parameters:
algorithm- Algorithm of the agreement method- Returns:
-
createCipherData
Create a CipherData object- Parameters:
type- Type of this CipherData (either VALUE_TUPE or REFERENCE_TYPE)- Returns:
-
createCipherReference
Create a CipherReference object- Parameters:
uri- The URI that the reference will refer- Returns:
-
createCipherValue
Create a CipherValue element- Parameters:
value- The value to set the ciphertext to- Returns:
-
createEncryptionMethod
Create an EncryptedMethod object- Parameters:
algorithm- Algorithm for the encryption- Returns:
-
createEncryptionProperties
Create an EncryptedProperties element- Returns:
-
createEncryptionProperty
Create a new EncryptionProperty element- Returns:
-
createReferenceList
Create a new ReferenceList object- Parameters:
type-- Returns:
-
createTransforms
Create a new Transforms objectNote: A context document must have been set elsewhere (possibly via a call to doFinal). If not, use the createTransforms(Document) method.
- Returns:
-
createTransforms
Create a new Transforms object Because the handling of Transforms is currently done in the signature code, the creation of a Transforms object requires a context document.- Parameters:
doc- Document that will own the created Transforms node- Returns:
-