Qt Cryptographic Architecture
qca_securemessage.h
Go to the documentation of this file.
1 /*
2  * qca_securemessage.h - Qt Cryptographic Architecture
3  * Copyright (C) 2003-2007 Justin Karneges <justin@affinix.com>
4  * Copyright (C) 2004,2005 Brad Hards <bradh@frogmouth.net>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19  * 02110-1301 USA
20  *
21  */
22 
33 #ifndef QCA_SECUREMESSAGE_H
34 #define QCA_SECUREMESSAGE_H
35 
36 #include <QObject>
37 #include "qca_core.h"
38 #include "qca_publickey.h"
39 #include "qca_cert.h"
40 
41 class QDateTime;
42 
43 namespace QCA {
44 
45 class SecureMessageSystem;
46 
54 class QCA_EXPORT SecureMessageKey
55 {
56 public:
60  enum Type
61  {
62  None,
63  PGP,
64  X509
65  };
66 
71 
78 
80 
87 
91  bool isNull() const;
92 
96  Type type() const;
97 
102 
107 
113  void setPGPPublicKey(const PGPKey &pub);
114 
120  void setPGPSecretKey(const PGPKey &sec);
121 
126 
131 
138 
145 
151  void setX509KeyBundle(const KeyBundle &kb);
152 
156  bool havePrivate() const;
157 
165  QString name() const;
166 
167 private:
168  class Private;
169  QSharedDataPointer<Private> d;
170 };
171 
176 
184 class QCA_EXPORT SecureMessageSignature
185 {
186 public:
191  {
195  NoKey
196  };
197 
205 
217  SecureMessageSignature(IdentityResult r, Validity v, const SecureMessageKey &key, const QDateTime &ts);
218 
225 
227 
234 
239 
244 
249 
253  QDateTime timestamp() const;
254 
255 private:
256  class Private;
257  QSharedDataPointer<Private> d;
258 };
259 
264 
265 
320 class QCA_EXPORT SecureMessage : public QObject, public Algorithm
321 {
322  Q_OBJECT
323 public:
327  enum Type
328  {
330  CMS
331  };
332 
336  enum SignMode
337  {
340  Detached
341  };
342 
346  enum Format
347  {
349  Ascii
350  };
351 
355  enum Error
356  {
369  ErrorEncryptRevoked
370  };
371 
384  ~SecureMessage() override;
385 
389  Type type() const;
390 
401  bool canSignMultiple() const;
402 
410  bool canClearsign() const;
411 
421  bool canSignAndEncrypt() const;
422 
427  void reset();
428 
433  bool bundleSignerEnabled() const;
434 
439 
443  Format format() const;
444 
450 
456 
469 
481 
489  void setFormat(Format f);
490 
498  void setRecipient(const SecureMessageKey &key);
499 
510 
521  void setSigner(const SecureMessageKey &key);
522 
535  void setSigners(const SecureMessageKeyList &keys);
536 
557  void startEncrypt();
558 
583  void startDecrypt();
584 
609  void startSign(SignMode m = Message);
610 
618  void startVerify(const QByteArray &detachedSig = QByteArray());
619 
630 
640  void update(const QByteArray &in);
641 
649  QByteArray read();
650 
654  int bytesAvailable() const;
655 
668  void end();
669 
687  bool waitForFinished(int msecs = 30000);
688 
697  bool success() const;
698 
705  Error errorCode() const;
706 
713  QByteArray signature() const;
714 
718  QString hashName() const;
719 
728  bool wasSigned() const;
729 
736  bool verifySuccess() const;
737 
742 
751 
757  QString diagnosticText() const;
758 
759 Q_SIGNALS:
769  void readyRead();
770 
777  void bytesWritten(int bytes);
778 
783  void finished();
784 
785 private:
786  Q_DISABLE_COPY(SecureMessage)
787 
788  class Private;
789  friend class Private;
790  Private *d;
791 };
792 
803 class QCA_EXPORT SecureMessageSystem : public QObject, public Algorithm
804 {
805  Q_OBJECT
806 public:
807  ~SecureMessageSystem() override;
808 
809 protected:
823  SecureMessageSystem(QObject *parent, const QString &type, const QString &provider);
824 
825 private:
826  Q_DISABLE_COPY(SecureMessageSystem)
827 };
828 
840 class QCA_EXPORT OpenPGP : public SecureMessageSystem
841 {
842  Q_OBJECT
843 public:
851  explicit OpenPGP(QObject *parent = nullptr, const QString &provider = QString());
852  ~OpenPGP() override;
853 
854 private:
855  Q_DISABLE_COPY(OpenPGP)
856 
857  class Private;
858  Private *d;
859 };
860 
886 class QCA_EXPORT CMS : public SecureMessageSystem
887 {
888  Q_OBJECT
889 public:
897  explicit CMS(QObject *parent = nullptr, const QString &provider = QString());
898  ~CMS() override;
899 
904 
909 
914 
923 
937 
948 
949 private:
950  Q_DISABLE_COPY(CMS)
951 
952  class Private;
953  Private *d;
954 };
955 
956 }
957 
958 #endif
General superclass for an algorithm.
Definition: qca_core.h:1152
Cryptographic Message Syntax messaging system.
Definition: qca_securemessage.h:887
CertificateCollection trustedCertificates() const
Return the trusted certificates set for this object.
CMS(QObject *parent=nullptr, const QString &provider=QString())
Standard constructor.
void setTrustedCertificates(const CertificateCollection &trusted)
Set the trusted certificates to use for the messages built using this CMS object.
SecureMessageKeyList privateKeys() const
Return the private keys set for this object.
void setUntrustedCertificates(const CertificateCollection &untrusted)
Set the untrusted certificates to use for the messages built using this CMS object.
CertificateCollection untrustedCertificates() const
Return the untrusted certificates set for this object.
void setPrivateKeys(const SecureMessageKeyList &keys)
Set the private keys to use for the messages built using this CMS object.
A chain of related Certificates.
Definition: qca_cert.h:1208
Bundle of Certificates and CRLs.
Definition: qca_cert.h:1891
Certificate chain and private key pair.
Definition: qca_cert.h:2136
Pretty Good Privacy messaging system.
Definition: qca_securemessage.h:841
OpenPGP(QObject *parent=nullptr, const QString &provider=QString())
Standard constructor.
Pretty Good Privacy key.
Definition: qca_cert.h:2361
Generic private key.
Definition: qca_publickey.h:827
Key for SecureMessage system.
Definition: qca_securemessage.h:55
Type type() const
The key type.
SecureMessageKey()
Construct an empty key.
SecureMessageKey & operator=(const SecureMessageKey &from)
Standard assignment operator.
SecureMessageKey(const SecureMessageKey &from)
Standard copy constructor.
PrivateKey x509PrivateKey() const
The X.509 private key part of this key.
void setX509PrivateKey(const PrivateKey &k)
Set the private key part of this X.509 key.
void setPGPPublicKey(const PGPKey &pub)
Set the public key part of a PGP key.
PGPKey pgpPublicKey() const
Public key part of a PGP key.
PGPKey pgpSecretKey() const
Private key part of a PGP key.
bool isNull() const
Returns true for null object.
bool havePrivate() const
Test if this key contains a private key part.
QString name() const
The name associated with this key.
CertificateChain x509CertificateChain() const
The X.509 certificate chain (public part) for this key.
void setX509CertificateChain(const CertificateChain &c)
Set the public key part of this X.509 key.
void setX509KeyBundle(const KeyBundle &kb)
Set the public and private part of this X.509 key with KeyBundle.
void setPGPSecretKey(const PGPKey &sec)
Set the private key part of a PGP key.
Type
The key type.
Definition: qca_securemessage.h:61
@ None
no key
Definition: qca_securemessage.h:62
@ PGP
Pretty Good Privacy key.
Definition: qca_securemessage.h:63
SecureMessage signature.
Definition: qca_securemessage.h:185
IdentityResult identityResult() const
get the results of the identity check on this signature
IdentityResult
The result of identity verification.
Definition: qca_securemessage.h:191
@ InvalidSignature
valid key provided, but signature failed
Definition: qca_securemessage.h:193
@ Valid
indentity is verified, matches signature
Definition: qca_securemessage.h:192
@ InvalidKey
invalid key provided
Definition: qca_securemessage.h:194
QDateTime timestamp() const
get the timestamp associated with this signature
SecureMessageKey key() const
get the key associated with this signature
Validity keyValidity() const
get the results of the key validation check on this signature
SecureMessageSignature(IdentityResult r, Validity v, const SecureMessageKey &key, const QDateTime &ts)
Create a signature check object.
SecureMessageSignature()
Create an empty signature check object.
SecureMessageSignature(const SecureMessageSignature &from)
Standard copy constructor.
SecureMessageSignature & operator=(const SecureMessageSignature &from)
Standard assignment operator.
Abstract superclass for secure messaging systems.
Definition: qca_securemessage.h:804
SecureMessageSystem(QObject *parent, const QString &type, const QString &provider)
Protected constructor for SecureMessageSystem classes.
Class representing a secure message.
Definition: qca_securemessage.h:321
bool success() const
Indicates whether or not the operation was successful or failed.
void reset()
Reset the object state to that of original construction.
void setRecipient(const SecureMessageKey &key)
Set the recipient for an encrypted message.
SecureMessage(SecureMessageSystem *system)
Create a new secure message.
SecureMessageKeyList signerKeys() const
Return the signer(s) set for this message with setSigner() or setSigners()
SecureMessageKeyList recipientKeys() const
Return the recipient(s) set for this message with setRecipient() or setRecipients()
bool verifySuccess() const
Verify that the message signature is correct.
Format format() const
Return the format type set for this message.
bool smimeAttributesEnabled() const
Returns true if inclusion of S/MIME attributes is enabled.
QByteArray signature() const
The signature for the message.
Type
The type of secure message.
Definition: qca_securemessage.h:328
@ OpenPGP
a Pretty Good Privacy message
Definition: qca_securemessage.h:329
bool waitForFinished(int msecs=30000)
Block until the operation (encryption, decryption, signing or verifying) completes.
void setFormat(Format f)
Set the Format used for messages.
void startSign(SignMode m=Message)
void readyRead()
This signal is emitted when there is some data to read.
SecureMessageSignature signer() const
Information on the signer for the message.
void setSigner(const SecureMessageKey &key)
Set the signer for a signed message.
QString diagnosticText() const
Returns a log of technical information about the operation, which may be useful for presenting to the...
void startSignAndEncrypt()
Start a combined signing and encrypting operation.
int bytesAvailable() const
The number of bytes available to be read.
Type type() const
The Type of secure message.
void startVerify(const QByteArray &detachedSig=QByteArray())
Start a verification operation.
QByteArray read()
Read the available data.
void setRecipients(const SecureMessageKeyList &keys)
Set the list of recipients for an encrypted message.
void setBundleSignerEnabled(bool b)
For CMS only, this will bundle the signer certificate chain into the message.
bool canSignAndEncrypt() const
True if the SecureMessageSystem can both sign and encrypt (in the same operation).
Error
Errors for secure messages.
Definition: qca_securemessage.h:356
@ ErrorSignatureExpired
signature is expired
Definition: qca_securemessage.h:368
@ ErrorSignerRevoked
signing key is revoked
Definition: qca_securemessage.h:367
@ ErrorUnknown
other error
Definition: qca_securemessage.h:366
@ ErrorSignerExpired
signing key is expired
Definition: qca_securemessage.h:359
@ ErrorEncryptExpired
encrypting key is expired
Definition: qca_securemessage.h:361
@ ErrorSignerInvalid
signing key is invalid in some way
Definition: qca_securemessage.h:360
@ ErrorEncryptUntrusted
encrypting key is untrusted
Definition: qca_securemessage.h:362
@ ErrorEncryptInvalid
encrypting key is invalid in some way
Definition: qca_securemessage.h:363
@ ErrorCertKeyMismatch
certificate and private key don't match
Definition: qca_securemessage.h:365
@ ErrorFormat
input format was bad
Definition: qca_securemessage.h:358
@ ErrorPassphrase
passphrase was either wrong or not provided
Definition: qca_securemessage.h:357
@ ErrorNeedCard
pgp card is missing
Definition: qca_securemessage.h:364
void end()
Complete an operation.
SignMode
The type of message signature.
Definition: qca_securemessage.h:337
@ Message
the message includes the signature
Definition: qca_securemessage.h:338
@ Clearsign
the message is clear signed
Definition: qca_securemessage.h:339
bool bundleSignerEnabled() const
Returns true if bundling of the signer certificate chain is enabled.
bool canSignMultiple() const
Test if the message type supports multiple (parallel) signatures.
SecureMessageSignatureList signers() const
Information on the signers for the message.
Format
Formats for secure messages.
Definition: qca_securemessage.h:347
@ Binary
DER/binary.
Definition: qca_securemessage.h:348
void finished()
This signal is emitted when the message is fully processed.
Error errorCode() const
Returns the failure code.
bool wasSigned() const
Test if the message was signed.
QString hashName() const
The name of the hash used for the signature process.
void setSigners(const SecureMessageKeyList &keys)
Set the list of signers for a signed message.
void setSMIMEAttributesEnabled(bool b)
For CMS only, this will put extra attributes into the message related to S/MIME, such as the preferre...
void bytesWritten(int bytes)
This signal is emitted when data has been accepted by the message processor.
void update(const QByteArray &in)
Process a message (or the next part of a message) in the current operation.
bool canClearsign() const
True if the SecureMessageSystem can clearsign messages.
QCA - the Qt Cryptographic Architecture.
Definition: qca_basic.h:41
QList< SecureMessageSignature > SecureMessageSignatureList
A list of signatures.
Definition: qca_securemessage.h:263
QList< SecureMessageKey > SecureMessageKeyList
A list of message keys.
Definition: qca_securemessage.h:175
Validity
The validity (or otherwise) of a certificate.
Definition: qca_cert.h:490
Header file for PGP key and X.509 certificate related classes.
Header file for core QCA infrastructure.
Header file for PublicKey and PrivateKey related classes.