qca_basic.h

Go to the documentation of this file.
00001 /*
00002  * qca_basic.h - Qt Cryptographic Architecture
00003  * Copyright (C) 2003-2007  Justin Karneges <justin@affinix.com>
00004  * Copyright (C) 2004-2007  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
00019  * 02110-1301  USA
00020  *
00021  */
00022 
00033 #ifndef QCA_BASIC_H
00034 #define QCA_BASIC_H
00035 
00036 #include "qca_core.h"
00037 
00038 namespace QCA {
00039 
00062 class QCA_EXPORT Random : public Algorithm
00063 {
00064 public:
00071         Random(const QString &provider = QString());
00072 
00078         Random(const Random &from);
00079 
00080         ~Random();
00081 
00087         Random & operator=(const Random &from);
00088 
00097         uchar nextByte();
00098 
00109         SecureArray nextBytes(int size);
00110 
00122         static uchar randomChar();
00123 
00133         static int randomInt();
00134 
00145         static SecureArray randomArray(int size);
00146 
00147 private:
00148         class Private;
00149         Private *d;
00150 };
00151 
00205 class QCA_EXPORT Hash : public Algorithm, public BufferedComputation
00206 {
00207 public:
00216         explicit Hash(const QString &type, const QString &provider = QString());
00217 
00223         Hash(const Hash &from);
00224 
00225         ~Hash();
00226 
00232         Hash & operator=(const Hash &from);
00233 
00241         static QStringList supportedTypes(const QString &provider = QString());
00242 
00246         QString type() const;
00247 
00258         virtual void clear();
00259 
00271         virtual void update(const MemoryRegion &a);
00272 
00278         void update(const QByteArray &a);
00279 
00294         void update(const char *data, int len = -1);
00295 
00318         void update(QIODevice *file);
00319 
00333         virtual MemoryRegion final();
00334 
00355         MemoryRegion hash(const MemoryRegion &array);
00356 
00371         QString hashToString(const MemoryRegion &array);
00372 
00373 private:
00374         class Private;
00375         Private *d;
00376 };
00377 
00575 class QCA_EXPORT Cipher : public Algorithm, public Filter
00576 {
00577 public:
00585         enum Mode
00586         {
00587                 CBC, 
00588                 CFB, 
00589                 ECB, 
00590                 OFB  
00591         };
00592 
00599         enum Padding
00600         {
00601                 DefaultPadding, 
00602                 NoPadding,      
00603                 PKCS7           
00604         };
00605 
00622         Cipher(const QString &type, Mode mode, Padding pad = DefaultPadding,
00623                 Direction dir = Encode, const SymmetricKey &key = SymmetricKey(), 
00624                 const InitializationVector &iv = InitializationVector(),
00625                 const QString &provider = QString());
00626 
00632         Cipher(const Cipher &from);
00633 
00634         ~Cipher();
00635 
00641         Cipher & operator=(const Cipher &from);
00642 
00650         static QStringList supportedTypes(const QString &provider = QString());
00651 
00655         QString type() const;
00656 
00660         Mode mode() const;
00661 
00665         Padding padding() const;
00666 
00670         Direction direction() const;
00671 
00675         KeyLength keyLength() const;
00676 
00683         bool validKeyLength(int n) const;
00684 
00688         int blockSize() const;
00689 
00693         virtual void clear();
00694 
00702         virtual MemoryRegion update(const MemoryRegion &a);
00703 
00708         virtual MemoryRegion final();
00709 
00715         virtual bool ok() const;
00716 
00730         void setup(Direction dir, const SymmetricKey &key, const InitializationVector &iv = InitializationVector());
00731 
00741         static QString withAlgorithms(const QString &cipherType, Mode modeType, Padding paddingType);
00742 
00743 private:
00744         class Private;
00745         Private *d;
00746 };
00747 
00768 class QCA_EXPORT MessageAuthenticationCode : public Algorithm, public BufferedComputation
00769 {
00770 public:
00780         MessageAuthenticationCode(const QString &type, const SymmetricKey &key, const QString &provider = QString());
00781 
00790         MessageAuthenticationCode(const MessageAuthenticationCode &from);
00791 
00792         ~MessageAuthenticationCode();
00793 
00802         MessageAuthenticationCode & operator=(const MessageAuthenticationCode &from);
00803 
00812         static QStringList supportedTypes(const QString &provider = QString());
00813 
00817         QString type() const;
00818 
00822         KeyLength keyLength() const;
00823 
00830         bool validKeyLength(int n) const;
00831 
00844         virtual void clear();
00845 
00853         virtual void update(const MemoryRegion &array);
00854 
00866         virtual MemoryRegion final();
00867 
00873         void setup(const SymmetricKey &key);
00874 
00875 private:
00876         class Private;
00877         Private *d;
00878 };
00879 
00894 class QCA_EXPORT KeyDerivationFunction : public Algorithm
00895 {
00896 public:
00902         KeyDerivationFunction(const KeyDerivationFunction &from);
00903 
00904         ~KeyDerivationFunction();
00905 
00914         KeyDerivationFunction & operator=(const KeyDerivationFunction &from);
00915 
00928         SymmetricKey makeKey(const SecureArray &secret, const InitializationVector &salt, unsigned int keyLength, unsigned int iterationCount);
00929 
00942         static QString withAlgorithm(const QString &kdfType, const QString &algType);
00943 
00944 protected:
00951         KeyDerivationFunction(const QString &type, const QString &provider);
00952 
00953 private:
00954         class Private;
00955         Private *d;
00956 };
00957 
00968 class QCA_EXPORT PBKDF1 : public KeyDerivationFunction
00969 {
00970 public:
00977         explicit PBKDF1(const QString &algorithm = "sha1", const QString &provider = QString()) : KeyDerivationFunction(withAlgorithm("pbkdf1", algorithm), provider) {}
00978 };
00979 
00990 class QCA_EXPORT PBKDF2 : public KeyDerivationFunction
00991 {
00992 public:
00999         explicit PBKDF2(const QString &algorithm = "sha1", const QString &provider = QString()) : KeyDerivationFunction(withAlgorithm("pbkdf2", algorithm), provider) {}
01000 };
01001 
01002 }
01003 
01004 #endif

Generated on Wed Apr 29 15:15:45 2009 for Qt Cryptographic Architecture by  doxygen 1.5.5