PxCrypt v0.2.2
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
The MultiDecoder::Error class is used to report errors during multi-image decoding.
Definition multi_decoder.h:39
The StandardEncoder::Error class is used to report errors during single image encoding.
Definition standard_encoder.h:47
Type
Definition standard_encoder.h:51
@ NoError
Definition standard_encoder.h:52
@ InvalidImage
Definition standard_encoder.h:54
@ InvalidBpc
Definition standard_encoder.h:56
@ WontFit
Definition standard_encoder.h:55
@ MissingPayload
Definition standard_encoder.h:53
The StandardEncoder class encodes a payload and identifying tag into a single image.
Definition standard_encoder.h:22
The PxCrypt namespace is the main namespace through which all functionality of the PxCrypt library is...
Definition decoder.cpp:6