• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

qca

QCA::SecureMessage

QCA::SecureMessage Class Reference
[QCA user API]

#include <QtCrypto>

Inheritance diagram for QCA::SecureMessage:

Inheritance graph
[legend]

List of all members.


Detailed Description

Class representing a secure message.

SecureMessage presents a unified interface for working with both OpenPGP and CMS (S/MIME) messages. Prepare the object by calling setFormat(), setRecipient(), and setSigner() as necessary, and then begin the operation by calling an appropriate 'start' function, such as startSign().

Here is an example of how to perform a Clearsign operation using PGP:

// first make the SecureMessageKey
PGPKey myPGPKey = getSecretKeyFromSomewhere();
SecureMessageKey key;
key.setPGPSecretKey(myPGPKey);

// our data to sign
QByteArray plain = "Hello, world";

// let's do it
OpenPGP pgp;
SecureMessage msg(&pgp);
msg.setSigner(key);
msg.startSign(SecureMessage::Clearsign);
msg.update(plain);
msg.end();
msg.waitForFinished(-1);

if(msg.success())
{
    QByteArray result = msg.read();
    // result now contains the clearsign text data
}
else
{
    // error
    ...
}

Performing a CMS sign operation is similar. Simply set up the SecureMessageKey with a Certificate instead of a PGPKey, and operate on a CMS object instead of an OpenPGP object.

See also:
SecureMessageKey

SecureMessageSignature

OpenPGP

CMS

Definition at line 320 of file qca_securemessage.h.


Public Types

enum  Error {
  ErrorPassphrase, ErrorFormat, ErrorSignerExpired, ErrorSignerInvalid,
  ErrorEncryptExpired, ErrorEncryptUntrusted, ErrorEncryptInvalid, ErrorNeedCard,
  ErrorCertKeyMismatch, ErrorUnknown
}
enum  Format { Binary, Ascii }
enum  SignMode { Message, Clearsign, Detached }
enum  Type { OpenPGP, CMS }

Signals

void bytesWritten (int bytes)
void finished ()
void readyRead ()

Public Member Functions

bool bundleSignerEnabled () const
int bytesAvailable () const
bool canClearsign () const
bool canSignAndEncrypt () const
bool canSignMultiple () const
QString diagnosticText () const
void end ()
Error errorCode () const
Format format () const
QString hashName () const
QByteArray read ()
SecureMessageKeyList recipientKeys () const
void reset ()
 SecureMessage (SecureMessageSystem *system)
void setBundleSignerEnabled (bool b)
void setFormat (Format f)
void setRecipient (const SecureMessageKey &key)
void setRecipients (const SecureMessageKeyList &keys)
void setSigner (const SecureMessageKey &key)
void setSigners (const SecureMessageKeyList &keys)
void setSMIMEAttributesEnabled (bool b)
QByteArray signature () const
SecureMessageSignature signer () const
SecureMessageKeyList signerKeys () const
SecureMessageSignatureList signers () const
bool smimeAttributesEnabled () const
void startDecrypt ()
void startEncrypt ()
void startSign (SignMode m=Message)
void startSignAndEncrypt ()
void startVerify (const QByteArray &detachedSig=QByteArray())
bool success () const
Type type () const
void update (const QByteArray &in)
bool verifySuccess () const
bool waitForFinished (int msecs=30000)
bool wasSigned () const
 ~SecureMessage ()

Member Enumeration Documentation

enum QCA::SecureMessage::Error

Errors for secure messages.

Enumerator:
ErrorPassphrase  passphrase was either wrong or not provided
ErrorFormat  input format was bad
ErrorSignerExpired  signing key is expired
ErrorSignerInvalid  signing key is invalid in some way
ErrorEncryptExpired  encrypting key is expired
ErrorEncryptUntrusted  encrypting key is untrusted
ErrorEncryptInvalid  encrypting key is invalid in some way
ErrorNeedCard  pgp card is missing
ErrorCertKeyMismatch  certificate and private key don't match
ErrorUnknown  other error

Definition at line 355 of file qca_securemessage.h.

enum QCA::SecureMessage::Format

Formats for secure messages.

Enumerator:
Binary  DER/binary.
Ascii  PEM/ascii-armored.

Definition at line 346 of file qca_securemessage.h.

enum QCA::SecureMessage::SignMode

The type of message signature.

Enumerator:
Message  the message includes the signature
Clearsign  the message is clear signed
Detached  the signature is detached

Definition at line 336 of file qca_securemessage.h.

enum QCA::SecureMessage::Type

The type of secure message.

Enumerator:
OpenPGP  a Pretty Good Privacy message
CMS  a Cryptographic Message Syntax message

Definition at line 327 of file qca_securemessage.h.


Constructor & Destructor Documentation

QCA::SecureMessage::SecureMessage ( SecureMessageSystem *  system  ) 

Create a new secure message.

This constructor uses an existing SecureMessageSystem object (for example, an OpenPGP or CMS object) to generate a specific kind of secure message.

Parameters:
system a pre-existing and configured SecureMessageSystem object

Definition at line 385 of file qca_securemessage.cpp.

QCA::SecureMessage::~SecureMessage (  ) 

Definition at line 394 of file qca_securemessage.cpp.


Member Function Documentation

bool QCA::SecureMessage::bundleSignerEnabled (  )  const

Returns true if bundling of the signer certificate chain is enabled.

Definition at line 424 of file qca_securemessage.cpp.

int QCA::SecureMessage::bytesAvailable (  )  const

The number of bytes available to be read.

Definition at line 532 of file qca_securemessage.cpp.

void QCA::SecureMessage::bytesWritten ( int  bytes  )  [signal]

This signal is emitted when data has been accepted by the message processor.

Parameters:
bytes the number of bytes written

bool QCA::SecureMessage::canClearsign (  )  const

True if the SecureMessageSystem can clearsign messages.

Note:
CMS cannot clearsign - this is normally only available for PGP

Definition at line 409 of file qca_securemessage.cpp.

bool QCA::SecureMessage::canSignAndEncrypt (  )  const

True if the SecureMessageSystem can both sign and encrypt (in the same operation).

Note:
CMS cannot do an integrated sign/encrypt - this is normally only available for PGP. You can do separate signing and encrypting operations on the same message with CMS though.

Definition at line 414 of file qca_securemessage.cpp.

bool QCA::SecureMessage::canSignMultiple (  )  const

Test if the message type supports multiple (parallel) signatures.

Returns:
true if the secure message support multiple parallel signatures
Note:
PGP cannot do this - it is primarily a CMS feature

Definition at line 404 of file qca_securemessage.cpp.

QString QCA::SecureMessage::diagnosticText (  )  const

Returns a log of technical information about the operation, which may be useful for presenting to the user in an advanced error dialog.

Definition at line 602 of file qca_securemessage.cpp.

void QCA::SecureMessage::end (  ) 

Complete an operation.

You need to call this method after you have processed the message (which you pass in as the argument to update().

Note:
the results of the operation are not available as soon as this method returns. You need to wait for the finished() signal, or use waitForFinished().

Definition at line 537 of file qca_securemessage.cpp.

SecureMessage::Error QCA::SecureMessage::errorCode (  )  const

Returns the failure code.

See also:
success

diagnosticText

Definition at line 554 of file qca_securemessage.cpp.

void QCA::SecureMessage::finished (  )  [signal]

This signal is emitted when the message is fully processed.

SecureMessage::Format QCA::SecureMessage::format (  )  const

Return the format type set for this message.

Definition at line 434 of file qca_securemessage.cpp.

QString QCA::SecureMessage::hashName (  )  const

The name of the hash used for the signature process.

Definition at line 564 of file qca_securemessage.cpp.

QByteArray QCA::SecureMessage::read (  ) 

Read the available data.

Note:
For detached signatures, you don't get anything back using this method. Use signature() to get the detached signature().

Definition at line 525 of file qca_securemessage.cpp.

void QCA::SecureMessage::readyRead (  )  [signal]

This signal is emitted when there is some data to read.

Typically you connect this signal to a slot that does a read() of the available data.

Note:
This signal does not mean that the processing of a message is necessarily complete - see finished().

SecureMessageKeyList QCA::SecureMessage::recipientKeys (  )  const

Return the recipient(s) set for this message with setRecipient() or setRecipients().

Definition at line 439 of file qca_securemessage.cpp.

void QCA::SecureMessage::reset (  ) 

Reset the object state to that of original construction.

Now a new operation can be performed immediately.

Definition at line 419 of file qca_securemessage.cpp.

void QCA::SecureMessage::setBundleSignerEnabled ( bool  b  ) 

For CMS only, this will bundle the signer certificate chain into the message.

This allows a message to be verified on its own, without the need to have obtained the signer's certificate in advance. Email clients using S/MIME often bundle the signer, greatly simplifying key management.

This behavior is enabled by default.

Parameters:
b whether to bundle (if true) or not (false)

Definition at line 449 of file qca_securemessage.cpp.

void QCA::SecureMessage::setFormat ( Format  f  ) 

Set the Format used for messages.

The default is Binary.

Parameters:
f whether to use Binary or Ascii

Definition at line 459 of file qca_securemessage.cpp.

void QCA::SecureMessage::setRecipient ( const SecureMessageKey &  key  ) 

Set the recipient for an encrypted message.

Parameters:
key the recipient's key
See also:
setRecipients

Definition at line 464 of file qca_securemessage.cpp.

void QCA::SecureMessage::setRecipients ( const SecureMessageKeyList &  keys  ) 

Set the list of recipients for an encrypted message.

For a list with one item, this has the same effect as setRecipient.

Parameters:
keys the recipients' key
See also:
setRecipient

Definition at line 469 of file qca_securemessage.cpp.

void QCA::SecureMessage::setSigner ( const SecureMessageKey &  key  ) 

Set the signer for a signed message.

This is used for both creating signed messages as well as for verifying CMS messages that have no signer bundled.

Parameters:
key the key associated with the signer
See also:
setSigners

Definition at line 474 of file qca_securemessage.cpp.

void QCA::SecureMessage::setSigners ( const SecureMessageKeyList &  keys  ) 

Set the list of signers for a signed message.

This is used for both creating signed messages as well as for verifying CMS messages that have no signer bundled.

For a list with one item, this has the same effect as setSigner.

Parameters:
keys the key associated with the signer
See also:
setSigner

Definition at line 479 of file qca_securemessage.cpp.

void QCA::SecureMessage::setSMIMEAttributesEnabled ( bool  b  ) 

For CMS only, this will put extra attributes into the message related to S/MIME, such as the preferred type of algorithm to use in replies.

The attributes used are decided by the provider.

This behavior is enabled by default.

Parameters:
b whether to embed extra attribues (if true) or not (false)

Definition at line 454 of file qca_securemessage.cpp.

QByteArray QCA::SecureMessage::signature (  )  const

The signature for the message.

This is only used for Detached signatures. For other message types, you get the message and signature together using read().

Definition at line 559 of file qca_securemessage.cpp.

SecureMessageSignature QCA::SecureMessage::signer (  )  const

Information on the signer for the message.

Definition at line 589 of file qca_securemessage.cpp.

SecureMessageKeyList QCA::SecureMessage::signerKeys (  )  const

Return the signer(s) set for this message with setSigner() or setSigners().

Definition at line 444 of file qca_securemessage.cpp.

SecureMessageSignatureList QCA::SecureMessage::signers (  )  const

Information on the signers for the message.

This is only meaningful if the message type supports multiple signatures (see canSignMultiple() for a suitable test).

Definition at line 597 of file qca_securemessage.cpp.

bool QCA::SecureMessage::smimeAttributesEnabled (  )  const

Returns true if inclusion of S/MIME attributes is enabled.

Definition at line 429 of file qca_securemessage.cpp.

void QCA::SecureMessage::startDecrypt (  ) 

Start an decryption operation.

You will normally use this with some code along these lines:

decryptingObj.startEncrypt();
decryptingObj.update(message);
// perhaps some more update()s
decryptingObj.end();

Each update() may (or may not) result in some decrypted data, as indicated by the readyRead() signal being emitted. Alternatively, you can wait until the whole message is available (using either waitForFinished(), or the finished() signal). The decrypted message can then be read using the read() method.

Note:
If decrypted result is also signed (not for CMS), then the signature will be verified during this operation.

Definition at line 491 of file qca_securemessage.cpp.

void QCA::SecureMessage::startEncrypt (  ) 

Start an encryption operation.

You will normally use this with some code along these lines:

encryptingObj.startEncrypt();
encryptingObj.update(message);
// perhaps some more update()s
encryptingObj.end();

Each update() may (or may not) result in some encrypted data, as indicated by the readyRead() signal being emitted. Alternatively, you can wait until the whole message is available (using either waitForFinished(), or use the finished() signal. The encrypted message can then be read using the read() method.

Definition at line 484 of file qca_securemessage.cpp.

void QCA::SecureMessage::startSign ( SignMode  m = Message  ) 

Start a signing operation.

You will normally use this with some code along these lines:

signingObj.startSign(QCA::SecureMessage::Detached)
signingObj.update(message);
// perhaps some more update()s
signingObj.end();

For Detached signatures, you won't get any results until the whole process is done - you either waitForFinished(), or use the finished() signal, to figure out when you can get the signature (using the signature() method, not using read()). For other formats, you can use the readyRead() signal to determine when there may be part of a signed message to read().

Parameters:
m the mode that will be used to generate the signature

Definition at line 497 of file qca_securemessage.cpp.

void QCA::SecureMessage::startSignAndEncrypt (  ) 

Start a combined signing and encrypting operation.

You use this in the same way as startEncrypt().

Note:
This may not be possible (e.g. CMS cannot do this) - see canSignAndEncrypt() for a suitable test.

Definition at line 512 of file qca_securemessage.cpp.

void QCA::SecureMessage::startVerify ( const QByteArray &  detachedSig = QByteArray()  ) 

Start a verification operation.

Parameters:
detachedSig the detached signature to verify. Do not pass a signature for other signature types.

Definition at line 504 of file qca_securemessage.cpp.

bool QCA::SecureMessage::success (  )  const

Indicates whether or not the operation was successful or failed.

If this function returns false, then the reason for failure can be obtained with errorCode().

See also:
errorCode

diagnosticText

Definition at line 549 of file qca_securemessage.cpp.

SecureMessage::Type QCA::SecureMessage::type (  )  const

The Type of secure message.

Reimplemented from QCA::Algorithm.

Definition at line 399 of file qca_securemessage.cpp.

void QCA::SecureMessage::update ( const QByteArray &  in  ) 

Process a message (or the next part of a message) in the current operation.

You need to have already set up the message (startEncrypt(), startDecrypt(), startSign(), startSignAndEncrypt() and startVerify()) before calling this method.

Parameters:
in the data to process

Definition at line 520 of file qca_securemessage.cpp.

bool QCA::SecureMessage::verifySuccess (  )  const

Verify that the message signature is correct.

Returns:
true if the signature is valid for the message, otherwise return false

Definition at line 574 of file qca_securemessage.cpp.

bool QCA::SecureMessage::waitForFinished ( int  msecs = 30000  ) 

Block until the operation (encryption, decryption, signing or verifying) completes.

Parameters:
msecs the number of milliseconds to wait for the operation to complete. Pass -1 to wait indefinitely.
Note:
You should not use this in GUI applications where the blocking behaviour looks like a hung application. Instead, connect the finished() signal to a slot that handles the results.

This synchronous operation may require event handling, and so it must not be called from the same thread as an EventHandler.

Definition at line 542 of file qca_securemessage.cpp.

bool QCA::SecureMessage::wasSigned (  )  const

Test if the message was signed.

This is true for OpenPGP if the decrypted message was also signed.

Returns:
true if the message was signed.

Definition at line 569 of file qca_securemessage.cpp.


The documentation for this class was generated from the following files:
  • qca_securemessage.h
  • qca_securemessage.cpp

qca

Skip menu "qca"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  •   server
  • Decibel
  • eigen
  • Eigen2
  • kdewin32
  • Phonon
  •     Backend
  • qca
  • qimageblitz
  • soprano
  • strigi
  •     searchclient
  •     streamanalyzer
  •     streams
Generated for API Reference by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal