qcaprovider.h

Go to the documentation of this file.
00001 /*
00002  * qcaprovider.h - QCA Plugin API
00003  * Copyright (C) 2003-2007  Justin Karneges <justin@affinix.com>
00004  * Copyright (C) 2004,2005  Brad Hards <bradh@frogmouth.net>
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU Lesser General Public
00008  * License as published by the Free Software Foundation; either
00009  * version 2.1 of the License, or (at your option) any later version.
00010  *
00011  * This library is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  * Lesser General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU Lesser General Public
00017  * License along with this library; if not, write to the Free Software
00018  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
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                 // this is used instead of a default implementation to make sure that
00264                 // provider authors think about it, at least a bit.
00265                 // See Meyers, Effective C++, Effective C++ (2nd Ed), Item 36
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 &notValidAfter) 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

Generated on Tue Aug 28 08:19:59 2007 for Qt Cryptographic Architecture by  doxygen 1.5.2