Qt Crypto Architecture for KDE4?
Brad Hards
bradh at frogmouth.net
Sun Sep 11 07:02:11 BST 2005
One of the things I'd hoped to do at aKademy was to get some discussion going
about using QCA in Qt4. Unfortunately I had a cold, and spent much too much
time sleeping and feeling unmotivated instead. So I thought I'd try to kick
off some discussion about it now.
Firstly, a bit about QCA:
It provides a range of encryption/decryption, hashing, random number, secure
transport and authentication support - the normal crypto functions that you'd
be looking for. The design is essentially a Bridge - a standard API, and
pluggable back-ends (called "providers") that actually implement the crypto
operations. A provider is normally an Adapter that calls into a standard
library - right now we have providers that use OpenSSL, gcrypt, Botan, gnupg.
You can change out providers at run-time. QCA also provides some
functionality using an internal provider - things like basic random number
support, MD5 and SHA1. The API is almost completely documented in Doxygen,
and there are some examples (linked into the Doxygen output, and also
compilable - its a nice trick). There are unit tests for most of the lower
level API, and I'm going to convert them to QtTestLib.
Working with KDE:
There are three ways in which KDE could use QCA (and they aren't completely
exclusive, but making a decision as to the general direction would probably
save work and be cleaner).
1. Re-implement the kdelibs crypto related classes (stuff like KMD5/KMD4,
perhaps part of KCodecs, KSSL) using QCA. So the API would remain pretty much
the same, but would be implemented using QCA.
2. Remove most/all of the existing crypto code from kdelibs (and possibly
other places) and use QCA instead. If there are things that QCA can't do that
are needed, we just implement the additional parts in QCA. Applications then
just use QCA for all their crypto needs.
3. Use QCA for the simple stuff (removing KMD4/KMD5) and implement a different
KDE specific API over the top of QCA for the more complex stuff (eg for SASL,
SSL, PGP).
As I see it, the second options would be the cleanest, but probably the most
work for the application authors. The third is probably the most flexible,
and might be needed to ensure that QCA doesn't become dependent on any part
of KDE.
Issues:
* Is there a desire to change out the current dependency on OpenSSL? It is a
bit of work, and the advantages are really only in not having to deal with
the ugly OpenSSL API (which might make it easier for more applications to
support security/privacy functions), and for isolating the crypto parts
(which might be a bigger deal for distributions).
* The providers aren't all done. Surely they will be more complete by KDE4,
but I worry a bit about holding up development because of lack of
functionality.
* The API isn't set yet. This cuts both ways - we can still fix it, but it
isn't stable. It is pretty close though, and we will provide API and ABI
compatibility through the life of Qt4 (unless a change is required to fix a
security issue, although that seems unlikely).
* Requiring QCA does introduce another compile time dependency. We wouldn't
need openssl, but then most people will already have it.
You can see it all in our svn repo - in kdesupport/qca.
Brad
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20050911/d860f680/attachment.sig>
More information about the kde-core-devel
mailing list