Enrollment 28.2.0
Loading...
Searching...
No Matches
ISOCCTemplateAdapter.h
Go to the documentation of this file.
1
9
10#pragma once
11
22#include <climits>
23#include <optional>
24
25namespace inno
26{
33 {
34 public:
35 /// Defines sort order of minutiae points in ISO CC template
36 enum class MinutiaSortOrder : uint8_t
37 {
41 NONE = 0,
45 X_ASC = 1,
49 X_DESC = 2,
53 Y_ASC = 3,
57 Y_DESC = 4
58 };
59
65 */
66 [[nodiscard]] ISOCCTemplate Adapt(const ANSITemplate& tmpl) const
67 {
68 return ConvertFrom(PrintExecutor::INNO_ANSI_TEMPLATE, tmpl.data, tmpl);
69 }
75 */
76 [[nodiscard]] ISOCCTemplate Adapt(const ILOSIDTemplate& tmpl) const
77 {
78 return ConvertFrom(PrintExecutor::INNO_ILO_SID_TEMPLATE, tmpl.GetData(), tmpl);
79 }
85 */
86 [[nodiscard]] ISOCCTemplate Adapt(const ISONCTemplate& tmpl) const
87 {
88 return ConvertFrom(PrintExecutor::INNO_ISO_NC_TEMPLATE, tmpl.GetData(), tmpl);
89 }
97 */
98 [[nodiscard]] ISOCCTemplate Adapt(const ISOCCTemplate& tmpl) const
99 {
100 if (!maxMinutiaeCount.has_value())
101 {
102 return tmpl;
103 }
104 return ConvertFrom(PrintExecutor::INNO_ISO_CC_TEMPLATE, tmpl.GetData(), tmpl);
105 }
111 */
112 [[nodiscard]] ISOCCTemplate Adapt(const ISOTemplate& tmpl) const
113 {
114 return ConvertFrom(PrintExecutor::INNO_ISO_TEMPLATE, tmpl.data, tmpl);
115 }
121 */
122 [[nodiscard]] ISOCCTemplate Adapt(const ICSTemplate& tmpl) const
123 {
124 return ConvertFrom(PrintExecutor::INNO_TT_UNKNOWN_TYPE, tmpl.icsTemplateData, tmpl);
125 }
131 */
132 [[nodiscard]] ISOCCTemplate Adapt(const ExtractedPrint& tmpl) const
133 {
134 return ConvertFrom(PrintExecutor::INNO_TT_UNKNOWN_TYPE, tmpl.icsTemplateData, tmpl);
135 }
141 */
142 [[nodiscard]] ISOCCTemplate Adapt(const PrintTemplate& tmpl) const
143 {
144 return ConvertFrom(PrintExecutor::INNO_TT_UNKNOWN_TYPE, tmpl.GetICSRepresentation()->icsTemplateData, tmpl);
145 }
146
150 */
152 : exec(GlobalPrintExecutor::Get())
153 {
154 }
165 */
166 ISOCCTemplateAdapter(int maximumMinutiaeCount,
167 MinutiaSortOrder primarySortOrder,
168 MinutiaSortOrder secondarySortOrder)
169 : exec(GlobalPrintExecutor::Get())
170 , primaryOrder(primarySortOrder)
171 , secondaryOrder(secondarySortOrder)
172 , maxMinutiaeCount(maximumMinutiaeCount)
173 {
174 }
179 */
180 explicit ISOCCTemplateAdapter(std::shared_ptr<PrintExecutor> executor)
181 : exec(std::move(executor))
182 {
183 if (exec == nullptr)
184 {
185 throw NullArgumentException("Print executor cannot be null in ISOCCTemplateAdapter");
186 }
187 }
188
200 */
201 ISOCCTemplateAdapter(std::shared_ptr<PrintExecutor> executor,
202 int maximumMinutiaeCount,
203 MinutiaSortOrder primarySortOrder,
204 MinutiaSortOrder secondarySortOrder)
205 : exec(std::move(executor))
206 , primaryOrder(primarySortOrder)
207 , secondaryOrder(secondarySortOrder)
208 , maxMinutiaeCount(maximumMinutiaeCount)
209 {
210 if (exec == nullptr)
211 {
212 throw NullArgumentException("Print executor cannot be null in ISOCCTemplateAdapter");
213 }
214 }
215
216 private:
217 std::shared_ptr<PrintExecutor> exec;
218 std::optional<MinutiaSortOrder> primaryOrder;
219 std::optional<MinutiaSortOrder> secondaryOrder;
220 std::optional<int> maxMinutiaeCount;
221
222 template<typename TemplateType>
223 [[nodiscard]] ISOCCTemplate ConvertFrom(uint8_t templateType,
224 const std::vector<uint8_t>& input,
225 const TemplateType& tmpl) const
226 {
227 if (maxMinutiaeCount.has_value())
228 {
230 auto iso = isoAdapter.Adapt(tmpl);
231 auto limitedIsoccData = LimitIsoTemplate(iso.data);
232 return ISOCCTemplate(std::move(limitedIsoccData));
233 }
234
235 return ISOCCTemplate(ConvertData(templateType, input));
236 }
237
238 [[nodiscard]] std::vector<uint8_t> ConvertData(uint8_t templateType, const std::vector<uint8_t>& input) const
239 {
240 std::vector<uint8_t> data;
241 auto tmplAllocator = +[](void* container, size_t length) -> uint8_t*
242 {
243 // It is "safe" cast because we forward pointer to vector created in "user cpp space"
244 // (the space where this header is compiled) and the "own cpp space" (out compiled shared library)
245 // wil provide it back for us to the same "user cpp space". We have all spaces under control.
246 // It is used to do not have unecessary copy data from "own cpp space" into "user cpp space".
247 std::vector<uint8_t>& vec = *static_cast<std::vector<uint8_t>*>(container);
248 vec.resize(length);
249 return vec.data();
250 };
251 exec->ConvertTemplates(templateType,
252 input.data(),
253 input.size(),
254 PrintExecutor::INNO_ISO_CC_TEMPLATE,
255 tmplAllocator,
256 &data,
257 ThrowOnError{});
258
259 return data;
260 }
261
262 [[nodiscard]] std::vector<uint8_t> LimitIsoTemplate(const std::vector<uint8_t>& input) const
263 {
264 std::vector<uint8_t> data;
265 auto tmplAllocator = +[](void* container, size_t length) -> uint8_t*
266 {
267 // It is "safe" cast because we forward pointer to vector created in "user cpp space"
268 // (the space where this header is compiled) and the "own cpp space" (out compiled shared library)
269 // wil provide it back for us to the same "user cpp space". We have all spaces under control.
270 // It is used to do not have unecessary copy data from "own cpp space" into "user cpp space".
271 std::vector<uint8_t>& vec = *static_cast<std::vector<uint8_t>*>(container);
272 vec.resize(length);
273 return vec.data();
274 };
275
276 exec->ConvertIsoToIsoCCTemplate(
277 input.data(),
278 input.size(),
279 maxMinutiaeCount.value_or(INT_MAX),
280 static_cast<uint8_t>(primaryOrder.value_or(ISOCCTemplateAdapter::MinutiaSortOrder::NONE)),
281 static_cast<uint8_t>(secondaryOrder.value_or(ISOCCTemplateAdapter::MinutiaSortOrder::NONE)),
282 tmplAllocator,
283 &data,
284 ThrowOnError{});
285
286 return data;
287 }
288 };
289} // namespace inno
ANSI INCITS 378 print compliant template.
Definition ANSITemplate.h:28
const std::vector< uint8_t > data
Template data.
Definition ANSITemplate.h:31
Print template in ICS format used for biometric operations with Print that was extracted.
Definition ExtractedPrint.h:36
Holds instance of PrintExecutor.
Definition PrintExecutor.h:1300
Print template in ICS format used for biometric operations.
Definition ICSTemplate.h:41
const std::vector< uint8_t > icsTemplateData
template data
Definition ICSTemplate.h:44
International Labour Organisation Seafarers Identity Document template.
Definition ILOSIDTemplate.h:24
std::vector< uint8_t > GetData() const
Provides template data.
Definition ILOSIDTemplate.h:30
ISOCCTemplateAdapter(std::shared_ptr< PrintExecutor > executor)
Creates ISOCCTemplateAdapter object.
Definition ISOCCTemplateAdapter.h:179
ISOCCTemplate Adapt(const ISONCTemplate &tmpl) const
Adapts ISONCTemplate to ISOCCTemplate.
Definition ISOCCTemplateAdapter.h:85
ISOCCTemplateAdapter(int maximumMinutiaeCount, MinutiaSortOrder primarySortOrder, MinutiaSortOrder secondarySortOrder)
Creates ISOCCTemplateAdapter object with minutiae modifications.
Definition ISOCCTemplateAdapter.h:165
ISOCCTemplate Adapt(const ISOTemplate &tmpl) const
Adapts ISOTemplate to ISOCCTemplate.
Definition ISOCCTemplateAdapter.h:111
ISOCCTemplate Adapt(const ExtractedPrint &tmpl) const
Adapts ExtractedPrint to ISOCCTemplate.
Definition ISOCCTemplateAdapter.h:131
ISOCCTemplate Adapt(const PrintTemplate &tmpl) const
Adapts PrintTemplate to ISOCCTemplate.
Definition ISOCCTemplateAdapter.h:141
ISOCCTemplate Adapt(const ISOCCTemplate &tmpl) const
Adapts ISOCCTemplate to ISOCCTemplate.
Definition ISOCCTemplateAdapter.h:97
ISOCCTemplateAdapter()
Creates ISOCCTemplateAdapter object with GlobalPrintExecutor used to execute template functionality.
Definition ISOCCTemplateAdapter.h:150
ISOCCTemplate Adapt(const ILOSIDTemplate &tmpl) const
Adapts ILOSIDTemplate to ISOCCTemplate.
Definition ISOCCTemplateAdapter.h:75
ISOCCTemplate Adapt(const ICSTemplate &tmpl) const
Adapts ICSTemplate to ISOCCTemplate.
Definition ISOCCTemplateAdapter.h:121
ISOCCTemplateAdapter(std::shared_ptr< PrintExecutor > executor, int maximumMinutiaeCount, MinutiaSortOrder primarySortOrder, MinutiaSortOrder secondarySortOrder)
Creates ISOCCTemplateAdapter object with minutiae limitations and given PrintExecutor.
Definition ISOCCTemplateAdapter.h:200
MinutiaSortOrder
Defines sort order of minutiae points in ISO CC template.
Definition ISOCCTemplateAdapter.h:36
@ Y_ASC
Cartesian y-coordinate is used for ordering, ascending order.
Definition ISOCCTemplateAdapter.h:52
@ Y_DESC
Cartesian y-coordinate is used for ordering, descending order.
Definition ISOCCTemplateAdapter.h:56
@ X_DESC
Cartesian x-coordinate is used for ordering, descending order.
Definition ISOCCTemplateAdapter.h:48
@ NONE
No ordering required.
Definition ISOCCTemplateAdapter.h:40
@ X_ASC
Cartesian x-coordinate is used for ordering, ascending order.
Definition ISOCCTemplateAdapter.h:44
ISOCCTemplate Adapt(const ANSITemplate &tmpl) const
Adapts ANSITemplate to ISOCCTemplate.
Definition ISOCCTemplateAdapter.h:65
ISO/IEC 19794-2:2005 template, template version 2.0, 3-byte format for minutiae (compact card encodin...
Definition ISOCCTemplate.h:22
std::vector< uint8_t > GetData() const
Provides template data.
Definition ISOCCTemplate.h:28
ISO/IEC 19794-2:2005 template, template version 2.0, 5-byte format for minutiae (normal card encoding...
Definition ISONCTemplate.h:22
std::vector< uint8_t > GetData() const
Provides template data.
Definition ISONCTemplate.h:28
Adapts Template to ISOTemplate.
Definition ISOTemplateAdapter.h:29
@ VERSION_2
ISO/IEC 19794-2:2005 template, template version 2.0, 6-byte format for minutiae.
Definition ISOTemplateAdapter.h:35
ISO/IEC 19794-2 print compliant template.
Definition ISOTemplate.h:28
const std::vector< uint8_t > data
Template data.
Definition ISOTemplate.h:31
Null argument is not allowed.
Definition EnrollmentException.h:156
Holds various biometric representation types for print.
Definition PrintTemplate.h:26
std::shared_ptr< ICSTemplate > GetICSRepresentation() const
Provides ICS (Innovatrics proprietary extracted template) representation of print.
Definition PrintTemplate.h:72