qca_tools.h

Go to the documentation of this file.
00001 /*
00002  * qca_tools.h - Qt Cryptographic Architecture
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
00019  * 02110-1301  USA
00020  *
00021  */
00022 
00036 #ifndef QCA_TOOLS_H
00037 #define QCA_TOOLS_H
00038 
00039 #include <QSharedData>
00040 #include <QSharedDataPointer>
00041 #include <QMetaType>
00042 #include "qca_export.h"
00043 
00044 class QString;
00045 class QByteArray;
00046 class QTextStream;
00047 
00055 QCA_EXPORT void *qca_secure_alloc(int bytes);
00056 
00065 QCA_EXPORT void qca_secure_free(void *p);
00066 
00074 QCA_EXPORT void *qca_secure_realloc(void *p, int bytes);
00075 
00076 namespace QCA {
00077 
00090 class QCA_EXPORT MemoryRegion
00091 {
00092 public:
00093         MemoryRegion();
00094 
00101         MemoryRegion(const char *str);
00102 
00109         MemoryRegion(const QByteArray &from);
00110 
00116         MemoryRegion(const MemoryRegion &from);
00117         ~MemoryRegion();
00118 
00124         MemoryRegion & operator=(const MemoryRegion &from);
00125 
00131         MemoryRegion & operator=(const QByteArray &from);
00132 
00141         bool isNull() const;
00142 
00151         bool isSecure() const;
00152 
00161         QByteArray toByteArray() const;
00162 
00166         bool isEmpty() const;
00167 
00171         int size() const;
00172 
00182         const char *data() const;
00183 
00192         const char *constData() const;
00193 
00204         const char & at(int index) const;
00205 
00206 protected:
00218         MemoryRegion(bool secure);
00219 
00229         MemoryRegion(int size, bool secure);
00230 
00243         MemoryRegion(const QByteArray &from, bool secure);
00244 
00250         char *data();
00251 
00262         char & at(int index);
00263 
00269         bool resize(int size);
00270 
00280         void set(const QByteArray &from, bool secure);
00281 
00293         void setSecure(bool secure);
00294 
00295 private:
00296         bool _secure;
00297         class Private;
00298         QSharedDataPointer<Private> d;
00299 };
00300 
00316 class QCA_EXPORT SecureArray : public MemoryRegion
00317 {
00318 public:
00322         SecureArray();
00323 
00330         explicit SecureArray(int size, char ch = 0);
00331 
00339         SecureArray(const char *str);
00340 
00350         SecureArray(const QByteArray &a);
00351 
00361         SecureArray(const MemoryRegion &a);
00362 
00368         SecureArray(const SecureArray &from);
00369 
00370         ~SecureArray();
00371 
00377         SecureArray & operator=(const SecureArray &from);
00378 
00384         SecureArray & operator=(const QByteArray &a);
00385 
00389         void clear();
00390 
00396         char & operator[](int index);
00397 
00403         const char & operator[](int index) const;
00404 
00412         char *data();
00413 
00421         const char *data() const;
00422 
00430         const char *constData() const;
00431 
00437         char & at(int index);
00438 
00444         const char & at(int index) const;
00445 
00449         int size() const;
00450 
00460         bool isEmpty() const;
00461 
00470         bool resize(int size);
00471 
00486         void fill(char fillChar, int fillToPosition = -1);
00487 
00493         QByteArray toByteArray() const;
00494 
00500         SecureArray & append(const SecureArray &a);
00501 
00508         bool operator==(const MemoryRegion &other) const;
00509         
00516         inline bool operator!=(const MemoryRegion &other) const
00517         {
00518                 return !(*this == other);
00519         }
00520 
00526         SecureArray & operator+=(const SecureArray &a);
00527 
00528 protected:
00535         void set(const SecureArray &from);
00536 
00543         void set(const QByteArray &from);
00544 };
00545 
00552 QCA_EXPORT const SecureArray operator+(const SecureArray &a, const SecureArray &b);
00553 
00570 class QCA_EXPORT BigInteger
00571 {
00572 public:
00576         BigInteger();
00577 
00583         BigInteger(int n);
00584 
00594         BigInteger(const char *c);
00595 
00601         BigInteger(const QString &s);
00602 
00608         BigInteger(const QCA::SecureArray &a);
00609 
00615         BigInteger(const BigInteger &from);
00616 
00617         ~BigInteger();
00618 
00630         BigInteger & operator=(const BigInteger &from);
00631 
00643         BigInteger & operator=(const QString &s);
00644 
00657         BigInteger & operator+=(const BigInteger &b);
00658 
00671         BigInteger & operator-=(const BigInteger &b);
00672 
00678         BigInteger & operator*=(const BigInteger &b);
00679 
00685         BigInteger & operator/=(const BigInteger &b);
00686 
00692         BigInteger & operator%=(const BigInteger &b);
00693 
00701         QCA::SecureArray toArray() const;
00702 
00712         void fromArray(const QCA::SecureArray &a);
00713 
00723         QString toString() const;
00724 
00737         bool fromString(const QString &s);
00738 
00761         int compare(const BigInteger &n) const;
00762 
00769         inline bool operator==(const BigInteger &other) const
00770         {
00771                 return (compare(other) == 0);
00772         }
00773 
00780         inline bool operator!=(const BigInteger &other) const
00781         {
00782                 return !(*this == other);
00783         }
00784 
00792         inline bool operator<=(const BigInteger &other) const
00793         {
00794                 return (compare(other) <= 0);
00795         }
00796 
00804         inline bool operator>=(const BigInteger &other) const
00805         {
00806                 return (compare(other) >= 0);
00807         }
00808 
00816         inline bool operator<(const BigInteger &other) const
00817         {
00818                 return (compare(other) < 0);
00819         }
00820 
00828         inline bool operator>(const BigInteger &other) const
00829         {
00830                 return (compare(other) > 0);
00831         }
00832 
00833 private:
00834         class Private;
00835         QSharedDataPointer<Private> d;
00836 };
00837 
00838 
00839 
00848 QCA_EXPORT QTextStream &operator<<(QTextStream &stream, const BigInteger &b);
00849 
00850 
00851 }
00852 
00853 #endif

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