KItinerary

dosipas2.cpp
1/*
2 SPDX-FileCopyrightText: 2025 Volker Krause <vkrause@kde.org>
3 SPDX-License-Identifier: LGPL-2.0-or-later
4*/
5
6#include "dosipas2.h"
7
8#include "dosipasfactory_p.h"
9#include "fcbreader_p.h"
10#include "logging.h"
11#include "asn1/uperdecoder.h"
12
13using namespace KItinerary;
14
15void Dosipas::v2::DataType::decode(UPERDecoder &decoder)
16{
17 decodeSequence(decoder);
18 dataFormat = decoder.readIA5String();
19 data = decoder.readOctetString();
20}
21
22QVariant Dosipas::v2::DataType::content() const
23{
24 return DosipasFactory::decodeDataType(*this);
25}
26
27std::optional<Fcb::UicRailTicketData> Dosipas::v2::DataType::fcb() const
28{
29 return DosipasFactory::decodeFcb(*this);
30}
31
32void Dosipas::v2::Level1DataType::decode(UPERDecoder &decoder)
33{
34 decodeSequence(decoder);
35 FCB_READ_INT_IA5_PAIR(securityProvider, 1, 32000);
36 FCB_READ_CONSTRAINED_INT(keyId, 0, 99999);
37 FCB_READ_SEQUENCE_OF_CUSTOM(dataSequence);
38 FCB_READ_OBJECT_IDENTIFIER(level1KeyAlg);
39 FCB_READ_OBJECT_IDENTIFIER(level2KeyAlg);
40 FCB_READ_OBJECT_IDENTIFIER(level1SigningAlg);
41 FCB_READ_OBJECT_IDENTIFIER(level2SigningAlg);
42 FCB_READ_OCTETSTRING(level2PublicKey);
43 FCB_READ_CONSTRAINED_INT(endOfValidityYear, 2016, 2269);
44 FCB_READ_CONSTRAINED_INT(endOfValidityDay, 1, 366);
45 FCB_READ_CONSTRAINED_INT(endOfValidityTime, 0, 1439);
46 FCB_READ_CONSTRAINED_INT(validityDuration, 1, 3600);
47}
48
49void Dosipas::v2::Level2DataType::decode(UPERDecoder &decoder)
50{
51 decodeSequence(decoder);
52 FCB_READ_CUSTOM(level1Data);
53 FCB_READ_OCTETSTRING(level1Signature);
54 FCB_READ_CUSTOM(level2Data);
55}
56
57void Dosipas::v2::UicBarcodeHeader::decode(UPERDecoder &decoder)
58{
59 decodeSequence(decoder);
60 FCB_READ_IA5STRING(format);
61 FCB_READ_CUSTOM(level2SignedData);
62 FCB_READ_OCTETSTRING(level2Signature);
63}
64
65Dosipas::v2::UicBarcodeHeader::UicBarcodeHeader() = default;
66
67Dosipas::v2::UicBarcodeHeader::UicBarcodeHeader(const QByteArray &data)
68 : m_data(data)
69{
70 UPERDecoder decoder(BitVectorView(std::string_view(data.constData(), data.size())));
71 decode(decoder);
72 if (decoder.hasError()) { // TODO check for data being completely consumed
73 qCWarning(Log) << decoder.errorMessage();
74 m_data.clear();
75 }
76 if (format != "U2") {
77 m_data.clear();
78 }
79}
80
81bool Dosipas::v2::UicBarcodeHeader::isValid() const
82{
83 return !m_data.isEmpty();
84}
85
86QByteArray Dosipas::v2::UicBarcodeHeader::rawData() const
87{
88 return m_data;
89}
90
91#include "moc_dosipas2.cpp"
Non-owning bit-level view for working with data that isn't byte-aligned.
Decoder for data encoded according to X.691 ASN.1 Unaligned Packed Encoding Rules (UPER).
Definition uperdecoder.h:17
QByteArray readOctetString()
Read unconstrained octet string (8 bit data).
bool hasError() const
Reading at any point encountered an error.
QByteArray readIA5String()
Read an unconstrained IA5String (7 bit ASCII).
Classes for reservation/travel data models, data extraction and data augmentation.
Definition berelement.h:17
void clear()
const char * constData() const const
qsizetype size() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Mar 28 2025 11:59:49 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.