public abstract class CipherActor extends CryptographyActor
Cipher actors are any actors which perform encryption or
decryption based on the Java Cryptography Extension (JCE).
See the
CryptographyActor
documentation for
resources about JCA and JCE.
Actors extending this class take in an unsigned byte array at the input, process the data based on the algorithm parameter and send a unsigned byte array to the output. The algorithms that may be implemented are limited to those that are implemented by "providers" following the JCE specifications and installed in the machine being run. The mode and padding of the algorithm can also be specified in the mode and padding parameters. In case a provider specific instance of an algorithm is needed, the provider may also be specified in the provider parameter. The keySize parameter allows implementations of algorithms using various key sizes.
Concrete actors derived from this base class must implement the
CryptographyActor._process(byte[])
method.
The initialize() method of this actor sets _cipher to the
value of javax.crypt.Cipher.getInstance() with an argument that is
created from the values of the algorithm, padding and
keySize parameters. Derived classes should call _cipher.init()
with the value of the key in their fire() method. The_process() method
in a derived class usually calls _cipher.doFinal().
Entity.ContainedObjectsIterator
Modifier and Type | Field and Description |
---|---|
protected javax.crypto.Cipher |
_cipher
The cipher that will be used to process the data.
|
protected java.lang.String |
_mode
The mode to be used to process the data.
|
protected java.lang.String |
_padding
The padding scheme to be used process the data.
|
protected boolean |
_updateCipherNeeded
Set to true if one of the parameters changed and we need to
call _updateCipher().
|
StringParameter |
mode
The mode component when the Cipher is instantiated.
|
StringParameter |
padding
The padding scheme used by the cipher during encryption.
|
_algorithm, _keySize, _provider, algorithm, input, keySize, output, provider
_typesValid
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _deferChangeRequests, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
COMPLETED, NOT_READY, STOP_ITERATING
Constructor and Description |
---|
CipherActor(CompositeEntity container,
java.lang.String name)
Construct an actor with the given container and name.
|
Modifier and Type | Method and Description |
---|---|
protected void |
_updateCipher()
The value of _cipher is updated by calling
javax.crypt.Cipher.getInstance() with an argument that is
created from the values of the _algorithm, _mode and _padding.
|
void |
attributeChanged(Attribute attribute)
Override the base class to reinitialize the state if the
the mode, or paddingparameter is changed.
|
void |
fire()
Update _cipher if an attribute has changed and then invoke
super.fire() to transform the input data.
|
void |
initialize()
Retrieve the values of the parameters and set up
javax.crypto.Cipher.
|
_process
_containedTypeConstraints, _customTypeConstraints, _defaultTypeConstraints, _fireAt, _fireAt, attributeTypeChanged, clone, clone, isBackwardTypeInferenceEnabled, newPort, typeConstraintList, typeConstraints
_actorFiring, _actorFiring, _declareDelayDependency, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, postfire, prefire, preinitialize, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, setContainer, stop, stopFire, terminate, wrapup
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName
_addPort, _description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _containedDecorators, _copyChangeRequestList, _debug, _debug, _debug, _debug, _debug, _executeChangeRequests, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _notifyHierarchyListenersAfterChange, _notifyHierarchyListenersBeforeChange, _propagateValue, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, addHierarchyListener, attributeDeleted, attributeList, attributeList, decorators, 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, notifyOfNameChange, propagateValue, propagateValues, removeAttribute, removeChangeListener, removeDebugListener, removeHierarchyListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
isFireFunctional, isStrict, iterate, postfire, prefire, stop, stopFire, terminate
addInitializable, preinitialize, removeInitializable, wrapup
description, getContainer, getDisplayName, getFullName, getName, getName, setName
getDerivedLevel, getDerivedList, propagateValue
public StringParameter mode
NONE
CBC
CFB
ECB
OFB
PCBC
The initial default is the empty string, which indicates that the default setting for the algorithm should be used.
See the Java Cryptography Architecture Standard Algorithm Name Documentation for details.
public StringParameter padding
Block cipher algorithms like DES and Blowfish in Electronic Code Book (ECB) and Cipher Block Chaining (CBC) mode require their input to be an exact multiple of the block size. If the plaintext to be encrypted is not an exact multiple, you need to pad before encrypting by adding a padding string. When decrypting, the receiving party needs to know how to remove the padding, if any.
The padding is specified as a string. Names for parameter and parameters implemented vary based on the provider. Possible values include
NoPadding
OAEPWithdigestAndmgfPadding
PKCS5Padding
SSL3Padding
The initial default is the empty string, which indicates that the no padding should be used.
See the Java Cryptography Architecture Standard Algorithm Name Documentation for details.
protected javax.crypto.Cipher _cipher
protected java.lang.String _mode
protected java.lang.String _padding
protected boolean _updateCipherNeeded
public CipherActor(CompositeEntity container, java.lang.String name) throws NameDuplicationException, IllegalActionException
container
- The container.name
- The name of this actor.IllegalActionException
- If the actor cannot be contained
by the proposed container.NameDuplicationException
- If the container already has an
actor with this name.public void attributeChanged(Attribute attribute) throws IllegalActionException
attributeChanged
in class CryptographyActor
attribute
- The attribute that changed.IllegalActionException
- Not thrown in this base class.public void fire() throws IllegalActionException
fire
in interface Executable
fire
in class CryptographyActor
IllegalActionException
- If thrown by the base class or
if there is a problem processing the data.public void initialize() throws IllegalActionException
initialize
in interface Initializable
initialize
in class AtomicActor<TypedIOPort>
IllegalActionException
- If the algorithm cannot be found,
the padding scheme is illegal for the the given algorithm or
if the specified provider does not exist.protected void _updateCipher() throws IllegalActionException
IllegalActionException
- if the _cipher cannot be
initialized.