Class: Noise::Pattern
- Inherits:
-
Object
show all
- Defined in:
- lib/noise/pattern.rb
Direct Known Subclasses
DeferredPattern, OneWayPattern, PatternIK, PatternIN, PatternIX, PatternKK, PatternKN, PatternKX, PatternNK, PatternNN, PatternNX, PatternXK, PatternXN, PatternXX
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
#fallback ⇒ Object
Returns the value of attribute fallback.
101
102
103
|
# File 'lib/noise/pattern.rb', line 101
def fallback
@fallback
end
|
#modifiers ⇒ Object
Returns the value of attribute modifiers.
101
102
103
|
# File 'lib/noise/pattern.rb', line 101
def modifiers
@modifiers
end
|
#psk_count ⇒ Object
Returns the value of attribute psk_count.
101
102
103
|
# File 'lib/noise/pattern.rb', line 101
def psk_count
@psk_count
end
|
#tokens ⇒ Object
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_modifiers ⇒ Object
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_messages ⇒ Object
162
163
164
|
# File 'lib/noise/pattern.rb', line 162
def initiator_pre_messages
@pre_messages[0].dup
end
|
#one_way? ⇒ Boolean
170
171
172
|
# File 'lib/noise/pattern.rb', line 170
def one_way?
false
end
|
#psk? ⇒ Boolean
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
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_initiator ⇒ Object
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_responder ⇒ Object
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_messages ⇒ Object
166
167
168
|
# File 'lib/noise/pattern.rb', line 166
def responder_pre_messages
@pre_messages[1].dup
end
|