KItinerary

dosipas1.cpp
1/*
2 SPDX-FileCopyrightText: 2025 Volker Krause <vkrause@kde.org>
3 SPDX-License-Identifier: LGPL-2.0-or-later
4*/
5
6#include "dosipas1.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::v1::DataType::decode(UPERDecoder &decoder)
16{
17 decodeSequence(decoder);
18 dataFormat = decoder.readIA5String();
19 data = decoder.readOctetString();
20}
21
22QVariant Dosipas::v1::DataType::content() const
23{
24 return DosipasFactory::decodeDataType(*this);
25}
26
27std::optional<Fcb::UicRailTicketData> Dosipas::v1::DataType::fcb() const
28{
29 return DosipasFactory::decodeFcb(*this);
30}
31
32void Dosipas::v1::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}
44
45void Dosipas::v1::Level2DataType::decode(UPERDecoder &decoder)
46{
47 decodeSequence(decoder);
48 FCB_READ_CUSTOM(level1Data);
49 FCB_READ_OCTETSTRING(level1Signature);
50 FCB_READ_CUSTOM(level2Data);
51}
52
53void Dosipas::v1::UicBarcodeHeader::decode(UPERDecoder &decoder)
54{
55 decodeSequence(decoder);
56 FCB_READ_IA5STRING(format);
57 FCB_READ_CUSTOM(level2SignedData);
58 FCB_READ_OCTETSTRING(level2Signature);
59}
60
61Dosipas::v1::UicBarcodeHeader::UicBarcodeHeader() = default;
62
63Dosipas::v1::UicBarcodeHeader::UicBarcodeHeader(const QByteArray &data)
64 : m_data(data)
65{
66 UPERDecoder decoder(BitVectorView(std::string_view(data.constData(), data.size())));
67 decode(decoder);
68 if (decoder.hasError()) { // TODO check for data being completely consumed
69 qCWarning(Log) << decoder.errorMessage();
70 m_data.clear();
71 }
72 if (format != "U1") {
73 m_data.clear();
74 }
75}
76
77bool Dosipas::v1::UicBarcodeHeader::isValid() const
78{
79 return !m_data.isEmpty();
80}
81
82QByteArray Dosipas::v1::UicBarcodeHeader::rawData() const
83{
84 return m_data;
85}
86
87#include "moc_dosipas1.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.