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 "qca_cert.h"
37 #include "qca_core.h"
38 #include "qca_publickey.h"
39 #include <QObject>
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 
319 class QCA_EXPORT SecureMessage : public QObject, public Algorithm
320 {
321  Q_OBJECT
322 public:
326  enum Type
327  {
329  CMS
330  };
331 
335  enum SignMode
336  {
339  Detached
340  };
341 
345  enum Format
346  {
348  Ascii
349  };
350 
354  enum Error
355  {
368  ErrorEncryptRevoked
369  };
370 
383  ~SecureMessage() override;
384 
388  Type type() const;
389 
400  bool canSignMultiple() const;
401 
409  bool canClearsign() const;
410 
420  bool canSignAndEncrypt() const;
421 
426  void reset();
427 
432  bool bundleSignerEnabled() const;
433 
438 
442  Format format() const;
443 
449 
455 
468 
480 
488  void setFormat(Format f);
489 
497  void setRecipient(const SecureMessageKey &key);
498 
509 
520  void setSigner(const SecureMessageKey &key);
521 
534  void setSigners(const SecureMessageKeyList &keys);
535 
556  void startEncrypt();
557 
582  void startDecrypt();
583 
608  void startSign(SignMode m = Message);
609 
617  void startVerify(const QByteArray &detachedSig = QByteArray());
618 
629 
639  void update(const QByteArray &in);
640 
648  QByteArray read();
649 
653  int bytesAvailable() const;
654 
667  void end();
668 
686  bool waitForFinished(int msecs = 30000);
687 
696  bool success() const;
697 
704  Error errorCode() const;
705 
712  QByteArray signature() const;
713 
717  QString hashName() const;
718 
727  bool wasSigned() const;
728 
735  bool verifySuccess() const;
736 
741 
750 
756  QString diagnosticText() const;
757 
758 Q_SIGNALS:
768  void readyRead();
769 
776  void bytesWritten(int bytes);
777 
782  void finished();
783 
784 private:
785  Q_DISABLE_COPY(SecureMessage)
786 
787  class Private;
788  friend class Private;
789  Private *d;
790 };
791 
802 class QCA_EXPORT SecureMessageSystem : public QObject, public Algorithm
803 {
804  Q_OBJECT
805 public:
806  ~SecureMessageSystem() override;
807 
808 protected:
822  SecureMessageSystem(QObject *parent, const QString &type, const QString &provider);
823 
824 private:
825  Q_DISABLE_COPY(SecureMessageSystem)
826 };
827 
839 class QCA_EXPORT OpenPGP : public SecureMessageSystem
840 {
841  Q_OBJECT
842 public:
850  explicit OpenPGP(QObject *parent = nullptr, const QString &provider = QString());
851  ~OpenPGP() override;
852 
853 private:
854  Q_DISABLE_COPY(OpenPGP)
855 
856  class Private;
857  Private *d;
858 };
859 
885 class QCA_EXPORT CMS : public SecureMessageSystem
886 {
887  Q_OBJECT
888 public:
896  explicit CMS(QObject *parent = nullptr, const QString &provider = QString());
897  ~CMS() override;
898 
903 
908 
913 
922 
936 
947 
948 private:
949  Q_DISABLE_COPY(CMS)
950 
951  class Private;
952  Private *d;
953 };
954 
955 }
956 
957 #endif
General superclass for an algorithm.
Definition: qca_core.h:1164
Cryptographic Message Syntax messaging system.
Definition: qca_securemessage.h:886
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:1226
Bundle of Certificates and CRLs.
Definition: qca_cert.h:1929
Certificate chain and private key pair.
Definition: qca_cert.h:2176
Pretty Good Privacy messaging system.
Definition: qca_securemessage.h:840
OpenPGP(QObject *parent=nullptr, const QString &provider=QString())
Standard constructor.
Pretty Good Privacy key.
Definition: qca_cert.h:2407
Generic private key.
Definition: qca_publickey.h:833
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:803
SecureMessageSystem(QObject *parent, const QString &type, const QString &provider)
Protected constructor for SecureMessageSystem classes.
Class representing a secure message.
Definition: qca_securemessage.h:320
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:327
@ OpenPGP
a Pretty Good Privacy message
Definition: qca_securemessage.h:328
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:355
@ ErrorSignatureExpired
signature is expired
Definition: qca_securemessage.h:367
@ ErrorSignerRevoked
signing key is revoked
Definition: qca_securemessage.h:366
@ ErrorUnknown
other error
Definition: qca_securemessage.h:365
@ ErrorSignerExpired
signing key is expired
Definition: qca_securemessage.h:358
@ ErrorEncryptExpired
encrypting key is expired
Definition: qca_securemessage.h:360
@ ErrorSignerInvalid
signing key is invalid in some way
Definition: qca_securemessage.h:359
@ ErrorEncryptUntrusted
encrypting key is untrusted
Definition: qca_securemessage.h:361
@ ErrorEncryptInvalid
encrypting key is invalid in some way
Definition: qca_securemessage.h:362
@ ErrorCertKeyMismatch
certificate and private key don't match
Definition: qca_securemessage.h:364
@ ErrorFormat
input format was bad
Definition: qca_securemessage.h:357
@ ErrorPassphrase
passphrase was either wrong or not provided
Definition: qca_securemessage.h:356
@ ErrorNeedCard
pgp card is missing
Definition: qca_securemessage.h:363
void end()
Complete an operation.
SignMode
The type of message signature.
Definition: qca_securemessage.h:336
@ Message
the message includes the signature
Definition: qca_securemessage.h:337
@ Clearsign
the message is clear signed
Definition: qca_securemessage.h:338
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:346
@ Binary
DER/binary.
Definition: qca_securemessage.h:347
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:497
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.