27 namespace relpipe { |
27 namespace relpipe { |
28 namespace in { |
28 namespace in { |
29 namespace asn1 { |
29 namespace asn1 { |
30 namespace lib { |
30 namespace lib { |
31 |
31 |
|
32 namespace UniversalType { |
|
33 static const uint64_t EndOfContent = 0x00; |
|
34 static const uint64_t Boolean = 0x01; |
|
35 static const uint64_t Integer = 0x02; |
|
36 static const uint64_t BitString = 0x03; |
|
37 static const uint64_t OctetString = 0x04; |
|
38 static const uint64_t Null = 0x05; |
|
39 static const uint64_t ObjectIdentifier = 0x06; |
|
40 static const uint64_t ObjectDescriptor = 0x07; |
|
41 static const uint64_t External = 0x08; |
|
42 static const uint64_t Real = 0x09; |
|
43 static const uint64_t Enumerated = 0xA; |
|
44 static const uint64_t Embedded = 0xB; |
|
45 static const uint64_t UTF8String = 0xC; |
|
46 static const uint64_t RelativeObjectIdentifier = 0xD; |
|
47 static const uint64_t Time = 0xE; |
|
48 static const uint64_t Reserved = 0xF; |
|
49 static const uint64_t Sequence = 0x10; |
|
50 static const uint64_t Set = 0x11; |
|
51 static const uint64_t NumericString = 0x12; |
|
52 static const uint64_t PrintableString = 0x13; |
|
53 static const uint64_t T61String = 0x14; |
|
54 static const uint64_t VideotexString = 0x15; |
|
55 static const uint64_t IA5String = 0x16; |
|
56 static const uint64_t UTCTime = 0x17; |
|
57 static const uint64_t GeneralizedTime = 0x18; |
|
58 static const uint64_t GraphicString = 0x19; |
|
59 static const uint64_t VisibleString = 0x1A; |
|
60 static const uint64_t GeneralString = 0x1B; |
|
61 static const uint64_t UniversalString = 0x1C; |
|
62 static const uint64_t CharacterString = 0x1D; |
|
63 static const uint64_t BMPString = 0x1E; |
|
64 static const uint64_t Date = 0x1F; |
|
65 static const uint64_t TimeOfDay = 0x20; |
|
66 static const uint64_t DateTime = 0x21; |
|
67 static const uint64_t Duration = 0x22; |
|
68 static const uint64_t ObjectIdentifierIRI = 0x23; |
|
69 static const uint64_t RelativeObjectIdentifierIRI = 0x24; |
|
70 } |
|
71 |
32 class ASN1ContentHandler { |
72 class ASN1ContentHandler { |
33 public: |
73 public: |
34 |
74 |
35 enum class TagClass : uint8_t { |
75 enum class TagClass : uint8_t { |
36 Universal = 0, |
76 Universal = 0, |
251 // TODO: support also extension extractor plug-ins? (could decode some opaque structures like octet strings and replace them with nested elements) e.g. subjectAltName in https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.6 |
288 // TODO: support also extension extractor plug-ins? (could decode some opaque structures like octet strings and replace them with nested elements) e.g. subjectAltName in https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.6 |
252 |
289 |
253 virtual void writeStreamStart() = 0; |
290 virtual void writeStreamStart() = 0; |
254 virtual void writeStreamEnd() = 0; |
291 virtual void writeStreamEnd() = 0; |
255 |
292 |
256 virtual void writeCollectionStart(CollectionType type) = 0; |
293 virtual void writeCollectionStart(const Header& header) = 0; |
257 virtual void writeCollectionEnd() = 0; |
294 virtual void writeCollectionEnd() = 0; |
258 virtual void writeBoolean(bool value) = 0; |
295 virtual void writeBoolean(bool value) = 0; |
259 virtual void writeNull() = 0; |
296 virtual void writeNull() = 0; |
260 virtual void writeInteger(Integer value) = 0; |
297 virtual void writeInteger(Integer value) = 0; |
261 /** |
298 /** |
298 |
335 |
299 void writeStreamEnd() override { |
336 void writeStreamEnd() override { |
300 handlers.forward(&ASN1ContentHandler::writeStreamEnd); |
337 handlers.forward(&ASN1ContentHandler::writeStreamEnd); |
301 } |
338 } |
302 |
339 |
303 void writeCollectionStart(CollectionType type) override { |
340 void writeCollectionStart(const Header& header) override { |
304 handlers.forward(&ASN1ContentHandler::writeCollectionStart, type); |
341 handlers.forward(&ASN1ContentHandler::writeCollectionStart, header); |
305 } |
342 } |
306 |
343 |
307 void writeCollectionEnd() override { |
344 void writeCollectionEnd() override { |
308 handlers.forward(&ASN1ContentHandler::writeCollectionEnd); |
345 handlers.forward(&ASN1ContentHandler::writeCollectionEnd); |
309 } |
346 } |