From ddb52ae4b68d0c75768de8a3230df70280ffadb3 Mon Sep 17 00:00:00 2001 From: elie Date: Sat, 9 Jun 2012 07:48:38 +0000 Subject: decoder's recursiveFlag feature generalized as a user callback function which is passed an uninitialized object recovered from substrate and its uninterpreted payload. --- pyasn1/codec/cer/decoder.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'pyasn1/codec/cer') diff --git a/pyasn1/codec/cer/decoder.py b/pyasn1/codec/cer/decoder.py index 44a001d..367feac 100644 --- a/pyasn1/codec/cer/decoder.py +++ b/pyasn1/codec/cer/decoder.py @@ -7,35 +7,35 @@ from pyasn1 import error class BooleanDecoder(decoder.AbstractSimpleDecoder): protoComponent = univ.Boolean(0) def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, length, - state, decodeFun): - substrate, rest = substrate[:length], substrate[length:] - if not substrate: + state, decodeFun, substrateFun): + head, tail = substrate[:length], substrate[length:] + if not head: raise error.PyAsn1Error('Empty substrate') - byte = oct2int(substrate[0]) + byte = oct2int(head[0]) 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), rest + return self._createComponent(asn1Spec, tagSet, value), tail class ObjectIdentifierDecoder(decoder.AbstractSimpleDecoder): protoComponent = univ.ObjectIdentifier(()) def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, length, - state, decodeFun): - substrate, rest = substrate[:length], substrate[length:] - if not substrate: + state, decodeFun, substrateFun): + head, tail = substrate[:length], substrate[length:] + if not head: raise error.PyAsn1Error('Empty substrate') # Get the first subid - subId = oct2int(substrate[0]) + subId = oct2int(head[0]) oid = divmod(subId, 40) index = 1 - substrateLen = len(substrate) + substrateLen = len(head) while index < substrateLen: - subId = oct2int(substrate[index]) + subId = oct2int(head[index]) index = index + 1 if subId == 128: # ASN.1 spec forbids leading zeros (0x80) in sub-ID OID @@ -52,11 +52,11 @@ class ObjectIdentifierDecoder(decoder.AbstractSimpleDecoder): raise error.SubstrateUnderrunError( 'Short substrate for sub-OID past %s' % (oid,) ) - nextSubId = oct2int(substrate[index]) + nextSubId = oct2int(head[index]) index = index + 1 subId = (subId << 7) + nextSubId oid = oid + (subId,) - return self._createComponent(asn1Spec, tagSet, oid), rest + return self._createComponent(asn1Spec, tagSet, oid), tail tagMap = decoder.tagMap.copy() tagMap.update({ -- cgit v1.2.1