PxCrypt v0.2.3
Encrypt data within an image
Loading...
Searching...
No Matches
standard_encoder.h
1#ifndef STANDARD_ENCODER_H
2#define STANDARD_ENCODER_H
3
4// Shared Library Support
5#include "pxcrypt/pxcrypt_codec_export.h"
6
7// Qt Includes
8#include <QImage>
9
10// Qx Includes
11#include <qx/core/qx-abstracterror.h>
12
13// Project Includes
14#include "pxcrypt/codec/encoder.h"
15
16namespace PxCrypt
17{
18
19class StandardEncoderPrivate;
20
21class PXCRYPT_CODEC_EXPORT StandardEncoder final : public Encoder
22{
23 Q_DECLARE_PRIVATE(StandardEncoder);
24//-Inner Classes----------------------------------------------------------------------------------------------
25public:
26 class Error;
27
28//-Constructor---------------------------------------------------------------------------------------------------
29public:
31
32//-Class Functions----------------------------------------------------------------------------------------------
33public:
34 static quint64 calculateMaximumPayload(const QSize& dim, quint16 tagSize, quint8 bpc);
35 static quint8 calculateOptimalDensity(const QSize& dim, quint16 tagSize, quint32 payloadSize);
36
37//-Instance Functions----------------------------------------------------------------------------------------------
38public:
39 QString tag() const;
40
41 void setTag(const QByteArray& tag);
42
43 Error encode(QImage& encoded, QByteArrayView payload, const QImage& medium);
44};
45
46class PXCRYPT_CODEC_EXPORT QX_ERROR_TYPE(StandardEncoder::Error, "PxCrypt::StandardEncoder::Error", 6978)
47{
48//-Class Enums-------------------------------------------------------------
49public:
59
60//-Class Variables-------------------------------------------------------------
61private:
62 static inline const QString PREFIX_STRING = u"Encoding failed."_s;
63 static inline const QHash<Type, QString> ERR_STRINGS{
64 {NoError, u""_s},
65 {MissingPayload, u"No payload data was provided."_s},
66 {InvalidImage, u"The medium is invalid."_s},
67 {WontFit, u"The medium's dimensions are not large enough to fit the payload."_s},
68 {InvalidBpc, u"Bits-per-channel must be between 1 and 7."_s},
69 {WeaveFailed, u"There was an error while weaving data."_s}
70 };
71
72//-Instance Variables-------------------------------------------------------------
73private:
74 Type mType;
75 QString mSpecific;
76
77//-Constructor-------------------------------------------------------------
78public:
79 Error(Type t = NoError, const QString& s = {});
80
81//-Instance Functions-------------------------------------------------------------
82public:
83 bool isValid() const;
84 Type type() const;
85 QString specific() const;
86 QString errorString() const;
87
88private:
89 quint32 deriveValue() const override;
90 QString derivePrimary() const override;
91 QString deriveSecondary() const override;
92};
93
94}
95
96#endif // STANDARD_ENCODER_H
The Encoder class is a base class from which all PxCrypt encoders derive in order to provide serializ...
Definition encoder.h:17
quint8 bpc() const
Definition encoder.cpp:131
The StandardEncoder::Error class is used to report errors during single image encoding.
Definition standard_encoder.h:47
Error(Type t=NoError, const QString &s={})
Definition standard_encoder.cpp:269
Type
Definition standard_encoder.h:51
@ InvalidBpc
Definition standard_encoder.h:56
@ MissingPayload
Definition standard_encoder.h:53
@ NoError
Definition standard_encoder.h:52
@ WontFit
Definition standard_encoder.h:55
@ WeaveFailed
Definition standard_encoder.h:57
@ InvalidImage
Definition standard_encoder.h:54
StandardEncoder()
Definition standard_encoder.cpp:79
QString tag() const
Definition standard_encoder.cpp:118
static quint8 calculateOptimalDensity(const QSize &dim, quint16 tagSize, quint32 payloadSize)
Definition standard_encoder.cpp:105
void setTag(const QByteArray &tag)
Definition standard_encoder.cpp:131
Error encode(QImage &encoded, QByteArrayView payload, const QImage &medium)
Definition standard_encoder.cpp:160
static quint64 calculateMaximumPayload(const QSize &dim, quint16 tagSize, quint8 bpc)
Definition standard_encoder.cpp:89
The PxCrypt namespace is the main namespace through which all functionality of the PxCrypt library is...
Definition decoder.cpp:6