public interface EncodeListener
extends java.util.EventListener
toASN1Object method
of such a structure, use an empty OCTET_STRING for the not-yet known byte value, and
implement the encodeCalled method to set the
OCTET_STRING value actually during the encoding is performed, e.g.:
class xxx implements EncodeListener {
...
byte[] value;
...
public ASN1Object toASN1Object() throws CodingException {
SEQUENCE seq = new SEQUENCE();
...
// create an empty octet string and register as encode listener
OCTET_STRING oct = OCTET_STRING();
oct.addEncodeListener(this, 1);
}
...
// implement the encodeCalled method for setting the value during the
// encoding actually is performed
public void encodeCalled(ASN1Object o, int id) throws CodingException {
...
o.setValue(value);
}
...
}
Now, when calling DerCoder.encode(xxx.toASN1Object()) for performing the
DER encoding, the
addEncodeListener
method of the ASN1Object class is used for registering
the calling instance of the xxx class to be notified when the
OCTET_STRING component actually has to be encoded. Later, the programm execution will
jump to the encodeCalled method of the xxx instance for
obtaining the OCTET_STRING value. The encode method of the OCTET_STRING
instance itself will be executed not before the encodeCalled methods
of all registeres listeners have been executed.
Within the IAIK-JCE library, the EncodeListener utility is used for the stream
implementations of the several PKCS#7 content types, where the raw data to be
processed - e.g. signed for the example of the SignedData type -
is supplied from an input stream that is not read before the encoding actually is
performed. Since the, for instance, encryptedDigest value of an
inherent SigenrInfo depends on the data supplied from the stream,
it cannot be calculated before the stream has been read, and therefore has
been set during the encoding. For that reason, the SignerInfo
class implemets the EncodeListener interface.
ASN1Object| Modifier and Type | Method and Description |
|---|---|
void |
encodeCalled(ASN1Object o,
int id)
Method to be implemented for being called during the encoding procedure.
|
void encodeCalled(ASN1Object o, int id) throws CodingException
Use this method for setting specific properties of the supplied
ASN1Object actually during the encoding is performed. If the EncodeListener
wishes to be notified about the encoding process of more than only one object,
use different id values to distinguish between the several objects.
o - the ASN1Object to be supplied with information during the encoding
processid - an id that may be used to listen for more than only one object
encodingsCodingException - if an error occurs during the encoding procedure