2003-09-17 01:02:09 +00:00
|
|
|
/*
|
|
|
|
* qcaprovider.h - QCA Plugin API
|
2005-01-01 02:44:28 +00:00
|
|
|
* Copyright (C) 2003-2005 Justin Karneges <justin@affinix.com>
|
|
|
|
* Copyright (C) 2004,2005 Brad Hards <bradh@frogmouth.net>
|
2003-09-17 01:02:09 +00:00
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2005-07-06 22:27:02 +00:00
|
|
|
// WARNING!
|
|
|
|
//
|
|
|
|
// Do not use the Plugin interface in applications! This interface is
|
|
|
|
// for plugin developers ONLY. It may change between QCA versions.
|
|
|
|
|
2003-07-02 03:34:11 +00:00
|
|
|
#ifndef QCAPROVIDER_H
|
|
|
|
#define QCAPROVIDER_H
|
|
|
|
|
2005-02-27 01:12:26 +00:00
|
|
|
#include <QtCore>
|
2005-01-01 02:44:28 +00:00
|
|
|
#include "qca_core.h"
|
|
|
|
#include "qca_basic.h"
|
2005-03-03 21:56:23 +00:00
|
|
|
#include "qca_publickey.h"
|
2005-01-25 13:01:45 +00:00
|
|
|
#include "qca_cert.h"
|
2005-04-09 07:43:15 +00:00
|
|
|
#include "qca_keystore.h"
|
2005-04-22 12:46:55 +00:00
|
|
|
#include "qca_securelayer.h"
|
|
|
|
#include "qca_securemessage.h"
|
2003-07-02 03:34:11 +00:00
|
|
|
|
2004-11-09 08:02:13 +00:00
|
|
|
#include <limits>
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT QCAPlugin : public QObject
|
2005-02-28 02:28:23 +00:00
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
virtual QCA::Provider *createProvider() = 0;
|
|
|
|
};
|
|
|
|
|
2006-02-24 08:08:43 +00:00
|
|
|
Q_DECLARE_INTERFACE(QCAPlugin, "com.affinix.qca.Plugin/1.0")
|
|
|
|
|
2004-10-28 04:28:20 +00:00
|
|
|
namespace QCA {
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT RandomContext : public Provider::Context
|
2004-10-28 04:28:20 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
RandomContext(Provider *p) : Provider::Context(p, "random") {}
|
|
|
|
virtual QSecureArray nextBytes(int size, Random::Quality q) = 0;
|
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT HashContext : public Provider::Context
|
2004-10-28 04:28:20 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
HashContext(Provider *p, const QString &type) : Provider::Context(p, type) {}
|
|
|
|
virtual void clear() = 0;
|
|
|
|
virtual void update(const QSecureArray &a) = 0;
|
|
|
|
virtual QSecureArray final() = 0;
|
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT CipherContext : public Provider::Context
|
2004-10-29 22:51:30 +00:00
|
|
|
{
|
|
|
|
public:
|
2005-04-22 12:46:55 +00:00
|
|
|
//enum Mode { CBC, CFB, ECB };
|
2004-10-29 22:51:30 +00:00
|
|
|
CipherContext(Provider *p, const QString &type) : Provider::Context(p, type) {}
|
2005-03-02 08:04:56 +00:00
|
|
|
virtual void setup(Direction dir, const SymmetricKey &key, const InitializationVector &iv) = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
virtual KeyLength keyLength() const = 0;
|
2004-11-28 11:13:05 +00:00
|
|
|
virtual unsigned int blockSize() const = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
|
|
|
|
virtual bool update(const QSecureArray &in, QSecureArray *out) = 0;
|
|
|
|
virtual bool final(QSecureArray *out) = 0;
|
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT MACContext : public Provider::Context
|
2004-10-29 22:51:30 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
MACContext(Provider *p, const QString &type) : Provider::Context(p, type) {}
|
|
|
|
virtual void setup(const SymmetricKey &key) = 0;
|
|
|
|
virtual KeyLength keyLength() const = 0;
|
|
|
|
|
|
|
|
virtual void update(const QSecureArray &in) = 0;
|
|
|
|
virtual void final(QSecureArray *out) = 0;
|
2005-03-01 10:21:21 +00:00
|
|
|
|
2004-11-09 08:02:13 +00:00
|
|
|
protected:
|
|
|
|
KeyLength anyKeyLength() const
|
|
|
|
{
|
|
|
|
// this is used instead of a default implementation to make sure that
|
|
|
|
// provider authors think about it, at least a bit.
|
|
|
|
// See Meyers, Effective C++, Effective C++ (2nd Ed), Item 36
|
2005-07-06 21:37:45 +00:00
|
|
|
return KeyLength( 0, INT_MAX, 1 );
|
2004-11-09 08:02:13 +00:00
|
|
|
}
|
2005-03-01 10:21:21 +00:00
|
|
|
};
|
2004-11-09 08:02:13 +00:00
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT KDFContext : public Provider::Context
|
2005-03-01 10:21:21 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
KDFContext(Provider *p, const QString &type) : Provider::Context(p, type) {}
|
|
|
|
virtual SymmetricKey makeKey(const QSecureArray &secret, const InitializationVector &salt, unsigned int keyLength, unsigned int iterationCount) = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT DLGroupContext : public QObject, public Provider::Context
|
2005-03-07 10:23:45 +00:00
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
DLGroupContext(Provider *p) : Provider::Context(p, "dlgroup") {}
|
|
|
|
virtual QList<DLGroupSet> supportedGroupSets() const = 0;
|
|
|
|
virtual bool isNull() const = 0;
|
|
|
|
virtual void fetchGroup(DLGroupSet set, bool block) = 0;
|
|
|
|
virtual void getResult(QBigInteger *p, QBigInteger *q, QBigInteger *g) const = 0;
|
|
|
|
|
|
|
|
signals:
|
|
|
|
void finished();
|
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT PKeyBase : public QObject, public Provider::Context
|
2004-10-29 22:51:30 +00:00
|
|
|
{
|
2005-03-03 21:56:23 +00:00
|
|
|
Q_OBJECT
|
2004-10-29 22:51:30 +00:00
|
|
|
public:
|
2005-07-28 12:17:09 +00:00
|
|
|
PKeyBase(Provider *p, const QString &type);
|
2004-10-29 22:51:30 +00:00
|
|
|
virtual bool isNull() const = 0;
|
2005-04-12 10:25:35 +00:00
|
|
|
virtual PKey::Type type() const = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
virtual bool isPrivate() const = 0;
|
2005-04-12 10:25:35 +00:00
|
|
|
virtual bool canExport() const = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
virtual void convertToPublic() = 0;
|
2005-04-04 00:34:13 +00:00
|
|
|
virtual int bits() const = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
|
|
|
|
// encrypt/decrypt
|
2005-03-03 21:56:23 +00:00
|
|
|
virtual int maximumEncryptSize(EncryptionAlgorithm alg) const;
|
2005-03-05 20:50:49 +00:00
|
|
|
virtual QSecureArray encrypt(const QSecureArray &in, EncryptionAlgorithm alg) const;
|
|
|
|
virtual bool decrypt(const QSecureArray &in, QSecureArray *out, EncryptionAlgorithm alg) const;
|
2004-10-29 22:51:30 +00:00
|
|
|
|
|
|
|
// sign / verify
|
2005-03-05 20:50:49 +00:00
|
|
|
virtual void startSign(SignatureAlgorithm alg, SignatureFormat format);
|
|
|
|
virtual void startVerify(SignatureAlgorithm alg, SignatureFormat format);
|
2004-10-29 22:51:30 +00:00
|
|
|
virtual void update(const QSecureArray &in);
|
|
|
|
virtual QSecureArray endSign();
|
|
|
|
virtual bool endVerify(const QSecureArray &sig);
|
|
|
|
|
|
|
|
// key agreement
|
2005-03-04 07:56:05 +00:00
|
|
|
virtual SymmetricKey deriveKey(const PKeyBase &theirs) const;
|
2005-03-03 21:56:23 +00:00
|
|
|
|
|
|
|
signals:
|
|
|
|
void finished();
|
2004-10-29 22:51:30 +00:00
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT RSAContext : public PKeyBase
|
2004-10-29 22:51:30 +00:00
|
|
|
{
|
2005-03-03 21:56:23 +00:00
|
|
|
Q_OBJECT
|
2004-10-29 22:51:30 +00:00
|
|
|
public:
|
|
|
|
RSAContext(Provider *p) : PKeyBase(p, "rsa") {}
|
2005-03-03 21:56:23 +00:00
|
|
|
virtual void createPrivate(int bits, int exp, bool block) = 0;
|
2005-03-07 10:23:45 +00:00
|
|
|
virtual void createPrivate(const QBigInteger &n, const QBigInteger &e, const QBigInteger &p, const QBigInteger &q, const QBigInteger &d) = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
virtual void createPublic(const QBigInteger &n, const QBigInteger &e) = 0;
|
2005-03-07 10:23:45 +00:00
|
|
|
virtual QBigInteger n() const = 0;
|
|
|
|
virtual QBigInteger e() const = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
virtual QBigInteger p() const = 0;
|
|
|
|
virtual QBigInteger q() const = 0;
|
|
|
|
virtual QBigInteger d() const = 0;
|
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT DSAContext : public PKeyBase
|
2004-10-29 22:51:30 +00:00
|
|
|
{
|
2005-03-03 21:56:23 +00:00
|
|
|
Q_OBJECT
|
2004-10-29 22:51:30 +00:00
|
|
|
public:
|
|
|
|
DSAContext(Provider *p) : PKeyBase(p, "dsa") {}
|
2005-03-07 10:23:45 +00:00
|
|
|
virtual void createPrivate(const DLGroup &domain, bool block) = 0;
|
|
|
|
virtual void createPrivate(const DLGroup &domain, const QBigInteger &y, const QBigInteger &x) = 0;
|
|
|
|
virtual void createPublic(const DLGroup &domain, const QBigInteger &y) = 0;
|
|
|
|
virtual DLGroup domain() const = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
virtual QBigInteger y() const = 0;
|
2005-03-07 10:23:45 +00:00
|
|
|
virtual QBigInteger x() const = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT DHContext : public PKeyBase
|
2004-10-29 22:51:30 +00:00
|
|
|
{
|
2005-03-03 21:56:23 +00:00
|
|
|
Q_OBJECT
|
2004-10-29 22:51:30 +00:00
|
|
|
public:
|
|
|
|
DHContext(Provider *p) : PKeyBase(p, "dh") {}
|
2005-03-07 10:23:45 +00:00
|
|
|
virtual void createPrivate(const DLGroup &domain, bool block) = 0;
|
|
|
|
virtual void createPrivate(const DLGroup &domain, const QBigInteger &y, const QBigInteger &x) = 0;
|
|
|
|
virtual void createPublic(const DLGroup &domain, const QBigInteger &y) = 0;
|
|
|
|
virtual DLGroup domain() const = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
virtual QBigInteger y() const = 0;
|
2005-03-07 10:23:45 +00:00
|
|
|
virtual QBigInteger x() const = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT PKeyContext : public Provider::Context
|
2004-10-29 22:51:30 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
PKeyContext(Provider *p) : Provider::Context(p, "pkey") {}
|
|
|
|
|
2005-03-03 21:56:23 +00:00
|
|
|
virtual QList<PKey::Type> supportedTypes() const = 0;
|
2005-03-08 03:17:37 +00:00
|
|
|
virtual QList<PKey::Type> supportedIOTypes() const = 0;
|
2005-03-03 21:56:23 +00:00
|
|
|
virtual QList<PBEAlgorithm> supportedPBEAlgorithms() const = 0;
|
|
|
|
|
|
|
|
virtual PKeyBase *key() = 0;
|
|
|
|
virtual const PKeyBase *key() const = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
virtual void setKey(PKeyBase *key) = 0;
|
2005-04-12 10:25:35 +00:00
|
|
|
virtual bool importKey(const PKeyBase *key) = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
|
|
|
|
// import / export
|
|
|
|
virtual QSecureArray publicToDER() const = 0;
|
|
|
|
virtual QString publicToPEM() const = 0;
|
|
|
|
virtual ConvertResult publicFromDER(const QSecureArray &a) = 0;
|
|
|
|
virtual ConvertResult publicFromPEM(const QString &s) = 0;
|
2005-03-03 21:56:23 +00:00
|
|
|
virtual QSecureArray privateToDER(const QSecureArray &passphrase, PBEAlgorithm pbe) const = 0;
|
|
|
|
virtual QString privateToPEM(const QSecureArray &passphrase, PBEAlgorithm pbe) const = 0;
|
2005-01-14 06:36:12 +00:00
|
|
|
virtual ConvertResult privateFromDER(const QSecureArray &a, const QSecureArray &passphrase) = 0;
|
|
|
|
virtual ConvertResult privateFromPEM(const QString &s, const QSecureArray &passphrase) = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT CertBase : public Provider::Context
|
2004-10-29 22:51:30 +00:00
|
|
|
{
|
|
|
|
public:
|
2005-03-04 21:50:57 +00:00
|
|
|
CertBase(Provider *p, const QString &type) : Provider::Context(p, type) {}
|
2004-10-29 22:51:30 +00:00
|
|
|
|
|
|
|
// import / export
|
|
|
|
virtual QSecureArray toDER() const = 0;
|
|
|
|
virtual QString toPEM() const = 0;
|
|
|
|
virtual ConvertResult fromDER(const QSecureArray &a) = 0;
|
|
|
|
virtual ConvertResult fromPEM(const QString &s) = 0;
|
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT CertContextProps
|
2004-10-29 22:51:30 +00:00
|
|
|
{
|
|
|
|
public:
|
2005-03-05 04:18:05 +00:00
|
|
|
int version; // cert only
|
2005-03-04 21:50:57 +00:00
|
|
|
QDateTime start, end; // cert only
|
|
|
|
CertificateInfo subject;
|
|
|
|
CertificateInfo issuer; // cert only
|
|
|
|
Constraints constraints;
|
|
|
|
QStringList policies;
|
|
|
|
QBigInteger serial; // cert only
|
|
|
|
bool isCA;
|
|
|
|
bool isSelfSigned; // cert only
|
|
|
|
int pathLimit;
|
2005-03-05 04:18:05 +00:00
|
|
|
QSecureArray sig;
|
2005-03-04 21:50:57 +00:00
|
|
|
SignatureAlgorithm sigalgo;
|
2005-04-04 03:20:20 +00:00
|
|
|
QByteArray subjectId, issuerId; // cert only
|
2005-03-04 21:50:57 +00:00
|
|
|
QString challenge; // csr only
|
|
|
|
CertificateRequestFormat format; // csr only
|
|
|
|
};
|
2004-10-29 22:51:30 +00:00
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT CRLContextProps
|
2005-03-04 21:50:57 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
CertificateInfo issuer;
|
|
|
|
int number;
|
|
|
|
QDateTime thisUpdate, nextUpdate;
|
|
|
|
QList<CRLEntry> revoked;
|
2005-03-05 04:18:05 +00:00
|
|
|
QSecureArray sig;
|
2005-03-04 21:50:57 +00:00
|
|
|
SignatureAlgorithm sigalgo;
|
2005-04-04 03:20:20 +00:00
|
|
|
QByteArray issuerId;
|
2005-03-04 21:50:57 +00:00
|
|
|
};
|
|
|
|
|
2005-03-28 07:11:58 +00:00
|
|
|
class CRLContext;
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT CertContext : public CertBase
|
2005-03-04 21:50:57 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
CertContext(Provider *p) : CertBase(p, "cert") {}
|
|
|
|
|
|
|
|
virtual bool createSelfSigned(const CertificateOptions &opts, const PKeyContext &priv) = 0;
|
|
|
|
virtual const CertContextProps *props() const = 0;
|
2005-03-05 01:10:14 +00:00
|
|
|
virtual PKeyContext *subjectPublicKey() const = 0; // caller must delete
|
2005-03-28 07:11:58 +00:00
|
|
|
|
|
|
|
// ownership of items IS NOT passed
|
|
|
|
virtual Validity validate(const QList<CertContext*> &trusted, const QList<CertContext*> &untrusted, const QList<CRLContext *> &crls, UsageMode u) const = 0;
|
2005-03-04 21:50:57 +00:00
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT CSRContext : public CertBase
|
2005-03-04 21:50:57 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
CSRContext(Provider *p) : CertBase(p, "csr") {}
|
|
|
|
|
|
|
|
virtual bool canUseFormat(CertificateRequestFormat f) const = 0;
|
|
|
|
virtual bool createRequest(const CertificateOptions &opts, const PKeyContext &priv) = 0;
|
|
|
|
virtual const CertContextProps *props() const = 0;
|
2005-03-05 01:10:14 +00:00
|
|
|
virtual PKeyContext *subjectPublicKey() const = 0; // caller must delete
|
2005-03-04 21:50:57 +00:00
|
|
|
virtual QString toSPKAC() const = 0;
|
|
|
|
virtual ConvertResult fromSPKAC(const QString &s) = 0;
|
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT CRLContext : public CertBase
|
2005-03-04 21:50:57 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
CRLContext(Provider *p) : CertBase(p, "crl") {}
|
|
|
|
|
|
|
|
virtual const CRLContextProps *props() const = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT CertCollectionContext : public Provider::Context
|
2004-10-29 22:51:30 +00:00
|
|
|
{
|
|
|
|
public:
|
2005-03-28 07:11:58 +00:00
|
|
|
CertCollectionContext(Provider *p) : Provider::Context(p, "certcollection") {}
|
2004-10-29 22:51:30 +00:00
|
|
|
|
2005-03-28 07:11:58 +00:00
|
|
|
// ownership of items IS NOT passed
|
|
|
|
virtual QByteArray toPKCS7(const QList<CertContext*> &certs, const QList<CRLContext*> &crls) const = 0;
|
2005-03-04 23:54:03 +00:00
|
|
|
|
2005-03-28 07:11:58 +00:00
|
|
|
// ownership of items IS passed
|
|
|
|
virtual ConvertResult fromPKCS7(const QByteArray &a, QList<CertContext*> *certs, QList<CRLContext*> *crls) const = 0;
|
2004-10-31 10:04:44 +00:00
|
|
|
};
|
2004-10-29 22:51:30 +00:00
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT CAContext : public Provider::Context
|
2005-03-05 01:10:14 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
CAContext(Provider *p) : Provider::Context(p, "ca") {}
|
|
|
|
|
|
|
|
virtual void setup(const CertContext &cert, const PKeyContext &priv) = 0;
|
|
|
|
|
|
|
|
// caller must delete all return values here
|
|
|
|
virtual CertContext *certificate() const = 0;
|
|
|
|
virtual CertContext *signRequest(const CSRContext &req, const QDateTime ¬ValidAfter) const = 0;
|
|
|
|
virtual CertContext *createCertificate(const PKeyContext &pub, const CertificateOptions &opts) const = 0;
|
|
|
|
virtual CRLContext *createCRL(const QDateTime &nextUpdate) const = 0;
|
|
|
|
virtual CRLContext *updateCRL(const CRLContext &crl, const QList<CRLEntry> &entries, const QDateTime &nextUpdate) const = 0;
|
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT PIXContext : public Provider::Context
|
2005-03-05 01:10:14 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
PIXContext(Provider *p) : Provider::Context(p, "pix") {}
|
|
|
|
|
|
|
|
virtual QByteArray toPKCS12(const QString &name, const QList<const CertContext*> &chain, const PKeyContext &priv, const QSecureArray &passphrase) const = 0;
|
|
|
|
|
|
|
|
// caller must delete
|
|
|
|
virtual ConvertResult fromPKCS12(const QByteArray &in, const QSecureArray &passphrase, QString *name, QList<CertContext*> *chain, PKeyContext **priv) const = 0;
|
|
|
|
};
|
|
|
|
|
2005-07-06 22:27:02 +00:00
|
|
|
class QCA_EXPORT PGPKeyContextProps
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
QString keyId;
|
|
|
|
QStringList userIds;
|
|
|
|
bool isSecret;
|
|
|
|
QDateTime creationDate, expirationDate;
|
|
|
|
QString fingerprint;
|
|
|
|
bool inKeyring;
|
|
|
|
bool isTrusted;
|
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT PGPKeyContext : public Provider::Context
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
PGPKeyContext(Provider *p) : Provider::Context(p, "pgpkey") {}
|
|
|
|
|
2005-07-06 22:27:02 +00:00
|
|
|
virtual const PGPKeyContextProps *props() const = 0;
|
|
|
|
|
|
|
|
virtual QSecureArray toBinary() const = 0;
|
|
|
|
virtual QString toAscii() const = 0;
|
|
|
|
virtual ConvertResult fromBinary(const QSecureArray &a) = 0;
|
|
|
|
virtual ConvertResult fromAscii(const QString &s) = 0;
|
2005-06-25 02:48:53 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class QCA_EXPORT KeyStoreEntryContext : public Provider::Context
|
2005-03-28 07:11:58 +00:00
|
|
|
{
|
2005-04-09 07:43:15 +00:00
|
|
|
public:
|
|
|
|
KeyStoreEntryContext(Provider *p) : Provider::Context(p, "keystoreentry") {}
|
|
|
|
|
|
|
|
virtual KeyStoreEntry::Type type() const = 0;
|
|
|
|
virtual QString id() const = 0;
|
2005-07-28 12:17:09 +00:00
|
|
|
virtual QString name() const = 0;
|
2005-04-09 07:43:15 +00:00
|
|
|
|
|
|
|
virtual KeyBundle keyBundle() const;
|
|
|
|
virtual Certificate certificate() const;
|
|
|
|
virtual CRL crl() const;
|
|
|
|
virtual PGPKey pgpSecretKey() const;
|
|
|
|
virtual PGPKey pgpPublicKey() const;
|
|
|
|
};
|
|
|
|
|
2005-07-28 12:17:09 +00:00
|
|
|
class QCA_EXPORT KeyStoreListContext : public QObject, public Provider::Context
|
2005-04-09 07:43:15 +00:00
|
|
|
{
|
|
|
|
Q_OBJECT
|
2005-03-28 07:11:58 +00:00
|
|
|
public:
|
2005-07-28 12:17:09 +00:00
|
|
|
KeyStoreListContext(Provider *p) : Provider::Context(p, "keystorelist") {}
|
2005-04-09 07:43:15 +00:00
|
|
|
|
2005-07-28 12:17:09 +00:00
|
|
|
virtual void start() = 0;
|
2005-04-09 07:43:15 +00:00
|
|
|
|
2005-07-28 12:17:09 +00:00
|
|
|
// returns a list of integer context ids (for keystores)
|
|
|
|
virtual QList<int> keyStores() const = 0;
|
2005-04-09 07:43:15 +00:00
|
|
|
|
2005-07-28 12:17:09 +00:00
|
|
|
// null/empty return values mean the context id is gone
|
2005-04-09 07:43:15 +00:00
|
|
|
|
2005-07-28 12:17:09 +00:00
|
|
|
virtual KeyStore::Type type(int id) const = 0;
|
|
|
|
virtual QString storeId(int id) const = 0;
|
|
|
|
virtual QString name(int id) const = 0;
|
|
|
|
virtual bool isReadOnly(int id) const;
|
2005-04-09 07:43:15 +00:00
|
|
|
|
2005-07-28 12:17:09 +00:00
|
|
|
virtual QList<KeyStoreEntry::Type> entryTypes(int id) const = 0;
|
2005-04-09 07:43:15 +00:00
|
|
|
|
2005-07-28 12:17:09 +00:00
|
|
|
// caller must delete
|
|
|
|
virtual QList<KeyStoreEntryContext*> entryList(int id) const = 0;
|
2005-03-28 07:11:58 +00:00
|
|
|
|
2005-07-28 12:17:09 +00:00
|
|
|
virtual bool writeEntry(int id, const KeyBundle &kb);
|
|
|
|
virtual bool writeEntry(int id, const Certificate &cert);
|
|
|
|
virtual bool writeEntry(int id, const CRL &crl);
|
|
|
|
virtual PGPKey writeEntry(int id, const PGPKey &key);
|
|
|
|
virtual bool removeEntry(int id, const QString &entryId);
|
2005-04-09 07:43:15 +00:00
|
|
|
|
2005-07-31 05:12:42 +00:00
|
|
|
virtual void submitPassphrase(int id, int requestId, const QSecureArray &passphrase);
|
|
|
|
virtual void rejectPassphraseRequest(int id, int requestId);
|
2005-04-09 07:43:15 +00:00
|
|
|
|
|
|
|
signals:
|
2005-07-28 12:17:09 +00:00
|
|
|
// note: busyStart is assumed after calling start(), no need to emit
|
|
|
|
void busyStart();
|
|
|
|
void busyEnd();
|
|
|
|
|
2005-07-31 05:12:42 +00:00
|
|
|
void updated();
|
|
|
|
void diagnosticText(const QString &str);
|
|
|
|
void storeUpdated(int id);
|
2005-07-28 12:17:09 +00:00
|
|
|
|
|
|
|
// emit this from the thread that caused it
|
2005-07-31 05:12:42 +00:00
|
|
|
void storeNeedPassphrase(int id, int requestId, const QString &entryId);
|
2005-03-28 07:11:58 +00:00
|
|
|
};
|
|
|
|
|
2005-07-28 12:17:09 +00:00
|
|
|
class QCA_EXPORT TLSContext : public QObject, public Provider::Context
|
2004-10-29 22:51:30 +00:00
|
|
|
{
|
2005-07-28 12:17:09 +00:00
|
|
|
Q_OBJECT
|
2004-10-29 22:51:30 +00:00
|
|
|
public:
|
2005-04-22 12:46:55 +00:00
|
|
|
class SessionInfo
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
bool isCompressed;
|
|
|
|
TLS::Version version;
|
|
|
|
QString cipherSuite;
|
|
|
|
int cipherBits, cipherMaxBits;
|
|
|
|
};
|
|
|
|
|
|
|
|
enum Result
|
|
|
|
{
|
|
|
|
Success,
|
|
|
|
Error,
|
|
|
|
Continue
|
|
|
|
};
|
|
|
|
|
2005-07-31 01:27:27 +00:00
|
|
|
TLSContext(Provider *p, const QString &type) : Provider::Context(p, type) {}
|
2004-10-29 22:51:30 +00:00
|
|
|
|
|
|
|
virtual void reset() = 0;
|
|
|
|
|
2005-04-22 12:46:55 +00:00
|
|
|
virtual QStringList supportedCipherSuites() const = 0;
|
|
|
|
virtual bool canCompress() const = 0;
|
2005-04-24 19:09:06 +00:00
|
|
|
virtual int maxSSF() const = 0;
|
2005-04-22 12:46:55 +00:00
|
|
|
|
|
|
|
virtual void setConstraints(int minSSF, int maxSSF) = 0;
|
|
|
|
virtual void setConstraints(const QStringList &cipherSuiteList) = 0;
|
2005-07-30 09:16:05 +00:00
|
|
|
virtual void setup(const CertificateCollection &trusted, const CertificateChain &cert, const PrivateKey &key, bool server, bool compress, bool dtls) = 0;
|
2005-04-22 12:46:55 +00:00
|
|
|
|
2005-07-30 09:16:05 +00:00
|
|
|
virtual void shutdown() = 0; // flag for shutdown, call update next
|
|
|
|
virtual void setMTU(int size); // for dtls
|
|
|
|
|
|
|
|
// start() results:
|
|
|
|
// result (Success or Error)
|
|
|
|
virtual void start() = 0;
|
|
|
|
|
|
|
|
// update() results:
|
|
|
|
// during handshake:
|
|
|
|
// result
|
|
|
|
// to_net
|
|
|
|
// during shutdown:
|
|
|
|
// result
|
|
|
|
// to_net
|
|
|
|
// else
|
|
|
|
// result (Success or Error)
|
|
|
|
// to_net
|
|
|
|
// encoded
|
|
|
|
// to_app
|
|
|
|
// eof
|
|
|
|
// note: for dtls, this function only operates with single
|
|
|
|
// packets. perform the operation repeatedly to send/recv
|
|
|
|
// multiple packets.
|
|
|
|
virtual void update(const QByteArray &from_net, const QByteArray &from_app) = 0;
|
2005-07-28 12:17:09 +00:00
|
|
|
|
2005-07-31 01:27:27 +00:00
|
|
|
virtual void waitForResultsReady(int msecs) = 0; // -1 means wait forever
|
2005-04-22 12:46:55 +00:00
|
|
|
|
2005-07-28 12:17:09 +00:00
|
|
|
// results
|
2005-07-30 09:16:05 +00:00
|
|
|
virtual Result result() const = 0;
|
|
|
|
virtual QByteArray to_net() = 0;
|
|
|
|
virtual int encoded() const = 0;
|
|
|
|
virtual QByteArray to_app() = 0;
|
|
|
|
virtual bool eof() const = 0;
|
2005-07-28 12:17:09 +00:00
|
|
|
|
2005-07-30 09:16:05 +00:00
|
|
|
// call after successful handshake
|
2005-07-28 12:17:09 +00:00
|
|
|
virtual Validity peerCertificateValidity() const = 0;
|
|
|
|
virtual CertificateChain peerCertificateChain() const = 0;
|
2005-04-22 12:46:55 +00:00
|
|
|
virtual SessionInfo sessionInfo() const = 0;
|
2005-07-30 09:16:05 +00:00
|
|
|
|
|
|
|
// call after shutdown
|
2005-04-24 19:09:06 +00:00
|
|
|
virtual QByteArray unprocessed() = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
|
2005-07-28 12:17:09 +00:00
|
|
|
signals:
|
|
|
|
void resultsReady();
|
2005-07-30 09:16:05 +00:00
|
|
|
void dtlsTimeout(); // call update, even with empty args
|
2004-10-29 22:51:30 +00:00
|
|
|
};
|
|
|
|
|
2005-07-31 01:27:27 +00:00
|
|
|
class QCA_EXPORT SASLContext : public QObject, public Provider::Context
|
2004-10-29 22:51:30 +00:00
|
|
|
{
|
2005-07-31 01:27:27 +00:00
|
|
|
Q_OBJECT
|
2004-10-29 22:51:30 +00:00
|
|
|
public:
|
2005-04-22 12:46:55 +00:00
|
|
|
class HostPort
|
2004-10-31 10:04:44 +00:00
|
|
|
{
|
2005-04-22 12:46:55 +00:00
|
|
|
public:
|
|
|
|
QString addr;
|
|
|
|
quint16 port;
|
2004-10-31 10:04:44 +00:00
|
|
|
};
|
2005-04-22 12:46:55 +00:00
|
|
|
|
2004-10-31 10:04:44 +00:00
|
|
|
enum Result
|
|
|
|
{
|
|
|
|
Success,
|
|
|
|
Error,
|
|
|
|
NeedParams,
|
|
|
|
AuthCheck,
|
|
|
|
Continue
|
|
|
|
};
|
2005-04-22 12:46:55 +00:00
|
|
|
|
2004-10-31 10:04:44 +00:00
|
|
|
SASLContext(Provider *p) : Provider::Context(p, "sasl") {}
|
2004-10-29 22:51:30 +00:00
|
|
|
|
|
|
|
virtual void reset() = 0;
|
|
|
|
|
2005-07-31 01:27:27 +00:00
|
|
|
virtual void setConstraints(SASL::AuthFlags f, int minSSF, int maxSSF) = 0;
|
|
|
|
virtual void setup(const QString &service, const QString &host, const HostPort *local, const HostPort *remote, const QString &ext_id, int ext_ssf) = 0;
|
|
|
|
|
|
|
|
// startClient() results:
|
|
|
|
// result
|
|
|
|
// mech
|
|
|
|
// haveClientInit
|
|
|
|
// stepData
|
|
|
|
virtual void startClient(const QStringList &mechlist, bool allowClientSendFirst) = 0;
|
|
|
|
|
|
|
|
// startServer() results:
|
|
|
|
// result (Success or Error)
|
|
|
|
// mechlist
|
|
|
|
virtual void startServer(const QString &realm, bool disableServerSendLast) = 0;
|
|
|
|
|
|
|
|
// serverFirstStep() results:
|
|
|
|
// result
|
|
|
|
// stepData
|
|
|
|
virtual void serverFirstStep(const QString &mech, const QByteArray *clientInit) = 0;
|
|
|
|
|
|
|
|
// nextStep() results:
|
|
|
|
// result
|
|
|
|
// stepData
|
|
|
|
virtual void nextStep(const QByteArray &from_net) = 0;
|
|
|
|
|
|
|
|
// tryAgain() results:
|
|
|
|
// result
|
|
|
|
// stepData
|
|
|
|
virtual void tryAgain() = 0;
|
|
|
|
|
|
|
|
// update() results:
|
|
|
|
// result (Success or Error)
|
|
|
|
// to_net
|
|
|
|
// encoded
|
|
|
|
// to_app
|
|
|
|
virtual void update(const QByteArray &from_net, const QByteArray &from_app) = 0;
|
|
|
|
|
|
|
|
virtual void waitForResultsReady(int msecs) = 0; // -1 means wait forever
|
2004-10-29 22:51:30 +00:00
|
|
|
|
|
|
|
// results
|
2005-07-31 01:27:27 +00:00
|
|
|
virtual Result result() const = 0;
|
|
|
|
virtual QString mechlist() const = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
virtual QString mech() const = 0;
|
2005-07-31 01:27:27 +00:00
|
|
|
virtual bool haveClientInit() const = 0;
|
|
|
|
virtual QByteArray stepData() const = 0;
|
|
|
|
virtual QByteArray to_net() const = 0;
|
|
|
|
virtual int encoded() const = 0;
|
|
|
|
virtual QByteArray to_app() const = 0;
|
|
|
|
|
|
|
|
// call after auth success
|
|
|
|
virtual int ssf() const = 0;
|
2004-10-29 22:51:30 +00:00
|
|
|
|
2005-07-31 01:27:27 +00:00
|
|
|
// call after auth fail
|
|
|
|
virtual SASL::AuthCondition authCondition() const = 0;
|
|
|
|
|
|
|
|
// call after NeedParams
|
|
|
|
virtual SASL::Params clientParamsNeeded() const = 0;
|
|
|
|
virtual void setClientParams(const QString *user, const QString *authzid, const QSecureArray *pass, const QString *realm) = 0;
|
|
|
|
|
|
|
|
// call after AuthCheck
|
|
|
|
virtual QString username() const = 0;
|
|
|
|
virtual QString authzid() const = 0;
|
|
|
|
|
|
|
|
signals:
|
|
|
|
void resultsReady();
|
2004-10-31 10:04:44 +00:00
|
|
|
};
|
2004-10-29 22:51:30 +00:00
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT MessageContext : public QObject, public Provider::Context
|
2005-05-06 07:13:23 +00:00
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
enum Operation
|
|
|
|
{
|
|
|
|
Encrypt,
|
|
|
|
Decrypt,
|
|
|
|
Sign,
|
|
|
|
Verify,
|
2005-05-10 07:04:41 +00:00
|
|
|
SignAndEncrypt
|
2005-05-06 07:13:23 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
MessageContext(Provider *p, const QString &type) : Provider::Context(p, type) {}
|
|
|
|
|
2005-05-10 07:04:41 +00:00
|
|
|
virtual bool canSignMultiple() const = 0;
|
|
|
|
|
2005-05-06 07:13:23 +00:00
|
|
|
virtual SecureMessage::Type type() const = 0;
|
|
|
|
|
|
|
|
virtual void reset() = 0;
|
|
|
|
virtual void setupEncrypt(const SecureMessageKeyList &keys) = 0;
|
2005-05-10 07:04:41 +00:00
|
|
|
virtual void setupSign(const SecureMessageKeyList &keys, SecureMessage::SignMode m, bool bundleSigner, bool smime) = 0;
|
2005-06-24 23:41:25 +00:00
|
|
|
virtual void setupVerify(const QByteArray &detachedSig) = 0;
|
2005-05-06 07:13:23 +00:00
|
|
|
|
|
|
|
virtual void start(SecureMessage::Format f, Operation op) = 0;
|
2005-06-24 23:41:25 +00:00
|
|
|
virtual void update(const QByteArray &in) = 0;
|
|
|
|
virtual QByteArray read() = 0;
|
2005-05-06 07:13:23 +00:00
|
|
|
virtual void end() = 0;
|
|
|
|
|
2005-05-10 07:04:41 +00:00
|
|
|
virtual bool finished() const = 0;
|
2005-05-07 02:00:45 +00:00
|
|
|
virtual void waitForFinished(int msecs) = 0; // -1 means wait forever
|
2005-05-06 07:13:23 +00:00
|
|
|
|
2005-05-10 07:04:41 +00:00
|
|
|
virtual bool success() const = 0;
|
|
|
|
virtual SecureMessage::Error errorCode() const = 0;
|
2005-06-24 23:41:25 +00:00
|
|
|
virtual QByteArray signature() const = 0;
|
2005-05-10 07:04:41 +00:00
|
|
|
virtual QString hashName() const = 0;
|
|
|
|
virtual SecureMessageSignatureList signers() const = 0;
|
2005-05-06 07:13:23 +00:00
|
|
|
|
|
|
|
signals:
|
|
|
|
void updated();
|
|
|
|
};
|
|
|
|
|
2005-06-25 02:48:53 +00:00
|
|
|
class QCA_EXPORT SMSContext : public Provider::Context
|
2005-05-06 07:13:23 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
SMSContext(Provider *p, const QString &type) : Provider::Context(p, type) {}
|
|
|
|
|
|
|
|
virtual void setTrustedCertificates(const CertificateCollection &trusted);
|
2005-06-25 20:25:52 +00:00
|
|
|
virtual void setPrivateKeys(const QList<SecureMessageKey> &keys);
|
|
|
|
virtual MessageContext *createMessage() = 0;
|
2005-05-06 07:13:23 +00:00
|
|
|
};
|
|
|
|
|
2004-10-28 04:28:20 +00:00
|
|
|
}
|
|
|
|
|
2003-07-02 03:34:11 +00:00
|
|
|
#endif
|