Index: third_party/gsutil/third_party/pyasn1/pyasn1/codec/cer/decoder.py |
diff --git a/third_party/gsutil/third_party/pyasn1/pyasn1/codec/cer/decoder.py b/third_party/gsutil/third_party/pyasn1/pyasn1/codec/cer/decoder.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9fd37c1347397f81a9ecb8d382dbac5f8dd69884 |
--- /dev/null |
+++ b/third_party/gsutil/third_party/pyasn1/pyasn1/codec/cer/decoder.py |
@@ -0,0 +1,35 @@ |
+# CER decoder |
+from pyasn1.type import univ |
+from pyasn1.codec.ber import decoder |
+from pyasn1.compat.octets import oct2int |
+from pyasn1 import error |
+ |
+class BooleanDecoder(decoder.AbstractSimpleDecoder): |
+ protoComponent = univ.Boolean(0) |
+ def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, length, |
+ state, decodeFun, substrateFun): |
+ head, tail = substrate[:length], substrate[length:] |
+ if not head: |
+ raise error.PyAsn1Error('Empty substrate') |
+ byte = oct2int(head[0]) |
+ # CER/DER specifies encoding of TRUE as 0xFF and FALSE as 0x0, while |
+ # BER allows any non-zero value as TRUE; cf. sections 8.2.2. and 11.1 |
+ # in http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf |
+ if byte == 0xff: |
+ value = 1 |
+ elif byte == 0x00: |
+ value = 0 |
+ else: |
+ raise error.PyAsn1Error('Boolean CER violation: %s' % byte) |
+ return self._createComponent(asn1Spec, tagSet, value), tail |
+ |
+tagMap = decoder.tagMap.copy() |
+tagMap.update({ |
+ univ.Boolean.tagSet: BooleanDecoder() |
+ }) |
+ |
+typeMap = decoder.typeMap |
+ |
+class Decoder(decoder.Decoder): pass |
+ |
+decode = Decoder(tagMap, decoder.typeMap) |