From 2b958672f6424afbe93fe06e9d67434a14289ee5 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 6 Oct 2015 19:54:53 +0200 Subject: Parse only universal primitive --- ber/dump.go | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/ber/dump.go b/ber/dump.go index 3d27b4e..c9c4d9c 100644 --- a/ber/dump.go +++ b/ber/dump.go @@ -8,6 +8,23 @@ func Dump(b []byte) string { return newState(b).dump(0) } +func (s *state) universal(h Header) string { + switch h.Tag { + case tagInteger, tagEnumerated: + return fmt.Sprintln(s.unmarshalInt()) + case tagBoolean: + return fmt.Sprintln(s.unmarshalBool()) + case tagObjectIdentifier: + return fmt.Sprintln(s.unmarshalOID()) + case tagBitString: + return fmt.Sprintln(s.unmarshalBitString()) + case tagIA5String, tagOctetString: + return fmt.Sprintln(s.unmarshalString()) + default: + return fmt.Sprintln(s.next()) + } +} + func (s *state) dump(indent int) (ret string) { if s.Len() == 0 { return "" @@ -17,18 +34,9 @@ func (s *state) dump(indent int) (ret string) { ret += fmt.Sprintf("%3d: %*s%v: ", s.Len(), 2*indent, "", h) switch h.Kind { case kindPrimitive: - switch h.Tag { - case tagInteger, tagEnumerated: - ret += fmt.Sprintln(s.unmarshalInt()) - case tagBoolean: - ret += fmt.Sprintln(s.unmarshalBool()) - case tagObjectIdentifier: - ret += fmt.Sprintln(s.unmarshalOID()) - case tagBitString: - ret += fmt.Sprintln(s.unmarshalBitString()) - case tagIA5String, tagOctetString: - ret += fmt.Sprintln(s.unmarshalString()) - default: + if h.Class == classUniversal { + ret += s.universal(h) + } else { ret += fmt.Sprintln(s.next()) } case kindConstructed: -- cgit v1.2.3