javax.crypto

Class SealedObject

public class SealedObject extends Object implements Serializable

This class allows any {@link java.io.Serializable} object to be stored in an encrypted form.

When the sealed object is ready to be unsealed (and deserialized) the caller may use either

  1. {@link #getObject(javax.crypto.Cipher)}, which uses an already-initialized {@link javax.crypto.Cipher}.

    or,
  2. {@link #getObject(java.security.Key)} or {@link #getObject(java.security.Key,java.lang.String)}, which will initialize a new cipher instance with the {@link #encodedParams} that were stored with this sealed object (this is so parameters, such as the IV, don't need to be known by the one unsealing the object).

Since: 1.4

Field Summary
protected byte[]encodedParams
The encoded algorithm parameters.
Constructor Summary
SealedObject(Serializable object, Cipher cipher)
Create a new sealed object from a {@link java.io.Serializable} object and a cipher.
protected SealedObject(SealedObject so)
Create a new sealed object from another sealed object.
Method Summary
StringgetAlgorithm()
Get the name of the algorithm used to seal this object.
ObjectgetObject(Cipher cipher)
Unseal and deserialize this sealed object with a specified (already initialized) cipher.
ObjectgetObject(Key key)
Unseal and deserialize this sealed object with the specified key.
ObjectgetObject(Key key, String provider)
Unseal and deserialize this sealed object with the specified key, using a cipher from the named provider.

Field Detail

encodedParams

protected byte[] encodedParams
The encoded algorithm parameters.

Constructor Detail

SealedObject

public SealedObject(Serializable object, Cipher cipher)
Create a new sealed object from a {@link java.io.Serializable} object and a cipher.

Parameters: object The object to seal. cipher The cipher to encrypt with.

Throws: java.io.IOException If serializing the object fails. javax.crypto.IllegalBlockSizeException If the cipher has no padding and the size of the serialized representation of the object is not a multiple of the cipher's block size.

SealedObject

protected SealedObject(SealedObject so)
Create a new sealed object from another sealed object.

Parameters: so The other sealed object.

Method Detail

getAlgorithm

public final String getAlgorithm()
Get the name of the algorithm used to seal this object.

Returns: The algorithm's name.

getObject

public final Object getObject(Cipher cipher)
Unseal and deserialize this sealed object with a specified (already initialized) cipher.

Parameters: cipher The cipher to decrypt with.

Returns: The original object.

Throws: java.io.IOException If reading fails. java.lang.ClassNotFoundException If deserialization fails. javax.crypto.IllegalBlockSizeException If the cipher has no padding and the encrypted data is not a multiple of the cipher's block size. javax.crypto.BadPaddingException If the padding bytes are incorrect.

getObject

public final Object getObject(Key key)
Unseal and deserialize this sealed object with the specified key.

Parameters: key The key to decrypt with.

Returns: The original object.

Throws: java.io.IOException If reading fails. java.lang.ClassNotFoundException If deserialization fails. java.security.InvalidKeyException If the supplied key cannot be used to unseal this object. java.security.NoSuchAlgorithmException If the algorithm used to originally seal this object is not available.

getObject

public final Object getObject(Key key, String provider)
Unseal and deserialize this sealed object with the specified key, using a cipher from the named provider.

Parameters: key The key to decrypt with. provider The name of the provider to use.

Returns: The original object.

Throws: java.io.IOException If reading fails. java.lang.ClassNotFoundException If deserialization fails. java.security.InvalidKeyException If the supplied key cannot be used to unseal this object. java.security.NoSuchAlgorithmException If the algorithm used to originally seal this object is not available from the named provider. java.security.NoSuchProviderException If the named provider does not exist.