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 "qca_export.h"
40#include <QMetaType>
41#include <QSharedData>
42#include <QSharedDataPointer>
43
44class QString;
45class QByteArray;
46class QTextStream;
47
55QCA_EXPORT void *qca_secure_alloc(int bytes);
56
65QCA_EXPORT void qca_secure_free(void *p);
66
74QCA_EXPORT void *qca_secure_realloc(void *p, int bytes);
75
76namespace QCA {
77
90class QCA_EXPORT MemoryRegion
91{
92public:
94
101 MemoryRegion(const char *str);
102
109 MemoryRegion(const QByteArray &from);
110
118
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
206protected:
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
295private:
296 bool _secure;
297 class Private;
298 QSharedDataPointer<Private> d;
299};
300
316class QCA_EXPORT SecureArray : public MemoryRegion
317{
318public:
323
330 explicit SecureArray(int size, char ch = 0);
331
339 SecureArray(const char *str);
340
350 SecureArray(const QByteArray &a);
351
362
369
370 ~SecureArray();
371
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
501
508 bool operator==(const MemoryRegion &other) const;
509
516 inline bool operator!=(const MemoryRegion &other) const
517 {
518 return !(*this == other);
519 }
520
527
528protected:
535 void set(const SecureArray &from);
536
543 void set(const QByteArray &from);
544};
545
552QCA_EXPORT const SecureArray operator+(const SecureArray &a, const SecureArray &b);
553
570class QCA_EXPORT BigInteger
571{
572public:
577
584
594 BigInteger(const char *c);
595
601 BigInteger(const QString &s);
602
609
615 BigInteger(const BigInteger &from);
616
617 ~BigInteger();
618
631
643 BigInteger &operator=(const QString &s);
644
658
672
679
686
693
702
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
833private:
834 class Private;
835 QSharedDataPointer<Private> d;
836};
837
846QCA_EXPORT QTextStream &operator<<(QTextStream &stream, const BigInteger &b);
847
848}
849
850#endif
Arbitrary precision integer.
Definition qca_tools.h:571
BigInteger(int n)
This is an overloaded member function, provided for convenience. It differs from the above function o...
bool operator!=(const BigInteger &other) const
Inequality operator.
Definition qca_tools.h:780
void fromArray(const QCA::SecureArray &a)
Assign from an array.
bool fromString(const QString &s)
Assign from a QString.
bool operator<=(const BigInteger &other) const
Less than or equal operator.
Definition qca_tools.h:792
BigInteger(const char *c)
BigInteger & operator=(const BigInteger &from)
BigInteger & operator-=(const BigInteger &b)
BigInteger & operator%=(const BigInteger &b)
Modulo in place operator.
bool operator>(const BigInteger &other) const
Greater than operator.
Definition qca_tools.h:828
bool operator>=(const BigInteger &other) const
Greater than or equal operator.
Definition qca_tools.h:804
BigInteger(const QCA::SecureArray &a)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QCA::SecureArray toArray() const
Output BigInteger as a byte array, useful for storage or transmission.
BigInteger(const BigInteger &from)
This is an overloaded member function, provided for convenience. It differs from the above function o...
BigInteger(const QString &s)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QString toString() const
QCA_EXPORT QTextStream & operator<<(QTextStream &stream, const BigInteger &b)
Stream operator.
int compare(const BigInteger &n) const
BigInteger()
Constructor.
bool operator==(const BigInteger &other) const
Equality operator.
Definition qca_tools.h:769
bool operator<(const BigInteger &other) const
Less than operator.
Definition qca_tools.h:816
BigInteger & operator/=(const BigInteger &b)
Divide in place operator.
BigInteger & operator*=(const BigInteger &b)
Multiply in place operator.
BigInteger & operator=(const QString &s)
This is an overloaded member function, provided for convenience. It differs from the above function o...
BigInteger & operator+=(const BigInteger &b)
Array of bytes that may be optionally secured.
Definition qca_tools.h:91
bool resize(int size)
Resize the memory region to the specified size.
MemoryRegion(const MemoryRegion &from)
Standard copy constructor.
MemoryRegion & operator=(const MemoryRegion &from)
Standard assignment operator.
MemoryRegion & operator=(const QByteArray &from)
Standard assignment operator.
bool isNull() const
Test if the MemoryRegion is null (i.e.
void set(const QByteArray &from, bool secure)
Modify the memory region to match a specified byte array.
const char * data() const
Convert the contents of the memory region to a C-compatible character array.
MemoryRegion(int size, bool secure)
Create a memory region, optionally using secure storage.
bool isEmpty() const
Returns true if the size of the memory region is zero.
MemoryRegion(const QByteArray &from, bool secure)
Create a memory region, optionally using secure storage.
bool isSecure() const
Test if the MemoryRegion is using secure memory, or not.
int size() const
Returns the number of bytes in the memory region.
void setSecure(bool secure)
Convert the memory region to use the specified memory type.
const char & at(int index) const
Obtain the value of the memory location at the specified position.
const char * constData() const
Convert the contents of the memory region to a C-compatible character array.
MemoryRegion(const QByteArray &from)
Constructs a new MemoryRegion from the data in a byte array.
MemoryRegion(const char *str)
Constructs a new Memory Region from a null terminated character array.
QByteArray toByteArray() const
Convert this memory region to a byte array.
char & at(int index)
Obtain the value of the memory location at the specified position.
MemoryRegion(bool secure)
Create a memory region, optionally using secure storage.
char * data()
Convert the contents of the memory region to a C-compatible character array.
Secure array of bytes.
Definition qca_tools.h:317
SecureArray & operator=(const SecureArray &from)
Creates a reference, rather than a deep copy.
void set(const SecureArray &from)
Assign the contents of a provided byte array to this object.
const char * data() const
Pointer to the data in the secure array.
int size() const
Returns the number of bytes in the array.
SecureArray(const MemoryRegion &a)
Construct a secure byte array from a MemoryRegion.
const char & operator[](int index) const
Returns a reference to the byte at the index position.
SecureArray & operator=(const QByteArray &a)
Creates a copy, rather than references.
char & operator[](int index)
Returns a reference to the byte at the index position.
bool operator!=(const MemoryRegion &other) const
Inequality operator.
Definition qca_tools.h:516
SecureArray(const QByteArray &a)
Construct a secure byte array from a QByteArray.
SecureArray()
Construct a secure byte array, zero length.
char & at(int index)
Returns a reference to the byte at the index position.
char * data()
Pointer to the data in the secure array.
bool resize(int size)
Change the length of this array If the new length is less than the old length, the extra information ...
SecureArray(const SecureArray &from)
Construct a (shallow) copy of another secure byte array.
SecureArray(int size, char ch=0)
Construct a secure byte array of the specified length.
SecureArray(const char *str)
Construct a secure byte array from a string.
QByteArray toByteArray() const
Copy the contents of the secure array out to a standard QByteArray.
void fill(char fillChar, int fillToPosition=-1)
Fill the data array with a specified character.
bool isEmpty() const
Test if the array contains any bytes.
const char * constData() const
Pointer to the data in the secure array.
const char & at(int index) const
Returns a reference to the byte at the index position.
void set(const QByteArray &from)
Assign the contents of a provided byte array to this object.
void clear()
Clears the contents of the array and makes it empty.
SecureArray & operator+=(const SecureArray &a)
Append a secure byte array to the end of this array.
bool operator==(const MemoryRegion &other) const
Equality operator.
SecureArray & append(const SecureArray &a)
Append a secure byte array to the end of this array.
QCA - the Qt Cryptographic Architecture.
Definition qca_basic.h:41
QCA_EXPORT const SecureArray operator+(const SecureArray &a, const SecureArray &b)
Returns an array that is the result of concatenating a and b.
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_EXPORT void * qca_secure_alloc(int bytes)
Allocate a block of memory from the secure memory pool.
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.