00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00032 #ifndef QCAPROVIDER_H
00033 #define QCAPROVIDER_H
00034
00035 #include "qca_core.h"
00036 #include "qca_basic.h"
00037 #include "qca_publickey.h"
00038 #include "qca_cert.h"
00039 #include "qca_keystore.h"
00040 #include "qca_securelayer.h"
00041 #include "qca_securemessage.h"
00042
00043 #include <limits>
00044
00045 #ifndef DOXYGEN_NO_PROVIDER_API
00046
00081 class QCA_EXPORT QCAPlugin
00082 {
00083 public:
00087 virtual ~QCAPlugin() {}
00088
00092 virtual QCA::Provider *createProvider() = 0;
00093 };
00094
00095 Q_DECLARE_INTERFACE(QCAPlugin, "com.affinix.qca.Plugin/1.0")
00096
00097 namespace QCA {
00098
00109 class QCA_EXPORT RandomContext : public BasicContext
00110 {
00111 Q_OBJECT
00112 public:
00116 RandomContext(Provider *p) : BasicContext(p, "random") {}
00117
00123 virtual SecureArray nextBytes(int size) = 0;
00124 };
00125
00136 class QCA_EXPORT HashContext : public BasicContext
00137 {
00138 Q_OBJECT
00139 public:
00143 HashContext(Provider *p, const QString &type) : BasicContext(p, type) {}
00144
00148 virtual void clear() = 0;
00149
00155 virtual void update(const MemoryRegion &a) = 0;
00156
00160 virtual MemoryRegion final() = 0;
00161 };
00162
00173 class QCA_EXPORT CipherContext : public BasicContext
00174 {
00175 Q_OBJECT
00176 public:
00180 CipherContext(Provider *p, const QString &type) : BasicContext(p, type) {}
00181
00185 virtual void setup(Direction dir, const SymmetricKey &key, const InitializationVector &iv) = 0;
00186
00190 virtual KeyLength keyLength() const = 0;
00191
00195 virtual int blockSize() const = 0;
00196
00203 virtual bool update(const SecureArray &in, SecureArray *out) = 0;
00204
00210 virtual bool final(SecureArray *out) = 0;
00211 };
00212
00224 class QCA_EXPORT MACContext : public BasicContext
00225 {
00226 Q_OBJECT
00227 public:
00231 MACContext(Provider *p, const QString &type) : BasicContext(p, type) {}
00232
00236 virtual void setup(const SymmetricKey &key) = 0;
00237
00241 virtual KeyLength keyLength() const = 0;
00242
00248 virtual void update(const MemoryRegion &in) = 0;
00249
00255 virtual void final(MemoryRegion *out) = 0;
00256
00257 protected:
00261 KeyLength anyKeyLength() const
00262 {
00263
00264
00265
00266 return KeyLength( 0, INT_MAX, 1 );
00267 }
00268 };
00269
00281 class QCA_EXPORT KDFContext : public BasicContext
00282 {
00283 Q_OBJECT
00284 public:
00288 KDFContext(Provider *p, const QString &type) : BasicContext(p, type) {}
00289
00293 virtual SymmetricKey makeKey(const SecureArray &secret, const InitializationVector &salt, unsigned int keyLength, unsigned int iterationCount) = 0;
00294 };
00295
00306 class QCA_EXPORT DLGroupContext : public Provider::Context
00307 {
00308 Q_OBJECT
00309 public:
00313 DLGroupContext(Provider *p) : Provider::Context(p, "dlgroup") {}
00314
00318 virtual QList<DLGroupSet> supportedGroupSets() const = 0;
00319
00323 virtual bool isNull() const = 0;
00324
00335 virtual void fetchGroup(DLGroupSet set, bool block) = 0;
00336
00341 virtual void getResult(BigInteger *p, BigInteger *q, BigInteger *g) const = 0;
00342
00343 Q_SIGNALS:
00348 void finished();
00349 };
00350
00362 class QCA_EXPORT PKeyBase : public BasicContext
00363 {
00364 Q_OBJECT
00365 public:
00369 PKeyBase(Provider *p, const QString &type);
00370
00376 virtual bool isNull() const = 0;
00377
00381 virtual PKey::Type type() const = 0;
00382
00386 virtual bool isPrivate() const = 0;
00387
00393 virtual bool canExport() const = 0;
00394
00401 virtual void convertToPublic() = 0;
00402
00406 virtual int bits() const = 0;
00407
00412 virtual int maximumEncryptSize(EncryptionAlgorithm alg) const;
00413
00420 virtual SecureArray encrypt(const SecureArray &in, EncryptionAlgorithm alg);
00421
00430 virtual bool decrypt(const SecureArray &in, SecureArray *out, EncryptionAlgorithm alg);
00431
00438 virtual void startSign(SignatureAlgorithm alg, SignatureFormat format);
00439
00446 virtual void startVerify(SignatureAlgorithm alg, SignatureFormat format);
00447
00454 virtual void update(const MemoryRegion &in);
00455
00461 virtual QByteArray endSign();
00462
00470 virtual bool endVerify(const QByteArray &sig);
00471
00478 virtual SymmetricKey deriveKey(const PKeyBase &theirs);
00479
00480 Q_SIGNALS:
00485 void finished();
00486 };
00487
00499 class QCA_EXPORT RSAContext : public PKeyBase
00500 {
00501 Q_OBJECT
00502 public:
00506 RSAContext(Provider *p) : PKeyBase(p, "rsa") {}
00507
00522 virtual void createPrivate(int bits, int exp, bool block) = 0;
00523
00527 virtual void createPrivate(const BigInteger &n, const BigInteger &e, const BigInteger &p, const BigInteger &q, const BigInteger &d) = 0;
00528
00532 virtual void createPublic(const BigInteger &n, const BigInteger &e) = 0;
00533
00537 virtual BigInteger n() const = 0;
00538
00542 virtual BigInteger e() const = 0;
00543
00547 virtual BigInteger p() const = 0;
00548
00552 virtual BigInteger q() const = 0;
00553
00557 virtual BigInteger d() const = 0;
00558 };
00559
00571 class QCA_EXPORT DSAContext : public PKeyBase
00572 {
00573 Q_OBJECT
00574 public:
00578 DSAContext(Provider *p) : PKeyBase(p, "dsa") {}
00579
00593 virtual void createPrivate(const DLGroup &domain, bool block) = 0;
00594
00598 virtual void createPrivate(const DLGroup &domain, const BigInteger &y, const BigInteger &x) = 0;
00599
00603 virtual void createPublic(const DLGroup &domain, const BigInteger &y) = 0;
00604
00608 virtual DLGroup domain() const = 0;
00609
00613 virtual BigInteger y() const = 0;
00614
00618 virtual BigInteger x() const = 0;
00619 };
00620
00632 class QCA_EXPORT DHContext : public PKeyBase
00633 {
00634 Q_OBJECT
00635 public:
00639 DHContext(Provider *p) : PKeyBase(p, "dh") {}
00640
00654 virtual void createPrivate(const DLGroup &domain, bool block) = 0;
00655
00660 virtual void createPrivate(const DLGroup &domain, const BigInteger &y, const BigInteger &x) = 0;
00661
00666 virtual void createPublic(const DLGroup &domain, const BigInteger &y) = 0;
00667
00671 virtual DLGroup domain() const = 0;
00672
00676 virtual BigInteger y() const = 0;
00677
00681 virtual BigInteger x() const = 0;
00682 };
00683
00699 class QCA_EXPORT PKeyContext : public BasicContext
00700 {
00701 Q_OBJECT
00702 public:
00706 PKeyContext(Provider *p) : BasicContext(p, "pkey") {}
00707
00711 virtual QList<PKey::Type> supportedTypes() const = 0;
00712
00717 virtual QList<PKey::Type> supportedIOTypes() const = 0;
00718
00723 virtual QList<PBEAlgorithm> supportedPBEAlgorithms() const = 0;
00724
00728 virtual PKeyBase *key() = 0;
00729
00733 virtual const PKeyBase *key() const = 0;
00734
00740 virtual void setKey(PKeyBase *key) = 0;
00741
00751 virtual bool importKey(const PKeyBase *key) = 0;
00752
00758 virtual QByteArray publicToDER() const;
00759
00765 virtual QString publicToPEM() const;
00766
00775 virtual ConvertResult publicFromDER(const QByteArray &a);
00776
00785 virtual ConvertResult publicFromPEM(const QString &s);
00786
00796 virtual SecureArray privateToDER(const SecureArray &passphrase, PBEAlgorithm pbe) const;
00797
00807 virtual QString privateToPEM(const SecureArray &passphrase, PBEAlgorithm pbe) const;
00808
00818 virtual ConvertResult privateFromDER(const SecureArray &a, const SecureArray &passphrase);
00819
00829 virtual ConvertResult privateFromPEM(const QString &s, const SecureArray &passphrase);
00830 };
00831
00843 class QCA_EXPORT CertBase : public BasicContext
00844 {
00845 Q_OBJECT
00846 public:
00850 CertBase(Provider *p, const QString &type) : BasicContext(p, type) {}
00851
00857 virtual QByteArray toDER() const = 0;
00858
00864 virtual QString toPEM() const = 0;
00865
00874 virtual ConvertResult fromDER(const QByteArray &a) = 0;
00875
00884 virtual ConvertResult fromPEM(const QString &s) = 0;
00885 };
00886
00901 class QCA_EXPORT CertContextProps
00902 {
00903 public:
00909 int version;
00910
00916 QDateTime start;
00917
00923 QDateTime end;
00924
00928 CertificateInfoOrdered subject;
00929
00935 CertificateInfoOrdered issuer;
00936
00940 Constraints constraints;
00941
00945 QStringList policies;
00946
00952 QStringList crlLocations;
00953
00959 QStringList issuerLocations;
00960
00966 QStringList ocspLocations;
00967
00973 BigInteger serial;
00974
00979 bool isCA;
00980
00986 bool isSelfSigned;
00987
00991 int pathLimit;
00992
00996 QByteArray sig;
00997
01001 SignatureAlgorithm sigalgo;
01002
01008 QByteArray subjectId;
01009
01015 QByteArray issuerId;
01016
01022 QString challenge;
01023
01029 CertificateRequestFormat format;
01030 };
01031
01044 class QCA_EXPORT CRLContextProps
01045 {
01046 public:
01050 CertificateInfoOrdered issuer;
01051
01055 int number;
01056
01060 QDateTime thisUpdate;
01061
01065 QDateTime nextUpdate;
01066
01070 QList<CRLEntry> revoked;
01071
01075 QByteArray sig;
01076
01080 SignatureAlgorithm sigalgo;
01081
01085 QByteArray issuerId;
01086 };
01087
01088 class CRLContext;
01089
01100 class QCA_EXPORT CertContext : public CertBase
01101 {
01102 Q_OBJECT
01103 public:
01107 CertContext(Provider *p) : CertBase(p, "cert") {}
01108
01117 virtual bool createSelfSigned(const CertificateOptions &opts, const PKeyContext &priv) = 0;
01118
01122 virtual const CertContextProps *props() const = 0;
01123
01130 virtual bool compare(const CertContext *other) const = 0;
01131
01136 virtual PKeyContext *subjectPublicKey() const = 0;
01137
01144 virtual bool isIssuerOf(const CertContext *other) const = 0;
01145
01157 virtual Validity validate(const QList<CertContext*> &trusted, const QList<CertContext*> &untrusted, const QList<CRLContext*> &crls, UsageMode u, ValidateFlags vf) const = 0;
01158
01174 virtual Validity validate_chain(const QList<CertContext*> &chain, const QList<CertContext*> &trusted, const QList<CRLContext*> &crls, UsageMode u, ValidateFlags vf) const = 0;
01175 };
01176
01188 class QCA_EXPORT CSRContext : public CertBase
01189 {
01190 Q_OBJECT
01191 public:
01195 CSRContext(Provider *p) : CertBase(p, "csr") {}
01196
01201 virtual bool canUseFormat(CertificateRequestFormat f) const = 0;
01202
01211 virtual bool createRequest(const CertificateOptions &opts, const PKeyContext &priv) = 0;
01212
01216 virtual const CertContextProps *props() const = 0;
01217
01224 virtual bool compare(const CSRContext *other) const = 0;
01225
01230 virtual PKeyContext *subjectPublicKey() const = 0;
01231
01238 virtual QString toSPKAC() const = 0;
01239
01249 virtual ConvertResult fromSPKAC(const QString &s) = 0;
01250 };
01251
01262 class QCA_EXPORT CRLContext : public CertBase
01263 {
01264 Q_OBJECT
01265 public:
01269 CRLContext(Provider *p) : CertBase(p, "crl") {}
01270
01274 virtual const CRLContextProps *props() const = 0;
01275
01281 virtual bool compare(const CRLContext *other) const = 0;
01282 };
01283
01295 class QCA_EXPORT CertCollectionContext : public BasicContext
01296 {
01297 Q_OBJECT
01298 public:
01302 CertCollectionContext(Provider *p) : BasicContext(p, "certcollection") {}
01303
01309 virtual QByteArray toPKCS7(const QList<CertContext*> &certs, const QList<CRLContext*> &crls) const = 0;
01310
01324 virtual ConvertResult fromPKCS7(const QByteArray &a, QList<CertContext*> *certs, QList<CRLContext*> *crls) const = 0;
01325 };
01326
01338 class QCA_EXPORT CAContext : public BasicContext
01339 {
01340 Q_OBJECT
01341 public:
01345 CAContext(Provider *p) : BasicContext(p, "ca") {}
01346
01355 virtual void setup(const CertContext &cert, const PKeyContext &priv) = 0;
01356
01361 virtual CertContext *certificate() const = 0;
01362
01370 virtual CertContext *signRequest(const CSRContext &req, const QDateTime ¬ValidAfter) const = 0;
01371
01379 virtual CertContext *createCertificate(const PKeyContext &pub, const CertificateOptions &opts) const = 0;
01380
01389 virtual CRLContext *createCRL(const QDateTime &nextUpdate) const = 0;
01390
01400 virtual CRLContext *updateCRL(const CRLContext &crl, const QList<CRLEntry> &entries, const QDateTime &nextUpdate) const = 0;
01401 };
01402
01413 class QCA_EXPORT PKCS12Context : public BasicContext
01414 {
01415 Q_OBJECT
01416 public:
01420 PKCS12Context(Provider *p) : BasicContext(p, "pkcs12") {}
01421
01432 virtual QByteArray toPKCS12(const QString &name, const QList<const CertContext*> &chain, const PKeyContext &priv, const SecureArray &passphrase) const = 0;
01433
01448 virtual ConvertResult fromPKCS12(const QByteArray &in, const SecureArray &passphrase, QString *name, QList<CertContext*> *chain, PKeyContext **priv) const = 0;
01449 };
01450
01463 class QCA_EXPORT PGPKeyContextProps
01464 {
01465 public:
01469 QString keyId;
01470
01475 QStringList userIds;
01476
01480 bool isSecret;
01481
01485 QDateTime creationDate;
01486
01490 QDateTime expirationDate;
01491
01497 QString fingerprint;
01498
01503 bool inKeyring;
01504
01509 bool isTrusted;
01510 };
01511
01522 class QCA_EXPORT PGPKeyContext : public BasicContext
01523 {
01524 Q_OBJECT
01525 public:
01529 PGPKeyContext(Provider *p) : BasicContext(p, "pgpkey") {}
01530
01534 virtual const PGPKeyContextProps *props() const = 0;
01535
01539 virtual QByteArray toBinary() const = 0;
01540
01544 virtual QString toAscii() const = 0;
01545
01554 virtual ConvertResult fromBinary(const QByteArray &a) = 0;
01555
01564 virtual ConvertResult fromAscii(const QString &s) = 0;
01565 };
01566
01578 class QCA_EXPORT KeyStoreEntryContext : public BasicContext
01579 {
01580 Q_OBJECT
01581 public:
01585 KeyStoreEntryContext(Provider *p) : BasicContext(p, "keystoreentry") {}
01586
01590 virtual KeyStoreEntry::Type type() const = 0;
01591
01597 virtual QString id() const = 0;
01598
01602 virtual QString name() const = 0;
01603
01607 virtual QString storeId() const = 0;
01608
01612 virtual QString storeName() const = 0;
01613
01617 virtual bool isAvailable() const;
01618
01627 virtual QString serialize() const = 0;
01628
01633 virtual KeyBundle keyBundle() const;
01634
01639 virtual Certificate certificate() const;
01640
01645 virtual CRL crl() const;
01646
01651 virtual PGPKey pgpSecretKey() const;
01652
01658 virtual PGPKey pgpPublicKey() const;
01659
01668 virtual bool ensureAccess();
01669 };
01670
01681 class QCA_EXPORT KeyStoreListContext : public Provider::Context
01682 {
01683 Q_OBJECT
01684 public:
01688 KeyStoreListContext(Provider *p) : Provider::Context(p, "keystorelist") {}
01689
01693 virtual void start();
01694
01701 virtual void setUpdatesEnabled(bool enabled);
01702
01712 virtual QList<int> keyStores() = 0;
01713
01718 virtual KeyStore::Type type(int id) const = 0;
01719
01729 virtual QString storeId(int id) const = 0;
01730
01735 virtual QString name(int id) const = 0;
01736
01743 virtual bool isReadOnly(int id) const;
01744
01752 virtual QList<KeyStoreEntry::Type> entryTypes(int id) const = 0;
01753
01760 virtual QList<KeyStoreEntryContext*> entryList(int id) = 0;
01761
01768 virtual KeyStoreEntryContext *entry(int id, const QString &entryId);
01769
01780 virtual KeyStoreEntryContext *entryPassive(const QString &serialized);
01781
01788 virtual QString writeEntry(int id, const KeyBundle &kb);
01789
01796 virtual QString writeEntry(int id, const Certificate &cert);
01797
01804 virtual QString writeEntry(int id, const CRL &crl);
01805
01812 virtual QString writeEntry(int id, const PGPKey &key);
01813
01820 virtual bool removeEntry(int id, const QString &entryId);
01821
01822 Q_SIGNALS:
01840 void busyStart();
01841
01849 void busyEnd();
01850
01855 void updated();
01856
01860 void diagnosticText(const QString &str);
01861
01866 void storeUpdated(int id);
01867 };
01868
01879 class QCA_EXPORT TLSSessionContext : public BasicContext
01880 {
01881 Q_OBJECT
01882 public:
01886 TLSSessionContext(Provider *p) : BasicContext(p, "tlssession") {}
01887 };
01888
01899 class QCA_EXPORT TLSContext : public Provider::Context
01900 {
01901 Q_OBJECT
01902 public:
01912 class SessionInfo
01913 {
01914 public:
01918 bool isCompressed;
01919
01923 TLS::Version version;
01924
01930 QString cipherSuite;
01931
01935 int cipherBits;
01936
01941 int cipherMaxBits;
01942
01947 TLSSessionContext *id;
01948 };
01949
01953 enum Result
01954 {
01955 Success,
01956 Error,
01957 Continue
01958 };
01959
01963 TLSContext(Provider *p, const QString &type) : Provider::Context(p, type) {}
01964
01968 virtual void reset() = 0;
01969
01975 virtual QStringList supportedCipherSuites(const TLS::Version &version) const = 0;
01976
01980 virtual bool canCompress() const = 0;
01981
01985 virtual bool canSetHostName() const = 0;
01986
01990 virtual int maxSSF() const = 0;
01991
01998 virtual void setup(bool serverMode, const QString &hostName, bool compress) = 0;
01999
02005 virtual void setConstraints(int minSSF, int maxSSF) = 0;
02006
02016 virtual void setConstraints(const QStringList &cipherSuiteList) = 0;
02017
02023 virtual void setTrustedCertificates(const CertificateCollection &trusted) = 0;
02024
02032 virtual void setIssuerList(const QList<CertificateInfoOrdered> &issuerList) = 0;
02033
02039 virtual void setCertificate(const CertificateChain &cert, const PrivateKey &key) = 0;
02040
02046 virtual void setSessionId(const TLSSessionContext &id) = 0;
02047
02056 virtual void shutdown() = 0;
02057
02063 virtual void setMTU(int size);
02064
02077 virtual void start() = 0;
02078
02101 virtual void update(const QByteArray &from_net, const QByteArray &from_app) = 0;
02102
02112 virtual bool waitForResultsReady(int msecs) = 0;
02113
02117 virtual Result result() const = 0;
02118
02122 virtual QByteArray to_net() = 0;
02123
02128 virtual int encoded() const = 0;
02129
02134 virtual QByteArray to_app() = 0;
02135
02139 virtual bool eof() const = 0;
02140
02147 virtual bool clientHelloReceived() const = 0;
02148
02154 virtual bool serverHelloReceived() const = 0;
02155
02162 virtual QString hostName() const = 0;
02163
02169 virtual bool certificateRequested() const = 0;
02170
02176 virtual QList<CertificateInfoOrdered> issuerList() const = 0;
02177
02183 virtual Validity peerCertificateValidity() const = 0;
02184
02190 virtual CertificateChain peerCertificateChain() const = 0;
02191
02197 virtual SessionInfo sessionInfo() const = 0;
02198
02204 virtual QByteArray unprocessed() = 0;
02205
02206 Q_SIGNALS:
02210 void resultsReady();
02211
02216 void dtlsTimeout();
02217 };
02218
02229 class QCA_EXPORT SASLContext : public Provider::Context
02230 {
02231 Q_OBJECT
02232 public:
02242 class HostPort
02243 {
02244 public:
02248 QString addr;
02249
02253 quint16 port;
02254 };
02255
02259 enum Result
02260 {
02261 Success,
02262 Error,
02263 Params,
02264 AuthCheck,
02265 Continue
02266 };
02267
02271 SASLContext(Provider *p) : Provider::Context(p, "sasl") {}
02272
02276 virtual void reset() = 0;
02277
02284 virtual void setup(const QString &service, const QString &host, const HostPort *local, const HostPort *remote, const QString &ext_id, int ext_ssf) = 0;
02285
02292 virtual void setConstraints(SASL::AuthFlags f, int minSSF, int maxSSF) = 0;
02293
02305 virtual void startClient(const QStringList &mechlist, bool allowClientSendFirst) = 0;
02306
02318 virtual void startServer(const QString &realm, bool disableServerSendLast) = 0;
02319
02329 virtual void serverFirstStep(const QString &mech, const QByteArray *clientInit) = 0;
02330
02339 virtual void nextStep(const QByteArray &from_net) = 0;
02340
02350 virtual void tryAgain() = 0;
02351
02361 virtual void update(const QByteArray &from_net, const QByteArray &from_app) = 0;
02362
02373 virtual bool waitForResultsReady(int msecs) = 0;
02374
02378 virtual Result result() const = 0;
02379
02383 virtual QStringList mechlist() const = 0;
02384
02388 virtual QString mech() const = 0;
02389
02393 virtual bool haveClientInit() const = 0;
02394
02399 virtual QByteArray stepData() const = 0;
02400
02405 virtual QByteArray to_net() = 0;
02406
02411 virtual int encoded() const = 0;
02412
02417 virtual QByteArray to_app() = 0;
02418
02424 virtual int ssf() const = 0;
02425
02432 virtual SASL::AuthCondition authCondition() const = 0;
02433
02439 virtual SASL::Params clientParams() const = 0;
02440
02444 virtual void setClientParams(const QString *user, const QString *authzid, const SecureArray *pass, const QString *realm) = 0;
02445
02452 virtual QStringList realmlist() const = 0;
02453
02459 virtual QString username() const = 0;
02460
02466 virtual QString authzid() const = 0;
02467
02468 Q_SIGNALS:
02473 void resultsReady();
02474 };
02475
02487 class QCA_EXPORT MessageContext : public Provider::Context
02488 {
02489 Q_OBJECT
02490 public:
02494 enum Operation
02495 {
02496 Encrypt,
02497 Decrypt,
02498 Sign,
02499 Verify,
02500 SignAndEncrypt
02501 };
02502
02506 MessageContext(Provider *p, const QString &type) : Provider::Context(p, type) {}
02507
02512 virtual bool canSignMultiple() const = 0;
02513
02517 virtual SecureMessage::Type type() const = 0;
02518
02522 virtual void reset() = 0;
02523
02527 virtual void setupEncrypt(const SecureMessageKeyList &keys) = 0;
02528
02532 virtual void setupSign(const SecureMessageKeyList &keys, SecureMessage::SignMode m, bool bundleSigner, bool smime) = 0;
02533
02537 virtual void setupVerify(const QByteArray &detachedSig) = 0;
02538
02549 virtual void start(SecureMessage::Format f, Operation op) = 0;
02550
02554 virtual void update(const QByteArray &in) = 0;
02555
02559 virtual QByteArray read() = 0;
02560
02565 virtual int written() = 0;
02566
02570 virtual void end() = 0;
02571
02575 virtual bool finished() const = 0;
02576
02586 virtual bool waitForFinished(int msecs) = 0;
02587
02593 virtual bool success() const = 0;
02594
02601 virtual SecureMessage::Error errorCode() const = 0;
02602
02609 virtual QByteArray signature() const = 0;
02610
02617 virtual QString hashName() const = 0;
02618
02625 virtual SecureMessageSignatureList signers() const = 0;
02626
02634 virtual QString diagnosticText() const;
02635
02636 Q_SIGNALS:
02641 void updated();
02642 };
02643
02655 class QCA_EXPORT SMSContext : public BasicContext
02656 {
02657 Q_OBJECT
02658 public:
02662 SMSContext(Provider *p, const QString &type) : BasicContext(p, type) {}
02663
02672 virtual void setTrustedCertificates(const CertificateCollection &trusted);
02673
02680 virtual void setUntrustedCertificates(const CertificateCollection &untrusted);
02681
02688 virtual void setPrivateKeys(const QList<SecureMessageKey> &keys);
02689
02694 virtual MessageContext *createMessage() = 0;
02695 };
02696
02697 }
02698 #endif
02699
02700 #endif