iaik.smime
Class SMimeBodyPart

java.lang.Object
  extended by javax.mail.BodyPart
      extended by javax.mail.internet.MimeBodyPart
          extended by iaik.smime.SMimeBodyPart
All Implemented Interfaces:
javax.mail.internet.MimePart, javax.mail.Part

public class SMimeBodyPart
extends javax.mail.internet.MimeBodyPart

This class extends the standard MimeBodyPart class of the javax.mail.internet package about MessageDigest calculation.

This class shall used when creating a body part to be sent within a multipart/signed message. When using the parent MimeBodyPart class no canonicalization is performed.


Field Summary
 
Fields inherited from class javax.mail.internet.MimeBodyPart
content, contentStream, dh, headers
 
Fields inherited from class javax.mail.BodyPart
parent
 
Fields inherited from interface javax.mail.Part
ATTACHMENT, INLINE
 
Constructor Summary
SMimeBodyPart()
          Creates a new SMimeBodyPart.
SMimeBodyPart(javax.mail.internet.InternetHeaders headers, byte[] content)
          Creates a new SMimeBodyPart from given header and content bytes.
 
Method Summary
 void checkForSMimeParts(boolean checkForSMimeParts)
          Turns on/off control to use SMimeMultiparts and SMimeBodyParts insteadof MimeMultipatrs and MimeBodyParts when supplying the content for this SMimeBodyPart.
 void setDataHandler(javax.activation.DataHandler dh)
          Sets the content wrapped by a javax.activation.DataHandler.
 void writeTo(java.io.OutputStream os)
          Writes the body part as an RFC 822 formatted stream and calculates a message digest over the data.
 
Methods inherited from class javax.mail.internet.MimeBodyPart
addHeader, addHeaderLine, getAllHeaderLines, getAllHeaders, getContent, getContentID, getContentLanguage, getContentMD5, getContentStream, getContentType, getDataHandler, getDescription, getDisposition, getEncoding, getFileName, getHeader, getHeader, getInputStream, getLineCount, getMatchingHeaderLines, getMatchingHeaders, getNonMatchingHeaderLines, getNonMatchingHeaders, getRawInputStream, getSize, isMimeType, removeHeader, setContent, setContent, setContentLanguage, setContentMD5, setDescription, setDescription, setDisposition, setFileName, setHeader, setText, setText, updateHeaders
 
Methods inherited from class javax.mail.BodyPart
getParent
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SMimeBodyPart

public SMimeBodyPart()
Creates a new SMimeBodyPart.


SMimeBodyPart

public SMimeBodyPart(javax.mail.internet.InternetHeaders headers,
                     byte[] content)
              throws javax.mail.MessagingException
Creates a new SMimeBodyPart from given header and content bytes.

Parameters:
headers - the headers
content - bytes representing the body of this part.
Throws:
javax.mail.MessagingException - if an error occurs when creating this body part
Method Detail

checkForSMimeParts

public void checkForSMimeParts(boolean checkForSMimeParts)
Turns on/off control to use SMimeMultiparts and SMimeBodyParts insteadof MimeMultipatrs and MimeBodyParts when supplying the content for this SMimeBodyPart. Especially when creating a signed message of type multipart/signed ("clear-signed") care has to be taken to properly canonicalize -- in particular text -- messages to give the same unique representation on the sender side where the signature is created and on the recipient side where the signature is verified.
The content of a signed message may be composed of MimeMultiparts consiting theirselves of several MimeBodyParts. To ensure that these body parts are canonicalized, they have to be modelled as SMimeBodyPart objects rather than using plain MimeBodyParts. When building a multipart entity from several body parts, the SMimeBodyParts have to be inserted into a SMimeMultipart object instead of using a plain MimeMultipart.
To avoid verification problems due to usage of not canonicalized parts, IAIK-CMS by default checks if SMimeMultiparts and SMimeBodyParts are used when creating a signed message. An exception is thrown if only plain MimeBodyParts and MimeMultiparts are used. However, when signing an already canonicalized entity (e.g. the content of a message just parsed) this check for SMimeMultiparts/SMimeBodyParts may not be required. In this case it might give some processing overhead to convert any MimeMultipart and MimeBodyPart to the required SMimeMultipart respectively SMimeBodyPart. For that reason it is possible to turn off the SMimePart check for a particular SignedContent, SMimeMultipart and/or SMimeBodyPart object or generally disable the SMimeBodyPart check throughout the whole application environment. When choosing the latter option by calling
 SMimeParameters.setCheckForSMimeParts(false);
 
take care to continue to use SMimeBodyParts and SMimeMultiparts when signing a newly created yet not canoinicalized content.

Parameters:
checkForSMimeParts - whether to turn on/off SMimePart checking

setDataHandler

public void setDataHandler(javax.activation.DataHandler dh)
                    throws javax.mail.MessagingException
Sets the content wrapped by a javax.activation.DataHandler.

Specified by:
setDataHandler in interface javax.mail.Part
Overrides:
setDataHandler in class javax.mail.internet.MimeBodyPart
Parameters:
dh - the dataHandler wrapping the content
Throws:
javax.mail.MessagingException - if the content supplied by the DataHandler cannot be accessed or the content represents a Multipart but is not supplied as SMimeMultipart (in the case of SMimePart control is enabled)

writeTo

public void writeTo(java.io.OutputStream os)
             throws java.io.IOException,
                    javax.mail.MessagingException
Writes the body part as an RFC 822 formatted stream and calculates a message digest over the data.

The message digest is set for the inherent JMailSMimeSigned object to be written as next part of the multipart/signed.

Specified by:
writeTo in interface javax.mail.Part
Overrides:
writeTo in class javax.mail.internet.MimeBodyPart
Parameters:
os - the output stream where the content shall be written to
Throws:
java.io.IOException - if an error occurs while writing to the stream
javax.mail.MessagingException - if an mail related error occurs

This Javadoc may contain text parts from text parts from IETF Internet Standard specifications (see copyright note).

IAIK-CMS 5.1, (c) 2002 IAIK, (c) 2003 - 2010 SIC