Class: Noise::Protocol

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

Constant Summary collapse

CIPHER =
{
  'AESGCM' => Noise::Functions::Cipher::AesGcm,
  'ChaChaPoly' => Noise::Functions::Cipher::ChaChaPoly
}.freeze
DH =
{
  '25519' => Noise::Functions::DH::ED25519,
  '448' => Noise::Functions::DH::ED448,
  'secp256k1' => Noise::Functions::DH::Secp256k1
}.freeze
HASH =
{
  'BLAKE2b' => Noise::Functions::Hash::Blake2b,
  'BLAKE2s' => Noise::Functions::Hash::Blake2s,
  'SHA256' => Noise::Functions::Hash::Sha256,
  'SHA512' => Noise::Functions::Hash::Sha512,
  'BLAKE3' => Noise::Functions::Hash::Blake3
}.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, pattern_name, cipher_name, hash_name, dh_name) ⇒ Protocol

Returns a new instance of Protocol.



37
38
39
40
41
42
43
44
# File 'lib/noise/protocol.rb', line 37

def initialize(name, pattern_name, cipher_name, hash_name, dh_name)
  @name = name
  @pattern = Noise::Pattern.create(pattern_name)
  @hkdf_fn = Noise::Functions::Hash.create_hkdf_fn(hash_name)
  @pattern.apply_pattern_modifiers

  initialize_fn!(cipher_name, hash_name, dh_name)
end

Instance Attribute Details

#cipher_fnObject

Returns the value of attribute cipher_fn.



5
6
7
# File 'lib/noise/protocol.rb', line 5

def cipher_fn
  @cipher_fn
end

#dh_fnObject

Returns the value of attribute dh_fn.



5
6
7
# File 'lib/noise/protocol.rb', line 5

def dh_fn
  @dh_fn
end

#hash_fnObject

Returns the value of attribute hash_fn.



5
6
7
# File 'lib/noise/protocol.rb', line 5

def hash_fn
  @hash_fn
end

#hkdf_fnObject

Returns the value of attribute hkdf_fn.



5
6
7
# File 'lib/noise/protocol.rb', line 5

def hkdf_fn
  @hkdf_fn
end

#nameObject (readonly)

Returns the value of attribute name.



6
7
8
# File 'lib/noise/protocol.rb', line 6

def name
  @name
end

#patternObject (readonly)

Returns the value of attribute pattern.



6
7
8
# File 'lib/noise/protocol.rb', line 6

def pattern
  @pattern
end

Class Method Details

.create(name) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'lib/noise/protocol.rb', line 27

def self.create(name)
  parts = name.split('_')
  raise Noise::Exceptions::ProtocolNameError, "Malformed protocol name: #{name}" unless parts.size == 5

  prefix, pattern_name, dh_name, cipher_name, hash_name = parts
  raise Noise::Exceptions::ProtocolNameError, "Malformed protocol name: #{name}" if prefix != 'Noise'

  new(name, pattern_name, cipher_name, hash_name, dh_name)
end

Instance Method Details

#initialize_fn!(cipher_name, hash_name, dh_name) ⇒ Object



46
47
48
49
50
51
52
# File 'lib/noise/protocol.rb', line 46

def initialize_fn!(cipher_name, hash_name, dh_name)
  @cipher_fn = CIPHER[cipher_name]&.new
  @hash_fn = HASH[hash_name]&.new
  @dh_fn = DH[dh_name]&.new
  raise Noise::Exceptions::ProtocolNameError, "Unsupported function in: #{@name}" unless
    @cipher_fn && @hash_fn && @dh_fn
end

#psk?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/noise/protocol.rb', line 54

def psk?
  @pattern.psk?
end