You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
1.1 KiB

13 years ago
# DER encoder
from pyasn1.type import univ
from pyasn1.codec.cer import encoder
10 years ago
from pyasn1 import error
13 years ago
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({
10 years ago
# Overload CER encoders with BER ones (a bit hackerish XXX)
13 years ago
univ.BitString.tagSet: encoder.encoder.BitStringEncoder(),
univ.OctetString.tagSet: encoder.encoder.OctetStringEncoder(),
# Set & SetOf have same tags
univ.SetOf().tagSet: SetOfEncoder()
10 years ago
})
13 years ago
typeMap = encoder.typeMap
class Encoder(encoder.Encoder):
10 years ago
supportIndefLength = False
def __call__(self, client, defMode=True, maxChunkSize=0):
if not defMode:
raise error.PyAsn1Error('DER forbids indefinite length mode')
13 years ago
return encoder.Encoder.__call__(self, client, defMode, maxChunkSize)
10 years ago
13 years ago
encode = Encoder(tagMap, typeMap)