Example #1
0
 def encode_set_of(self, obj):
     V = Layer('V')
     for val in obj._val:
         obj._cont._val = val
         obj._cont._encode()
         V.append(obj._cont._msg)
     #
     obj._cont._msg = None
     obj._msg = BER_TLV(obj.get_name())
     obj._msg.set(V)
     self.handle_tag_enc(obj)
Example #2
0
 def encode_set_of(self, obj):
     V = Layer('V')
     for val in obj._val:
         obj._cont._val = val
         obj._cont._encode()
         V.append(obj._cont._msg)
     #
     obj._cont._msg = None
     obj._msg = BER_TLV(obj.get_name())
     obj._msg.set(V)
     self.handle_tag_enc(obj)
Example #3
0
 def encode_set(self, obj):
     V = Layer('V')
     for name in obj._cont:
         if name in obj._val:
             comp = obj._cont[name]
             comp._val = obj._val[name]
             comp._encode()
             V.append(comp._msg)
             comp._msg = None
     #
     obj._msg = BER_TLV(obj.get_name())
     obj._msg.set(V)
     self.handle_tag_enc(obj)
Example #4
0
 def encode_set(self, obj):
     V = Layer('V')
     for name in obj._cont:
         if name in obj._val:
             comp = obj._cont[name]
             comp._val = obj._val[name]
             comp._encode()
             V.append(comp._msg)
             comp._msg = None
     #
     obj._msg = BER_TLV(obj.get_name())
     obj._msg.set(V)
     self.handle_tag_enc(obj)
Example #5
0
 def encode_bit_str(self, obj):
     if isinstance(obj._val, ASN1.ASN1Obj):
         # obj._val: ASN1Obj, according to CONTAINING constraint
         V = Layer('V')
         V.append(Int('pad_len', Pt=0, Type='uint8'))
         obj._val._encode()
         V.extend(obj._val._msg)
         obj._val._msg = None
     #
     else:
         # obj._val: (BE uint value, BE uint bit length)
         val_len = obj._val[1] // 8
         val_ext = obj._val[1] % 8
         if val_ext:
             val_len += 1
         V = Layer('V')
         V.append(Int('pad_len', Pt=(8-val_ext)%8, Type='uint8'))
         V.append(Bit('val', Pt=obj._val[0], BitLen=obj._val[1], 
                      Repr=self._REPR_BIT_STR))
         if val_ext > 0:
             V.append(Bit('pad', Pt=0, BitLen=8-val_ext, 
                          Repr=self._REPR_BIT_STR))
     #
     obj._msg = BER_TLV(obj.get_name())
     obj._msg.set(V)
     self.handle_tag_enc(obj)
Example #6
0
 def encode_bit_str(self, obj):
     if isinstance(obj._val, ASN1.ASN1Obj):
         # obj._val: ASN1Obj, according to CONTAINING constraint
         V = Layer('V')
         V.append(Int('pad_len', Pt=0, Type='uint8'))
         obj._val._encode()
         V.extend(obj._val._msg)
         obj._val._msg = None
     #
     else:
         # obj._val: (BE uint value, BE uint bit length)
         val_len = obj._val[1] // 8
         val_ext = obj._val[1] % 8
         if val_ext:
             val_len += 1
         V = Layer('V')
         V.append(Int('pad_len', Pt=(8 - val_ext) % 8, Type='uint8'))
         V.append(
             Bit('val',
                 Pt=obj._val[0],
                 BitLen=obj._val[1],
                 Repr=self._REPR_BIT_STR))
         if val_ext > 0:
             V.append(
                 Bit('pad',
                     Pt=0,
                     BitLen=8 - val_ext,
                     Repr=self._REPR_BIT_STR))
     #
     obj._msg = BER_TLV(obj.get_name())
     obj._msg.set(V)
     self.handle_tag_enc(obj)
Example #7
0
 def decode_bit_str_val(self, obj):
     tlv = self.handle_tag_dec(obj)
     # obj._val: (BE uint value, BE uint bit length)
     # map to a Layer including the pad_len initial octet
     v_str = str(tlv[2])
     if len(v_str) > 1:
         pad_len = ord(v_str[0])
         bit_len = 8*(len(v_str)-1)-pad_len
         V = Layer('V')
         V.append(Int('pad_len'), Type='uint8')
         V.append(Bit('val', BitLen=bit_len, Repr=self._REPR_BIT_STR))
         if pad_len > 0:
             V.append(Bit('pad', BitLen=pad_len, Repr=self._REPR_BIT_STR))
         V.map(v_str)
         tlv.set(V)
         #
         obj._val = (V[1](), bit_len)
     else:
         obj._val = (0, 0)
Example #8
0
 def decode_bit_str_val(self, obj):
     tlv = self.handle_tag_dec(obj)
     # obj._val: (BE uint value, BE uint bit length)
     # map to a Layer including the pad_len initial octet
     v_str = str(tlv[2])
     if len(v_str) > 1:
         pad_len = ord(v_str[0])
         bit_len = 8 * (len(v_str) - 1) - pad_len
         V = Layer('V')
         V.append(Int('pad_len'), Type='uint8')
         V.append(Bit('val', BitLen=bit_len, Repr=self._REPR_BIT_STR))
         if pad_len > 0:
             V.append(Bit('pad', BitLen=pad_len, Repr=self._REPR_BIT_STR))
         V.map(v_str)
         tlv.set(V)
         #
         obj._val = (V[1](), bit_len)
     else:
         obj._val = (0, 0)