Ich bin neu in der Arbeit mit ASN.1 kodierten Streams und es fällt mir schwer einen freien Klassencompiler und -decoder zu finden, vorzugsweise für Java.Opensource Java ASN.1 Decoder, der mit automatischen Tags arbeitet
Ich habe einen codierten Hex-String:
String test("30820274800200a2810105820410300c3d830401bb0afc84...
Hier ist ein Beispiel für die Notation:
SEMI DEFINITIONS AUTOMATIC TAGS ::= BEGIN
IntersectionSituationData ::= SEQUENCE {
dialogID SemiDialogID, -- 0xA2
seqID SemiSequenceID, -- 0x05 Data
groupID GroupID,
-- Some more members
}
SemiDialogID ::= ENUMERATED {
intersectionSitDataDep (162), -- 0xA2
-- additional DialogIDs
}
SemiSequenceID ::= ENUMERATED {
data (5), -- Data
-- additional SeqIDs
}
Ich begann JAC mit: https://sourceforge.net/projects/jac-asn1/ Aber es spielt keine automatische Tags unterstützen.
Ich versuchte als nächstes jASN1: https://www.openmuc.org/asn1/ Es sagt nicht, ob es automatische Tags unterstützt oder nicht. Es scheint, die Notation ohne Beschwerde zu kompilieren, aber ich kann es nicht richtig dekodieren und es sieht aus wie die Markierung, wenn falsch.
Wenn wir den Beginn des kodierten String nehmen: 82 02 74 30 80 02 00 a2 ... Das ist mein Verständnis:
30 = Sequence
82 = Length encoded in 2 octets
02 74 = Length = 2x256 + 7x16 +4 == 638 bytes, correct
80 ?? is this a result of automatic encoding? x80= 128= 8th bit set = context-specific class, number 0?
02 = length of value is 2 octets
00 a2 is value == xA2 as expected from SemiDialogID
Aber wenn ich einen Test von "IntersectionSituationData" kodieren ich das Folgende: 30 81 8a 0a 02 00 a2 dh der Typ ist 'x0a' == 10 das ist ASN.1 Universal ENUMERATED. Das macht Sinn, wenn man auf die Benachrichtigung schaut, aber ich vermute, dass automatische Tags von jASN1 ignoriert werden. Wenn ich die generierten Java-Klassen betrachten, sehen wir SemiDialogID BerEnum erstreckt, die Universal-cla Kennung verwendet:
// SemiDialogID.java
public class SemiDialogID extends BerEnum {
...
}
//BerEnum.java
public class BerEnum extends BerInteger {
public final static BerIdentifier identifier = new BerIdentifier(BerIdentifier.UNIVERSAL_CLASS,
BerIdentifier.PRIMITIVE, BerIdentifier.ENUMERATED_TAG);
Gibt es etwas, was ich tun müssen, um bekommen jASN1 mit automatischer Tags zu arbeiten oder muss ich eine andere Bibliothek? Wenn Letzteres, was empfehlen die Leute? Idealerweise suche ich nach einer Open-Source-Java-Lösung, die einfach zu bedienen ist. Ich denke, ich könnte mit einer C-Lösung auskommen und JNI verwenden, um es zum Laufen zu bringen.