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.



112
113
114
115
116
117
118
# File 'lib/noise/pattern.rb', line 112

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

Instance Attribute Details

#fallbackObject (readonly)

Returns the value of attribute fallback.



101
102
103
# File 'lib/noise/pattern.rb', line 101

def fallback
  @fallback
end

#modifiersObject (readonly)

Returns the value of attribute modifiers.



101
102
103
# File 'lib/noise/pattern.rb', line 101

def modifiers
  @modifiers
end

#psk_countObject (readonly)

Returns the value of attribute psk_count.



101
102
103
# File 'lib/noise/pattern.rb', line 101

def psk_count
  @psk_count
end

#tokensObject (readonly)

Returns the value of attribute tokens.



101
102
103
# File 'lib/noise/pattern.rb', line 101

def tokens
  @tokens
end

Class Method Details

.create(name) ⇒ Object



103
104
105
106
107
108
109
110
# File 'lib/noise/pattern.rb', line 103

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

Instance Method Details

#apply_pattern_modifiersObject



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/noise/pattern.rb', line 124

def apply_pattern_modifiers
  @modifiers.each do |modifier|
    case modifier
    when Modifier::Psk
      index = modifier.index
      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
    when Modifier::Fallback
      @fallback = true
    end
  end
end

#initiator_pre_messagesObject



162
163
164
# File 'lib/noise/pattern.rb', line 162

def initiator_pre_messages
  @pre_messages[0].dup
end

#one_way?Boolean

Returns:



170
171
172
# File 'lib/noise/pattern.rb', line 170

def one_way?
  false
end

#psk?Boolean

Returns:



120
121
122
# File 'lib/noise/pattern.rb', line 120

def psk?
  modifiers.any? { |m| m.is_a? Modifier::Psk }
end

#required_keypairs(initiator) ⇒ Object

initiator [Boolean]



144
145
146
# File 'lib/noise/pattern.rb', line 144

def required_keypairs(initiator)
  initiator ? required_keypairs_of_initiator : required_keypairs_of_responder
end

#required_keypairs_of_initiatorObject



148
149
150
151
152
153
# File 'lib/noise/pattern.rb', line 148

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



155
156
157
158
159
160
# File 'lib/noise/pattern.rb', line 155

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



166
167
168
# File 'lib/noise/pattern.rb', line 166

def responder_pre_messages
  @pre_messages[1].dup
end