summaryrefslogtreecommitdiff
path: root/pyasn1/codec
diff options
context:
space:
mode:
authorIlya Etingof <etingof@gmail.com>2018-06-30 23:48:13 +0200
committerGitHub <noreply@github.com>2018-06-30 23:48:13 +0200
commit271f71af5a7245a7cf7565ee40bb5a272c2dc9f1 (patch)
treef1311e22012e9fe20bfdfb3e934b338e4000f3be /pyasn1/codec
parentd5327005dabb1689c9af5124d7cf9fcdf16b1446 (diff)
downloadpyasn1-git-271f71af5a7245a7cf7565ee40bb5a272c2dc9f1.tar.gz
Fix native encoder type map (#132)
The type map should include all ASN.1 types rather than just ambiguous ones for performance reasons. Incomplete type ID map triggers building a new TagSet out of the value being encoded. If that value does not have base tags set, that leads to a crash.
Diffstat (limited to 'pyasn1/codec')
-rw-r--r--pyasn1/codec/native/encoder.py30
1 files changed, 28 insertions, 2 deletions
diff --git a/pyasn1/codec/native/encoder.py b/pyasn1/codec/native/encoder.py
index 87e50f2..0956191 100644
--- a/pyasn1/codec/native/encoder.py
+++ b/pyasn1/codec/native/encoder.py
@@ -132,14 +132,40 @@ tagMap = {
useful.UTCTime.tagSet: OctetStringEncoder()
}
-# Type-to-codec map for ambiguous ASN.1 types
+
+# Put in ambiguous & non-ambiguous types for faster codec lookup
typeMap = {
+ univ.Boolean.typeId: BooleanEncoder(),
+ univ.Integer.typeId: IntegerEncoder(),
+ univ.BitString.typeId: BitStringEncoder(),
+ univ.OctetString.typeId: OctetStringEncoder(),
+ univ.Null.typeId: NullEncoder(),
+ univ.ObjectIdentifier.typeId: ObjectIdentifierEncoder(),
+ univ.Enumerated.typeId: IntegerEncoder(),
+ univ.Real.typeId: RealEncoder(),
+ # Sequence & Set have same tags as SequenceOf & SetOf
univ.Set.typeId: SetEncoder(),
univ.SetOf.typeId: SequenceOfEncoder(),
univ.Sequence.typeId: SequenceEncoder(),
univ.SequenceOf.typeId: SequenceOfEncoder(),
univ.Choice.typeId: ChoiceEncoder(),
- univ.Any.typeId: AnyEncoder()
+ univ.Any.typeId: AnyEncoder(),
+ # character string types
+ char.UTF8String.typeId: OctetStringEncoder(),
+ char.NumericString.typeId: OctetStringEncoder(),
+ char.PrintableString.typeId: OctetStringEncoder(),
+ char.TeletexString.typeId: OctetStringEncoder(),
+ char.VideotexString.typeId: OctetStringEncoder(),
+ char.IA5String.typeId: OctetStringEncoder(),
+ char.GraphicString.typeId: OctetStringEncoder(),
+ char.VisibleString.typeId: OctetStringEncoder(),
+ char.GeneralString.typeId: OctetStringEncoder(),
+ char.UniversalString.typeId: OctetStringEncoder(),
+ char.BMPString.typeId: OctetStringEncoder(),
+ # useful types
+ useful.ObjectDescriptor.typeId: OctetStringEncoder(),
+ useful.GeneralizedTime.typeId: OctetStringEncoder(),
+ useful.UTCTime.typeId: OctetStringEncoder()
}