Class: Noise::Pattern

Inherits:
Object
  • Object
show all
Defined in:
lib/noise/pattern.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(modifiers) ⇒ Pattern

Returns a new instance of Pattern.



26
27
28
29
30
31
32
33
# File 'lib/noise/pattern.rb', line 26

def initialize(modifiers)
  @pre_messages = [[], []]
  @tokens = []
  @name = ''
  @one_way = false
  @psk_count = 0
  @modifiers = modifiers
end

Instance Attribute Details

#modifiersObject (readonly)

Returns the value of attribute modifiers.



15
16
17
# File 'lib/noise/pattern.rb', line 15

def modifiers
  @modifiers
end

#one_wayObject (readonly)

Returns the value of attribute one_way.



15
16
17
# File 'lib/noise/pattern.rb', line 15

def one_way
  @one_way
end

#psk_countObject (readonly)

Returns the value of attribute psk_count.



15
16
17
# File 'lib/noise/pattern.rb', line 15

def psk_count
  @psk_count
end

#tokensObject (readonly)

Returns the value of attribute tokens.



15
16
17
# File 'lib/noise/pattern.rb', line 15

def tokens
  @tokens
end

Class Method Details

.create(name) ⇒ Object



17
18
19
20
21
22
23
24
# File 'lib/noise/pattern.rb', line 17

def self.create(name)
  pattern_set = name.scan(/([A-Z]+)([^A-Z]*)/)&.first
  pattern = pattern_set&.first
  modifiers = pattern_set[1].split('+')
  class_name = "Noise::Pattern#{pattern}"
  klass = Object.const_get(class_name)
  klass.new(modifiers)
end

Instance Method Details

#apply_pattern_modifiersObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/noise/pattern.rb', line 35

def apply_pattern_modifiers
  @modifiers.each do |modifier|
    if modifier.start_with?('psk')
      index = modifier.gsub(/psk/, '').to_i
      raise Noise::Exceptions::PSKValueError if index / 2 > @tokens.size
      if index.zero?
        @tokens[0].insert(0, Token::PSK)
      else
        @tokens[index - 1] << Token::PSK
      end
      @psk_count += 1
    elsif modifier == 'fallback'
      raise NotImplementedError
    else
      raise Noise::Exceptions::PSKValueError
    end
  end
end

#initiator_pre_messagesObject



73
74
75
# File 'lib/noise/pattern.rb', line 73

def initiator_pre_messages
  @pre_messages[0].dup
end

#required_keypairs(initiator) ⇒ Object

initiator [Boolean]



55
56
57
# File 'lib/noise/pattern.rb', line 55

def required_keypairs(initiator)
  initiator ? required_keypairs_of_initiator : required_keypairs_of_responder
end

#required_keypairs_of_initiatorObject



59
60
61
62
63
64
# File 'lib/noise/pattern.rb', line 59

def required_keypairs_of_initiator
  required = []
  required << :s if %w[K X I].include?(@name[0])
  required << :rs if @one_way || @name[1] == 'K'
  required
end

#required_keypairs_of_responderObject



66
67
68
69
70
71
# File 'lib/noise/pattern.rb', line 66

def required_keypairs_of_responder
  required = []
  required << :rs if @name[0] == 'K'
  required << :s if @one_way || %w[K X].include?(@name[1])
  required
end

#responder_pre_messagesObject



77
78
79
# File 'lib/noise/pattern.rb', line 77

def responder_pre_messages
  @pre_messages[1].dup
end