PxCrypt v0.2.2
Encrypt data within an image
Loading...
Searching...
No Matches
multi_encoder.h
1#ifndef MULTI_ENCODER_H
2#define MULTI_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 MultiEncoderPrivate;
20
21class PXCRYPT_CODEC_EXPORT MultiEncoder final : public Encoder
22{
23 Q_DECLARE_PRIVATE(MultiEncoder);
24//-Inner Classes----------------------------------------------------------------------------------------------
25public:
26 class Error;
27
28//-Constructor---------------------------------------------------------------------------------------------------
29public:
31
32//-Class Functions----------------------------------------------------------------------------------------------
33public:
34 static quint64 calculateMaximumPayload(const QList<QSize>& dims, quint16 tagSize, quint8 bpc);
35 static quint8 calculateOptimalDensity(const QList<QSize>& dims, quint16 tagSize, quint32 payloadSize);
36
37//-Instance Functions----------------------------------------------------------------------------------------------
38public:
39 QString tag() const;
40
41 void setTag(const QByteArray& tag);
42
43 Error encode(QList<QImage>& encoded, QByteArrayView payload, const QList<QImage>& mediums);
44};
45
46class PXCRYPT_CODEC_EXPORT QX_ERROR_TYPE(MultiEncoder::Error, "PxCrypt::MultiEncoder::Error", 6979)
47{
48//-Class Enums-------------------------------------------------------------
49public:
60
61//-Class Variables-------------------------------------------------------------
62private:
63 static inline const QString PREFIX_STRING = u"Encoding failed."_s;
64 static inline const QHash<Type, QString> ERR_STRINGS{
65 {NoError, u""_s},
66 {MissingPayload, u"No payload data was provided."_s},
67 {MissingMediums, u"No mediums were provided."_s},
68 {InvalidImage, u"A medium is invalid."_s},
69 {WontFit, u"A medium's dimensions are not large enough to fit the payload."_s},
70 {InvalidBpc, u"Bits-per-channel must be between 1 and 7."_s},
71 {WeaveFailed, u"There was an error while weaving data."_s}
72 };
73 //FIX ME: Make correct
74
75//-Instance Variables-------------------------------------------------------------
76private:
77 Type mType;
78 QString mSpecific;
79 qsizetype mImageIndex;
80
81//-Constructor-------------------------------------------------------------
82public:
83 Error(Type t = NoError, qsizetype idx = -1, const QString& s = {});
84
85//-Instance Functions-------------------------------------------------------------
86public:
87 bool isValid() const;
88 Type type() const;
89 qsizetype imageIndex() const;
90 QString specific() const;
91 QString errorString() const;
92
93private:
94 quint32 deriveValue() const override;
95 QString derivePrimary() const override;
96 QString deriveSecondary() const override;
97};
98
99}
100
101#endif // MULTI_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 MultiEncoder::Error class is used to report errors during multi-image encoding.
Definition multi_encoder.h:47
Type
Definition multi_encoder.h:51
@ NoError
Definition multi_encoder.h:52
@ MissingPayload
Definition multi_encoder.h:53
@ WontFit
Definition multi_encoder.h:56
@ MissingMediums
Definition multi_encoder.h:54
@ InvalidImage
Definition multi_encoder.h:55
@ InvalidBpc
Definition multi_encoder.h:57
The MultiEncoder class encodes a payload and identifying tag into a single image.
Definition multi_encoder.h:22
The PxCrypt namespace is the main namespace through which all functionality of the PxCrypt library is...
Definition decoder.cpp:6