Index: third_party/google-endpoints/pyasn1/codec/der/encoder.py |
diff --git a/third_party/google-endpoints/pyasn1/codec/der/encoder.py b/third_party/google-endpoints/pyasn1/codec/der/encoder.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7f55eeb9d36df1a2b43d7dff13a9a4bf42318c69 |
--- /dev/null |
+++ b/third_party/google-endpoints/pyasn1/codec/der/encoder.py |
@@ -0,0 +1,32 @@ |
+# DER encoder |
+from pyasn1.type import univ |
+from pyasn1.codec.cer import encoder |
+from pyasn1 import error |
+ |
+class SetOfEncoder(encoder.SetOfEncoder): |
+ def _cmpSetComponents(self, c1, c2): |
+ tagSet1 = isinstance(c1, univ.Choice) and \ |
+ c1.getEffectiveTagSet() or c1.getTagSet() |
+ tagSet2 = isinstance(c2, univ.Choice) and \ |
+ c2.getEffectiveTagSet() or c2.getTagSet() |
+ return cmp(tagSet1, tagSet2) |
+ |
+tagMap = encoder.tagMap.copy() |
+tagMap.update({ |
+ # Overload CER encoders with BER ones (a bit hackerish XXX) |
+ univ.BitString.tagSet: encoder.encoder.BitStringEncoder(), |
+ univ.OctetString.tagSet: encoder.encoder.OctetStringEncoder(), |
+ # Set & SetOf have same tags |
+ univ.SetOf().tagSet: SetOfEncoder() |
+}) |
+ |
+typeMap = encoder.typeMap |
+ |
+class Encoder(encoder.Encoder): |
+ supportIndefLength = False |
+ def __call__(self, client, defMode=True, maxChunkSize=0): |
+ if not defMode: |
+ raise error.PyAsn1Error('DER forbids indefinite length mode') |
+ return encoder.Encoder.__call__(self, client, defMode, maxChunkSize) |
+ |
+encode = Encoder(tagMap, typeMap) |