diff options
author | elie <elie> | 2012-06-09 07:48:38 +0000 |
---|---|---|
committer | elie <elie> | 2012-06-09 07:48:38 +0000 |
commit | ddb52ae4b68d0c75768de8a3230df70280ffadb3 (patch) | |
tree | 0d4f229c18a6b85bf3660e39306e387741a98b79 /pyasn1/codec/cer | |
parent | 16c058a0f4e8f2e644269bb938005a06574c32cf (diff) | |
download | pyasn1-git-ddb52ae4b68d0c75768de8a3230df70280ffadb3.tar.gz |
decoder's recursiveFlag feature generalized as a user callback function
which is passed an uninitialized object recovered from substrate and
its uninterpreted payload.
Diffstat (limited to 'pyasn1/codec/cer')
-rw-r--r-- | pyasn1/codec/cer/decoder.py | 26 |
1 files changed, 13 insertions, 13 deletions
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({ |