XML Security, 1.6

com.ibm.xml.enc.dom
Class DOMEncryptionMethod

java.lang.Object
  extended by com.ibm.xml.enc.dom.DOMStructure
      extended by com.ibm.xml.enc.dom.DOMEncryptionMethod
All Implemented Interfaces:
AlgorithmMethod, EncryptionMethod, XMLStructure
Direct Known Subclasses:
DOMAESCBC, DOMKWAES, DOMKWTripleDES, DOMRSA15, DOMRSAOAEP, DOMTripleDESCBC

abstract class DOMEncryptionMethod
extends DOMStructure
implements EncryptionMethod

DOM-based abstract implementation of EncryptionMethod.


Field Summary
 
Fields inherited from interface javax.xml.crypto.enc.EncryptionMethod
AES128_CBC, AES192_CBC, AES256_CBC, KW_AES128, KW_AES192, KW_AES256, KW_TRIPLEDES, RSA_1_5, RSA_OAEP_MGF1P, TRIPLEDES_CBC
 
Constructor Summary
(package private) DOMEncryptionMethod()
           
protected DOMEncryptionMethod(org.w3c.dom.Element emElem)
          Creates a DOMEncryptionMethod from an element.
protected DOMEncryptionMethod(java.lang.String algorithm, java.lang.Integer keySize, java.security.spec.AlgorithmParameterSpec params)
          Creates a DOMEncryptionMethod.
 
Method Summary
protected abstract  void checkParams(java.lang.Integer keySize, EncryptionMethodParameterSpec params)
          Checks if the specified parameters are valid for this algorithm.
abstract  byte[] decrypt(java.security.Key key, byte[] encrypted)
          decrypt the specified bytes with the specified key, using the underlying encryption algorithm.
abstract  java.security.Key decryptKey(java.security.Key key, byte[] encrypted, AlgorithmMethod algo)
           
abstract  byte[] encrypt(java.security.Key key, byte[] data, EncryptedType type)
          encrypt the passed-in data with the specified key, using the underlying encryption algorithm and parameters.
 boolean equals(java.lang.Object o)
           
protected  java.security.Key genKey(byte[] keybytes, java.lang.String alg)
           
 java.lang.String getAlgorithm()
          Returns the algorithm URI of this AlgorithmMethod.
 java.lang.Integer getKeySize()
          Returns the size of the key to be used with this EncryptionMethod.
 java.security.spec.AlgorithmParameterSpec getParameterSpec()
          Returns algorithm-specific parameters for this EncryptionMethod.
protected  void init(java.lang.String algorithm, java.lang.Integer keySize, java.security.spec.AlgorithmParameterSpec params)
           
 void marshal(org.w3c.dom.Node parent, java.lang.String encPrefix, DOMCryptoContext context)
          This method invokes the abstract marshalParams method to marshal any algorithm-specific parameters.
protected abstract  void marshalParams(org.w3c.dom.Element parent, java.lang.String paramsPrefix)
          Marshals the algorithm-specific parameters to an Element and appends it to the specified parent element.
protected abstract  boolean paramsEqual(java.security.spec.AlgorithmParameterSpec spec)
          Returns true if parameters are equal; false otherwise.
 java.lang.String parseAlg(AlgorithmMethod algo)
           
(package private) static EncryptionMethod unmarshal(org.w3c.dom.Element emElem)
           
protected abstract  EncryptionMethodParameterSpec unmarshalParams(org.w3c.dom.Element paramsElem)
          Unmarshals EncryptionMethodParameterSpec from the specified Element.
abstract  byte[] unwrap(java.security.Key key, byte[] encrypted)
          unwraps a previously wrapped key using the underlying encryption algorithm.
abstract  java.security.Key unwrap(java.security.Key key, byte[] encrypted, AlgorithmMethod algo)
          unwraps a previously wrapped key using the underlying encryption algorithm.
abstract  byte[] wrap(java.security.Key key, java.security.Key toBeWrapped)
          encrypt the passed-in key with the specified key, using the underlying encryption algorithm and parameters.
 
Methods inherited from class com.ibm.xml.enc.dom.DOMStructure
isFeatureSupported
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface javax.xml.crypto.XMLStructure
isFeatureSupported
 

Constructor Detail

DOMEncryptionMethod

DOMEncryptionMethod()

DOMEncryptionMethod

protected DOMEncryptionMethod(java.lang.String algorithm,
                              java.lang.Integer keySize,
                              java.security.spec.AlgorithmParameterSpec params)
                       throws java.security.InvalidAlgorithmParameterException
Creates a DOMEncryptionMethod.

Parameters:
algorithm - the URI identifying the encryption algorithm
keySize - the optional keySize
params - the algorithm-specific params (may be null)
Throws:
java.lang.NullPointerException - if algorithm is null
java.security.InvalidAlgorithmParameterException - if the parameters are not appropriate for this encryption method

DOMEncryptionMethod

protected DOMEncryptionMethod(org.w3c.dom.Element emElem)
                       throws MarshalException
Creates a DOMEncryptionMethod from an element. This ctor invokes the abstract unmarshalParams method to unmarshal any algorithm-specific input parameters. It extracts the KeySize information if available. The ctor then invokes the abstract checkParams method to validate the compliance of the parameters

Parameters:
emElem - a EncryptionMethod element
Throws:
MarshalException
Method Detail

init

protected void init(java.lang.String algorithm,
                    java.lang.Integer keySize,
                    java.security.spec.AlgorithmParameterSpec params)
             throws java.security.InvalidAlgorithmParameterException
Throws:
java.security.InvalidAlgorithmParameterException

unmarshalParams

protected abstract EncryptionMethodParameterSpec unmarshalParams(org.w3c.dom.Element paramsElem)
                                                          throws MarshalException
Unmarshals EncryptionMethodParameterSpec from the specified Element. Subclasses should implement this to unmarshal the algorithm-specific parameters.

Parameters:
paramsElem - the Element holding the input params
Returns:
the algorithm-specific EncryptionMethodParameterSpec
Throws:
MarshalException - if the parameters cannot be unmarshalled

unmarshal

static EncryptionMethod unmarshal(org.w3c.dom.Element emElem)
                           throws MarshalException
Throws:
MarshalException

checkParams

protected abstract void checkParams(java.lang.Integer keySize,
                                    EncryptionMethodParameterSpec params)
                             throws java.security.InvalidAlgorithmParameterException
Checks if the specified parameters are valid for this algorithm.

Parameters:
params - the algorithm-specific params (may be null)
Throws:
java.security.InvalidAlgorithmParameterException - if the parameters are not appropriate for this encryption method

getParameterSpec

public final java.security.spec.AlgorithmParameterSpec getParameterSpec()
Description copied from interface: EncryptionMethod
Returns algorithm-specific parameters for this EncryptionMethod. The returned parameters can be typecast to a EncryptionMethodParameterSpec object.

Specified by:
getParameterSpec in interface AlgorithmMethod
Specified by:
getParameterSpec in interface EncryptionMethod
Returns:
the algorithm-specific input parameters of this EncryptionMethod. (may be null if not specified)

getAlgorithm

public final java.lang.String getAlgorithm()
Description copied from interface: AlgorithmMethod
Returns the algorithm URI of this AlgorithmMethod.

Specified by:
getAlgorithm in interface AlgorithmMethod
Returns:
the algorithm URI of this AlgorithmMethod

getKeySize

public final java.lang.Integer getKeySize()
Description copied from interface: EncryptionMethod
Returns the size of the key to be used with this EncryptionMethod.

Specified by:
getKeySize in interface EncryptionMethod
Returns:
the key size, or null if not specified

marshal

public void marshal(org.w3c.dom.Node parent,
                    java.lang.String encPrefix,
                    DOMCryptoContext context)
             throws MarshalException
This method invokes the abstract marshalParams method to marshal any algorithm-specific parameters.

Specified by:
marshal in class DOMStructure
Throws:
MarshalException

encrypt

public abstract byte[] encrypt(java.security.Key key,
                               byte[] data,
                               EncryptedType type)
                        throws java.security.InvalidKeyException,
                               javax.crypto.IllegalBlockSizeException
encrypt the passed-in data with the specified key, using the underlying encryption algorithm and parameters.

Parameters:
key - the encryption key
data - the data bytes to be encrytped
Returns:
encrypted data
Throws:
java.lang.NullPointerException - if key or data are null
java.security.InvalidKeyException - if the key is improperly encoded, of the wrong type, or parameters are missing, etc
javax.crypto.IllegalBlockSizeException - if this cipher is a block cipher, no padding has been requested (only in encryption mode), and the total input length of the data processed by this cipher is not a multiple of block size

decrypt

public abstract byte[] decrypt(java.security.Key key,
                               byte[] encrypted)
                        throws java.security.InvalidKeyException,
                               javax.crypto.BadPaddingException,
                               javax.crypto.IllegalBlockSizeException
decrypt the specified bytes with the specified key, using the underlying encryption algorithm.

Parameters:
key - the decryption key
encrypted - the bytes to be decrypted
Returns:
the decrypted data
Throws:
java.lang.NullPointerException - if key or data are null
java.security.InvalidKeyException - if the key is improperly encoded, of the wrong type, or parameters are missing, etc
javax.crypto.BadPaddingException - if unpadding has been requested, but the decrypted data is not bounded by the appropriate padding bytes
javax.crypto.IllegalBlockSizeException - if this cipher is a block cipher, no padding has been requested (only in encryption mode), and the total input length of the data processed by this cipher is not a multiple of block size

decryptKey

public abstract java.security.Key decryptKey(java.security.Key key,
                                             byte[] encrypted,
                                             AlgorithmMethod algo)
                                      throws java.security.InvalidKeyException,
                                             javax.crypto.BadPaddingException,
                                             javax.crypto.IllegalBlockSizeException,
                                             java.security.NoSuchAlgorithmException
Throws:
java.security.InvalidKeyException
javax.crypto.BadPaddingException
javax.crypto.IllegalBlockSizeException
java.security.NoSuchAlgorithmException

wrap

public abstract byte[] wrap(java.security.Key key,
                            java.security.Key toBeWrapped)
                     throws java.security.InvalidKeyException,
                            javax.crypto.IllegalBlockSizeException
encrypt the passed-in key with the specified key, using the underlying encryption algorithm and parameters.

Parameters:
key - the encryption key
toBeWrapped - the key to be encrypted
Returns:
encrypted key
Throws:
java.lang.NullPointerException - if key or data are null
java.security.InvalidKeyException - if the key is improperly encoded, of the wrong type, or parameters are missing, etc
javax.crypto.IllegalBlockSizeException - if this cipher is a block cipher, no padding has been requested (only in encryption mode), and the total input length of the data processed by this cipher is not a multiple of block size

unwrap

public abstract byte[] unwrap(java.security.Key key,
                              byte[] encrypted)
                       throws java.security.InvalidKeyException,
                              javax.crypto.BadPaddingException,
                              javax.crypto.IllegalBlockSizeException
unwraps a previously wrapped key using the underlying encryption algorithm.

Parameters:
key - the decryption key
encrypted - the wrapped key to be unwrapped
Returns:
the unwrapped key as a byte[]
Throws:
java.lang.NullPointerException - if key or data are null
java.security.InvalidKeyException - if the key is improperly encoded, of the wrong type, or parameters are missing, etc
javax.crypto.BadPaddingException - if unpadding has been requested, but the decrypted data is not bounded by the appropriate padding bytes
javax.crypto.IllegalBlockSizeException - if this cipher is a block cipher, no padding has been requested (only in encryption mode), and the total input length of the data processed by this cipher is not a multiple of block size

unwrap

public abstract java.security.Key unwrap(java.security.Key key,
                                         byte[] encrypted,
                                         AlgorithmMethod algo)
                                  throws java.security.InvalidKeyException,
                                         javax.crypto.BadPaddingException,
                                         javax.crypto.IllegalBlockSizeException,
                                         java.security.NoSuchAlgorithmException
unwraps a previously wrapped key using the underlying encryption algorithm.

Parameters:
key - the decryption key
encrypted - the wrapped key to be unwrapped
algo - the algorithm of the decrypted key
Returns:
the unwrapped key
Throws:
java.lang.NullPointerException - if key or data are null
java.security.InvalidKeyException - if the key is improperly encoded, of the wrong type, or parameters are missing, etc
javax.crypto.BadPaddingException - if unpadding has been requested, but the decrypted data is not bounded by the appropriate padding bytes
javax.crypto.IllegalBlockSizeException - if this cipher is a block cipher, no padding has been requested (only in encryption mode), and the total input length of the data processed by this cipher is not a multiple of block size
java.security.NoSuchAlgorithmException

marshalParams

protected abstract void marshalParams(org.w3c.dom.Element parent,
                                      java.lang.String paramsPrefix)
                               throws MarshalException
Marshals the algorithm-specific parameters to an Element and appends it to the specified parent element.

Parameters:
parent - the parent element to append the parameters to
paramsPrefix - the algorithm parameters prefix to use
Throws:
MarshalException - if the parameters cannot be marshalled

paramsEqual

protected abstract boolean paramsEqual(java.security.spec.AlgorithmParameterSpec spec)
Returns true if parameters are equal; false otherwise. Subclasses should override this method to compare algorithm-specific parameters.


equals

public boolean equals(java.lang.Object o)
Overrides:
equals in class java.lang.Object

parseAlg

public java.lang.String parseAlg(AlgorithmMethod algo)

genKey

protected java.security.Key genKey(byte[] keybytes,
                                   java.lang.String alg)
                            throws java.security.InvalidKeyException
Throws:
java.security.InvalidKeyException

XML Security, 1.6

Portions Copyright 2003, 2012 IBM Corporation.
Portions Copyright 2003, 2012 Oracle and/or its affiliates.