ptolemy.actor.lib.security
Class SecretKey

java.lang.Object
  extended by ptolemy.kernel.util.NamedObj
      extended by ptolemy.kernel.InstantiableNamedObj
          extended by ptolemy.kernel.Entity
              extended by ptolemy.kernel.ComponentEntity
                  extended by ptolemy.actor.AtomicActor
                      extended by ptolemy.actor.TypedAtomicActor
                          extended by ptolemy.actor.lib.Source
                              extended by ptolemy.actor.lib.security.SecretKey
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable

public class SecretKey
extends Source

Create a secret key and send it on the output.

The secret key is a symmetric key can be used by the SymmetricEncryption and SymmetricDecryption actors. See SymmetricEncryption for a description of symmetric vs. asymmetric algorithms.

This key should be not be visible to users as the security of the encrypted message relies on the secrecy of this key.

This actor relies on the Java Cryptography Architecture (JCA) and Java Cryptography Extension (JCE). See the CryptographyActor documentation for resources about the JCE.

Since:
Ptolemy II 4.0
Version:
$Id: SecretKey.java 57040 2010-01-27 20:52:32Z cxh $
Author:
Christopher Hylands Brooks, Contributor: Rakesh Reddy
See Also:
KeyWriter, SecretKeyReader, Serialized Form
Accepted Rating:
Yellow (cxh)
Proposed Rating:
Green (cxh)

Nested Class Summary
 
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
 
Field Summary
protected  java.lang.String _algorithm
          The name of the algorithm to be used.
protected  int _keySize
          The key size to be used when processing information.
protected  java.lang.String _provider
          The provider to be used for a provider specific implementation.
private  javax.crypto.SecretKey _secretKey
           
private  KeyToken _secretKeyToken
           
private  boolean _updateSecretKeyNeeded
           
 StringParameter algorithm
          Specify the algorithm to be used to process data.
 Parameter keySize
          Specify the size of the key to be created.
 StringParameter provider
          Specify a provider for the given algorithm.
 
Fields inherited from class ptolemy.actor.lib.Source
output, trigger
 
Fields inherited from class ptolemy.actor.AtomicActor
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
 
Fields inherited from class ptolemy.kernel.util.NamedObj
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
 
Fields inherited from interface ptolemy.actor.Executable
COMPLETED, NOT_READY, STOP_ITERATING
 
Constructor Summary
SecretKey(CompositeEntity container, java.lang.String name)
          Construct an actor with the given container and name.
 
Method Summary
private  void _updateSecretKey()
          Update the secret key by calling KeyGenerator.getInstance() with an argument that is created from the values of _algorithm, _provider and _keySize.
 void attributeChanged(Attribute attribute)
          Override the base class to reinitialize the state if the algorithm, provider, or keysize parameter is changed.
 void fire()
          Send the key that was generated in initialize() on the output port.
 void initialize()
          Initialize the key by using the cached values of the parameters.
 
Methods inherited from class ptolemy.actor.lib.Source
prefire
 
Methods inherited from class ptolemy.actor.TypedAtomicActor
_addPort, _fireAt, _fireAt, attributeTypeChanged, clone, newPort, typeConstraintList, typeConstraints
 
Methods inherited from class ptolemy.actor.AtomicActor
_actorFiring, _actorFiring, addActorFiringListener, addInitializable, clone, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, postfire, preinitialize, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, setContainer, stop, stopFire, terminate, wrapup
 
Methods inherited from class ptolemy.kernel.ComponentEntity
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName
 
Methods inherited from class ptolemy.kernel.Entity
_description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName
 
Methods inherited from class ptolemy.kernel.InstantiableNamedObj
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
 
Methods inherited from class ptolemy.kernel.util.NamedObj
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _debug, _debug, _debug, _debug, _debug, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _propagateValue, _recordDecoratedAttributes, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, attributeList, attributeList, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getFullName, getModelErrorHandler, getName, getName, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, propagateValue, propagateValues, removeChangeListener, removeDebugListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface ptolemy.actor.Actor
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
 
Methods inherited from interface ptolemy.actor.Executable
isFireFunctional, isStrict, iterate, postfire, stop, stopFire, terminate
 
Methods inherited from interface ptolemy.actor.Initializable
addInitializable, preinitialize, removeInitializable, wrapup
 
Methods inherited from interface ptolemy.kernel.util.Nameable
description, getContainer, getDisplayName, getFullName, getName, getName, setName
 
Methods inherited from interface ptolemy.kernel.util.Derivable
getDerivedLevel, getDerivedList, propagateValue
 

Field Detail

algorithm

public StringParameter algorithm
Specify the algorithm to be used to process data. The algorithm is specified as a string. The algorithms are limited to those implemented by providers using the Java JCE which are found on the system. The initial default is "DES".


provider

public StringParameter provider
Specify a provider for the given algorithm. Takes the algorithm name as a string. The default value is "SystemDefault" which allows the system chooses the provider based on the JCE architecture.


keySize

public Parameter keySize
Specify the size of the key to be created. The key size is an integer value representing the number of bits in the key. The initial default depends on the algorithm that is selected, not all algorithms use keySize.

DSA is the most common algorithm that uses keySize, the Sun documentation says: "The length, in bits, of the modulus p. This must range from 512 to 1024, and must be a multiple of 64. The default keysize is 1024." Refer to http://java.sun.com/j2se/1.4.2/docs/guide/security/CryptoSpec.html#AppB for a list of possible key sizes for certain algorithms. The initial default is 1024.


_algorithm

protected java.lang.String _algorithm
The name of the algorithm to be used.


_keySize

protected int _keySize
The key size to be used when processing information.


_provider

protected java.lang.String _provider
The provider to be used for a provider specific implementation.


_secretKey

private javax.crypto.SecretKey _secretKey

_secretKeyToken

private KeyToken _secretKeyToken

_updateSecretKeyNeeded

private boolean _updateSecretKeyNeeded
Constructor Detail

SecretKey

public SecretKey(CompositeEntity container,
                 java.lang.String name)
          throws NameDuplicationException,
                 IllegalActionException
Construct an actor with the given container and name. The Java virtual machine is queried for algorithm and provider choices and these choices are added to the appropriate parameters.

Parameters:
container - The container.
name - The name of this actor.
Throws:
IllegalActionException - If the actor cannot be contained by the proposed container.
NameDuplicationException - If the container already has an actor with this name.
Method Detail

attributeChanged

public void attributeChanged(Attribute attribute)
                      throws IllegalActionException
Override the base class to reinitialize the state if the algorithm, provider, or keysize parameter is changed.

Overrides:
attributeChanged in class NamedObj
Parameters:
attribute - The attribute that changed.
Throws:
IllegalActionException - Not thrown in this base class.

fire

public void fire()
          throws IllegalActionException
Send the key that was generated in initialize() on the output port.

Specified by:
fire in interface Executable
Overrides:
fire in class Source
Throws:
IllegalActionException - If thrown by base class.

initialize

public void initialize()
                throws IllegalActionException
Initialize the key by using the cached values of the parameters.

Specified by:
initialize in interface Initializable
Overrides:
initialize in class AtomicActor
Throws:
IllegalActionException - If thrown by base class or if the algorithm is not found, or if the padding scheme is illegal, or if the specified provider does not exist.

_updateSecretKey

private void _updateSecretKey()
                       throws IllegalActionException
Update the secret key by calling KeyGenerator.getInstance() with an argument that is created from the values of _algorithm, _provider and _keySize.

Throws:
IllegalActionException