Qt Cryptographic Architecture: qca_tools.h Source File

Qt Cryptographic Architecture

qca_tools.h
Go to the documentation of this file.
1 /*
2 * qca_tools.h - Qt Cryptographic Architecture
3 * Copyright (C) 2003-2007 Justin Karneges <justin@affinix.com>
4 * Copyright (C) 2004,2005 Brad Hards <bradh@frogmouth.net>
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 * 02110-1301 USA
20 *
21 */
22
36 #ifndef QCA_TOOLS_H
37 #define QCA_TOOLS_H
38
39 #include <QSharedData>
40 #include <QSharedDataPointer>
41 #include <QMetaType>
42 #include "qca_export.h"
43
44 class QString;
45 class QByteArray;
46 class QTextStream;
47
55 QCA_EXPORT void *qca_secure_alloc(int bytes);
56
65 QCA_EXPORT void qca_secure_free(void *p);
66
74 QCA_EXPORT void *qca_secure_realloc(void *p, int bytes);
75
76 namespace QCA {
77
90 class QCA_EXPORT MemoryRegion
91 {
92 public:
93 MemoryRegion();
94
101 MemoryRegion(const char *str);
102
109 MemoryRegion(const QByteArray &from);
110
116 MemoryRegion(const MemoryRegion &from);
117 ~MemoryRegion();
118
124 MemoryRegion & operator=(const MemoryRegion &from);
125
131 MemoryRegion & operator=(const QByteArray &from);
132
141 bool isNull() const;
142
151 bool isSecure() const;
152
161 QByteArray toByteArray() const;
162
166 bool isEmpty() const;
167
171 int size() const;
172
182 const char *data() const;
183
192 const char *constData() const;
193
204 const char & at(int index) const;
205
206 protected:
218 MemoryRegion(bool secure);
219
229 MemoryRegion(int size, bool secure);
230
243 MemoryRegion(const QByteArray &from, bool secure);
244
250 char *data();
251
262 char & at(int index);
263
269 bool resize(int size);
270
280 void set(const QByteArray &from, bool secure);
281
293 void setSecure(bool secure);
294
295 private:
296 bool _secure;
297 class Private;
298 QSharedDataPointer<Private> d;
299 };
300
316 class QCA_EXPORT SecureArray : public MemoryRegion
317 {
318 public:
322 SecureArray();
323
330 explicit SecureArray(int size, char ch = 0);
331
339 SecureArray(const char *str);
340
350 SecureArray(const QByteArray &a);
351
361 SecureArray(const MemoryRegion &a);
362
368 SecureArray(const SecureArray &from);
369
370 ~SecureArray();
371
377 SecureArray & operator=(const SecureArray &from);
378
384 SecureArray & operator=(const QByteArray &a);
385
389 void clear();
390
396 char & operator[](int index);
397
403 const char & operator[](int index) const;
404
412 char *data();
413
421 const char *data() const;
422
430 const char *constData() const;
431
437 char & at(int index);
438
444 const char & at(int index) const;
445
449 int size() const;
450
460 bool isEmpty() const;
461
470 bool resize(int size);
471
486 void fill(char fillChar, int fillToPosition = -1);
487
493 QByteArray toByteArray() const;
494
500 SecureArray & append(const SecureArray &a);
501
508 bool operator==(const MemoryRegion &other) const;
509
516 inline bool operator!=(const MemoryRegion &other) const
517 {
518 return !(*this == other);
519 }
520
526 SecureArray & operator+=(const SecureArray &a);
527
528 protected:
535 void set(const SecureArray &from);
536
543 void set(const QByteArray &from);
544 };
545
552 QCA_EXPORT const SecureArray operator+(const SecureArray &a, const SecureArray &b);
553
570 class QCA_EXPORT BigInteger
571 {
572 public:
576 BigInteger();
577
583 BigInteger(int n);
584
594 BigInteger(const char *c);
595
601 BigInteger(const QString &s);
602
608 BigInteger(const QCA::SecureArray &a);
609
615 BigInteger(const BigInteger &from);
616
617 ~BigInteger();
618
630 BigInteger & operator=(const BigInteger &from);
631
643 BigInteger & operator=(const QString &s);
644
657 BigInteger & operator+=(const BigInteger &b);
658
671 BigInteger & operator-=(const BigInteger &b);
672
678 BigInteger & operator*=(const BigInteger &b);
679
685 BigInteger & operator/=(const BigInteger &b);
686
692 BigInteger & operator%=(const BigInteger &b);
693
701 QCA::SecureArray toArray() const;
702
712 void fromArray(const QCA::SecureArray &a);
713
723 QString toString() const;
724
737 bool fromString(const QString &s);
738
761 int compare(const BigInteger &n) const;
762
769 inline bool operator==(const BigInteger &other) const
770 {
771 return (compare(other) == 0);
772 }
773
780 inline bool operator!=(const BigInteger &other) const
781 {
782 return !(*this == other);
783 }
784
792 inline bool operator<=(const BigInteger &other) const
793 {
794 return (compare(other) <= 0);
795 }
796
804 inline bool operator>=(const BigInteger &other) const
805 {
806 return (compare(other) >= 0);
807 }
808
816 inline bool operator<(const BigInteger &other) const
817 {
818 return (compare(other) < 0);
819 }
820
828 inline bool operator>(const BigInteger &other) const
829 {
830 return (compare(other) > 0);
831 }
832
833 private:
834 class Private;
835 QSharedDataPointer<Private> d;
836 };
837
838
839
848 QCA_EXPORT QTextStream &operator<<(QTextStream &stream, const BigInteger &b);
849
850
851 }
852
853 #endif
QCA::BigInteger::operator==
bool operator==(const BigInteger &other) const
Equality operator.
Definition: qca_tools.h:769
QCA::BigInteger::operator>
bool operator>(const BigInteger &other) const
Greater than operator.
Definition: qca_tools.h:828
QCA::BigInteger::operator<
bool operator<(const BigInteger &other) const
Less than operator.
Definition: qca_tools.h:816
QCA::BigInteger::operator<=
bool operator<=(const BigInteger &other) const
Less than or equal operator.
Definition: qca_tools.h:792
qca_export.h
Preprocessor magic to allow export of library symbols.
QCA::SecureArray::operator!=
bool operator!=(const MemoryRegion &other) const
Inequality operator.
Definition: qca_tools.h:516
qca_secure_alloc
QCA_EXPORT void * qca_secure_alloc(int bytes)
Allocate a block of memory from the secure memory pool.
QCA
QCA - the Qt Cryptographic Architecture.
Definition: qca_basic.h:47
QCA::SecureArray
Secure array of bytes.
Definition: qca_tools.h:316
qca_secure_realloc
QCA_EXPORT void * qca_secure_realloc(void *p, int bytes)
Resize (re-allocate) a block of memory that has been previously allocated from the secure memory pool...
QCA::BigInteger::operator!=
bool operator!=(const BigInteger &other) const
Inequality operator.
Definition: qca_tools.h:780
QCA::operator+
QCA_EXPORT const SecureArray operator+(const SecureArray &a, const SecureArray &b)
Returns an array that is the result of concatenating a and b.
QCA::BigInteger
Arbitrary precision integer.
Definition: qca_tools.h:570
qca_secure_free
QCA_EXPORT void qca_secure_free(void *p)
Free (de-allocate) a block of memory that has been previously allocated from the secure memory pool...
QCA::BigInteger::operator>=
bool operator>=(const BigInteger &other) const
Greater than or equal operator.
Definition: qca_tools.h:804
QCA::MemoryRegion
Array of bytes that may be optionally secured.
Definition: qca_tools.h:90