OLD | NEW |
(Empty) | |
| 1 # DER encoder |
| 2 from pyasn1.type import univ |
| 3 from pyasn1.codec.cer import encoder |
| 4 from pyasn1 import error |
| 5 |
| 6 class SetOfEncoder(encoder.SetOfEncoder): |
| 7 def _cmpSetComponents(self, c1, c2): |
| 8 tagSet1 = isinstance(c1, univ.Choice) and \ |
| 9 c1.getEffectiveTagSet() or c1.getTagSet() |
| 10 tagSet2 = isinstance(c2, univ.Choice) and \ |
| 11 c2.getEffectiveTagSet() or c2.getTagSet() |
| 12 return cmp(tagSet1, tagSet2) |
| 13 |
| 14 tagMap = encoder.tagMap.copy() |
| 15 tagMap.update({ |
| 16 # Overload CER encoders with BER ones (a bit hackerish XXX) |
| 17 univ.BitString.tagSet: encoder.encoder.BitStringEncoder(), |
| 18 univ.OctetString.tagSet: encoder.encoder.OctetStringEncoder(), |
| 19 # Set & SetOf have same tags |
| 20 univ.SetOf().tagSet: SetOfEncoder() |
| 21 }) |
| 22 |
| 23 typeMap = encoder.typeMap |
| 24 |
| 25 class Encoder(encoder.Encoder): |
| 26 supportIndefLength = False |
| 27 def __call__(self, client, defMode=True, maxChunkSize=0): |
| 28 if not defMode: |
| 29 raise error.PyAsn1Error('DER forbids indefinite length mode') |
| 30 return encoder.Encoder.__call__(self, client, defMode, maxChunkSize) |
| 31 |
| 32 encode = Encoder(tagMap, typeMap) |
OLD | NEW |