Class: Net::SSH::Transport::Kex::Curve25519Sha256
- Inherits:
-
Abstract5656
- Object
- Abstract
- Abstract5656
- Net::SSH::Transport::Kex::Curve25519Sha256
- Defined in:
- lib/net/ssh/transport/kex/curve25519_sha256.rb
Overview
A key-exchange service implementing the "curve25519-sha256@libssh.org" key-exchange algorithm. (defined in https://tools.ietf.org/html/draft-ietf-curdle-ssh-curves-06)
Defined Under Namespace
Classes: UnsupportedError
Constant Summary collapse
- ALGORITHM =
"X25519"- KEY_BYTES =
32
Constants included from Constants
Constants::DEBUG, Constants::DISCONNECT, Constants::IGNORE, Constants::KEXDH_GEX_GROUP, Constants::KEXDH_GEX_INIT, Constants::KEXDH_GEX_REPLY, Constants::KEXDH_GEX_REQUEST, Constants::KEXDH_INIT, Constants::KEXDH_REPLY, Constants::KEXECDH_INIT, Constants::KEXECDH_REPLY, Constants::KEXINIT, Constants::NEWKEYS, Constants::SERVICE_ACCEPT, Constants::SERVICE_REQUEST, Constants::UNIMPLEMENTED
Instance Attribute Summary
Attributes inherited from Abstract
#algorithms, #connection, #data, #dh
Attributes included from Loggable
Class Method Summary collapse
- .ensure_supported! ⇒ Object
- .generate_x25519_key ⇒ Object
- .new_raw_public_key(key) ⇒ Object
- .validate_key_bytes!(key, label, expected_bytes) ⇒ Object
Instance Method Summary collapse
Methods inherited from Abstract5656
Methods inherited from Abstract
Methods included from Loggable
#debug, #error, #fatal, #info, #lwarn
Constructor Details
This class inherits a constructor from Net::SSH::Transport::Kex::Abstract
Class Method Details
.ensure_supported! ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/net/ssh/transport/kex/curve25519_sha256.rb', line 17 def self.ensure_supported! unless OpenSSL::PKey.respond_to?(:generate_key) && OpenSSL::PKey.respond_to?(:new_raw_public_key) raise UnsupportedError, "OpenSSL::PKey raw public key APIs are unavailable" end key = generate_x25519_key public_key = new_raw_public_key(key.raw_public_key) validate_key_bytes!(key.derive(public_key), "shared secret", KEY_BYTES) rescue OpenSSL::PKey::PKeyError => e raise UnsupportedError, e. end |
.generate_x25519_key ⇒ Object
29 30 31 |
# File 'lib/net/ssh/transport/kex/curve25519_sha256.rb', line 29 def self.generate_x25519_key OpenSSL::PKey.generate_key(ALGORITHM) end |
.new_raw_public_key(key) ⇒ Object
33 34 35 36 |
# File 'lib/net/ssh/transport/kex/curve25519_sha256.rb', line 33 def self.new_raw_public_key(key) validate_key_bytes!(key, "public key", KEY_BYTES) OpenSSL::PKey.new_raw_public_key(ALGORITHM, binary_string(key)) end |
.validate_key_bytes!(key, label, expected_bytes) ⇒ Object
38 39 40 |
# File 'lib/net/ssh/transport/kex/curve25519_sha256.rb', line 38 def self.validate_key_bytes!(key, label, expected_bytes) raise ArgumentError, "invalid X25519 #{label}" unless key.respond_to?(:bytesize) && key.bytesize == expected_bytes end |
Instance Method Details
#digester ⇒ Object
47 48 49 |
# File 'lib/net/ssh/transport/kex/curve25519_sha256.rb', line 47 def digester OpenSSL::Digest::SHA256 end |