Class: DerParse::Node

Inherits:
Object
  • Object
show all
Defined in:
lib/derparse/node.rb,
lib/derparse/node/null.rb,
lib/derparse/node/integer.rb,
lib/derparse/node/sequence.rb,
lib/derparse/node/octet_string.rb

Direct Known Subclasses

Integer, Null, OctetString, Sequence

Defined Under Namespace

Classes: Integer, Null, OctetString, Sequence

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(der, depth: 0, offset: 0) ⇒ Node

Returns a new instance of Node.



17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/derparse/node.rb', line 17

def initialize(der, depth: 0, offset: 0)
  @depth, @offset = depth, offset
  @tag = @tag_class = @constructed = @tag_length = @data_length = @length_length, @data = nil
  @complete = true

  begin
    r = parse_type(der)
    r = parse_length(r)
    @rest = parse_data(r)
  rescue IncompleteDer
    @complete = false
  end
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



15
16
17
# File 'lib/derparse/node.rb', line 15

def data
  @data
end

#data_lengthObject (readonly)

Returns the value of attribute data_length.



15
16
17
# File 'lib/derparse/node.rb', line 15

def data_length
  @data_length
end

#depthObject (readonly)

Returns the value of attribute depth.



15
16
17
# File 'lib/derparse/node.rb', line 15

def depth
  @depth
end

#length_lengthObject (readonly)

Returns the value of attribute length_length.



15
16
17
# File 'lib/derparse/node.rb', line 15

def length_length
  @length_length
end

#offsetObject (readonly)

Returns the value of attribute offset.



15
16
17
# File 'lib/derparse/node.rb', line 15

def offset
  @offset
end

#restObject (readonly)

Returns the value of attribute rest.



15
16
17
# File 'lib/derparse/node.rb', line 15

def rest
  @rest
end

#tagObject (readonly)

Returns the value of attribute tag.



15
16
17
# File 'lib/derparse/node.rb', line 15

def tag
  @tag
end

#tag_classObject (readonly)

Returns the value of attribute tag_class.



15
16
17
# File 'lib/derparse/node.rb', line 15

def tag_class
  @tag_class
end

#tag_lengthObject (readonly)

Returns the value of attribute tag_length.



15
16
17
# File 'lib/derparse/node.rb', line 15

def tag_length
  @tag_length
end

Class Method Details

.factory(der, *args) ⇒ Object



5
6
7
8
9
10
11
12
13
# File 'lib/derparse/node.rb', line 5

def self.factory(der, *args)
  klass_name = DerParse::Node.constants.find do |const|
    DerParse::Node.const_get(const).handles?(der)
  end

  klass = klass_name.nil? ? DerParse::Node : const_get(klass_name)

  klass.new(der, *args)
end

Instance Method Details

#complete?Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/derparse/node.rb', line 55

def complete?
  @complete
end

#constructed?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/derparse/node.rb', line 47

def constructed?
  @constructed
end

#der_lengthObject



31
32
33
34
35
36
37
# File 'lib/derparse/node.rb', line 31

def der_length
  if data_length.nil? || header_length.nil?
    nil
  else
    data_length + header_length
  end
end

#header_lengthObject



39
40
41
42
43
44
45
# File 'lib/derparse/node.rb', line 39

def header_length
  if tag_length.nil? || length_length.nil?
    nil
  else
    tag_length + length_length
  end
end

#primitive?Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/derparse/node.rb', line 51

def primitive?
  !constructed?
end

#valueObject



59
60
61
# File 'lib/derparse/node.rb', line 59

def value
  raise IncompatibleDatatypeError
end