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
41class QDateTime;
42
43namespace QCA {
44
45class SecureMessageSystem;
46
54class QCA_EXPORT SecureMessageKey
55{
56public:
60 enum Type
61 {
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
152
156 bool havePrivate() const;
157
165 QString name() const;
166
167private:
168 class Private;
169 QSharedDataPointer<Private> d;
170};
171
176
185{
186public:
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
255private:
256 class Private;
257 QSharedDataPointer<Private> d;
258};
259
264
319class QCA_EXPORT SecureMessage : public QObject, public Algorithm
320{
321 Q_OBJECT
322public:
326 enum Type
327 {
329 CMS
330 };
331
336 {
339 Detached
340 };
341
346 {
348 Ascii
349 };
350
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
433
438
442 Format format() const;
443
449
455
468
480
489
498
509
520 void setSigner(const SecureMessageKey &key);
521
535
557
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
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
758Q_SIGNALS:
768 void readyRead();
769
776 void bytesWritten(int bytes);
777
782 void finished();
783
784private:
785 Q_DISABLE_COPY(SecureMessage)
786
787 class Private;
788 friend class Private;
789 Private *d;
790};
791
802class QCA_EXPORT SecureMessageSystem : public QObject, public Algorithm
803{
804 Q_OBJECT
805public:
806 ~SecureMessageSystem() override;
807
808protected:
822 SecureMessageSystem(QObject *parent, const QString &type, const QString &provider);
823
824private:
825 Q_DISABLE_COPY(SecureMessageSystem)
826};
827
839class QCA_EXPORT OpenPGP : public SecureMessageSystem
840{
841 Q_OBJECT
842public:
850 explicit OpenPGP(QObject *parent = nullptr, const QString &provider = QString());
851 ~OpenPGP() override;
852
853private:
854 Q_DISABLE_COPY(OpenPGP)
855
856 class Private;
857 Private *d;
858};
859
885class QCA_EXPORT CMS : public SecureMessageSystem
886{
887 Q_OBJECT
888public:
896 explicit CMS(QObject *parent = nullptr, const QString &provider = QString());
897 ~CMS() override;
898
903
908
913
922
936
947
948private:
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
SecureMessageSignature & operator=(const SecureMessageSignature &from)
Standard assignment operator.
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.
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.