| 111 | |
| 112 | |
| 113 | class SetOfEncoder(encoder.SequenceOfEncoder): |
| 114 | def encodeValue(self, value, asn1Spec, encodeFun, **options): |
| 115 | chunks = self._encodeComponents( |
| 116 | value, asn1Spec, encodeFun, **options) |
| 117 | |
| 118 | # sort by serialised and padded components |
| 119 | if len(chunks) > 1: |
| 120 | zero = b'\x00' |
| 121 | maxLen = max(map(len, chunks)) |
| 122 | paddedChunks = [ |
| 123 | (x.ljust(maxLen, zero), x) for x in chunks |
| 124 | ] |
| 125 | paddedChunks.sort(key=lambda x: x[0]) |
| 126 | |
| 127 | chunks = [x[1] for x in paddedChunks] |
| 128 | |
| 129 | return b''.join(chunks), True, True |
| 130 | |
| 131 | |
| 132 | class SequenceOfEncoder(encoder.SequenceOfEncoder): |