diff -Nru ruby-net-ssh-2.2.1/CHANGELOG.rdoc ruby-net-ssh-2.6.7/CHANGELOG.rdoc
--- ruby-net-ssh-2.2.1/CHANGELOG.rdoc 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/CHANGELOG.rdoc 1970-01-01 00:00:00.000000000 +0000
@@ -1,253 +0,0 @@
-
-=== 2.2.1 / 24 Aug 2011
-
-* Do not prompt any passphrases before trying all identities from agent. [musybite]
- (see: http://net-ssh.lighthouseapp.com/projects/36253-net-ssh/tickets/30)
-
-=== 2.2.0 / 16 Aug 2011
-
-* Add support for forward a local UNIX domain socket to a remote TCP socket. [Mark Imbriaco]
-
-=== 2.1.4 / 3 Apr 2011
-
-* Add ConnectionTimeout exception class. [Joel Watson]
- See: https://github.com/net-ssh/net-ssh-multi/pull/1
-
-
-=== 2.1.3 / 2 Mar 2011
-
-* Call to transport.closed should be transport.close [Woon Jung]
-
-
-=== 2.1.2 / 1 Mar 2011
-
-* Fix for Net::SSH Continues to attempt authentication when notified it is not allowed [Eric Hodel]
- (see: http://net-ssh.lighthouseapp.com/projects/36253-net-ssh/tickets/26)
-* Fix for transport won't be closed if authentication fails [Patrick Marchi]
-
-
-=== 2.1 / 19 Jan 2011
-
-* Support "IdentitiesOnly" directive (LH-24) [Musy Bite, Edmund Haselwanter]
-* Speeding up the Loggable module (LH-23) [robbebob]
-
-
-=== 2.0.24 / 14 Jan 2011
-
-* Fix for process code to correctly wait until remote_id is set before sending any output, including eof. [Daniel Pittman, Markus Roberts]
-* Fix circular require warning in Ruby 1.9.2 [Gavin Brock]
-
-
-=== 2.0.23 / 03 Jun 2010
-
-* delay CHANNEL_EOF packet until output buffer is empty [Rich Lane]
-
-Previously, calling #eof! after #send_data would result in the CHANNEL_EOF
-packet being sent immediately, ahead of the data in the output buffer. Now
-buffer becomes empty.
-
-
-=== 2.0.22 / 20 Apr 2010
-
-* Fix for: "Parsing the config errors out because it coerces the "1" into an integer and then tries to split it on spaces for multiple host checking." (http://net-ssh.lighthouseapp.com/projects/36253/tickets/10) [Lee Marlow]
-
-
-=== 2.0.21 / 20 Mar 2010
-
-* Fix for "IdentifyFile" in ~/.ssh/config does not work if no "Host" statement is given (http://net-ssh.lighthouseapp.com/projects/36253/tickets/9-identifyfile-in-sshconfig-does-not-work-if-no-host-statement-is-given#ticket-9-5) [xbaldauf, Delano Mandelbaum]
-
-* Fix for client closes a forwarded connection, but the server is reading, net-ssh terminates with IOError socket closed (http://net-ssh.lighthouseapp.com/projects/36253/tickets/7) [Miklós Fazekas]
-
-* Fix for client force closes (RST) a forwarded connection, but server is reading, net-ssh terminates with exception [Miklós Fazekas]
-
-* Fix for server closes the sending side, the on_eof is not handled. [Miklós Fazekas]
-
-* Removed Hanna dependency in Rakefile [Delano Mandelbaum]
-
-
-=== 2.0.20 / 10 Feb 2010
-
-* Support "ProxyCommand none" directive [Andy Lo-A-Foe]
-
-=== 2.0.19 / 16 Jan 2010
-
-* Support plus sign in sshconfig hostname [Jason Weathered]
-
-=== 2.0.18 / 15 Jan 2010
-
-* Fix related to #recv(1) to #readpartial change in 2.0.16 [Hans de Graaff, Delano Mandelbaum]
-
-
-=== 2.0.17 / 14 Dec 2009
-
-* Don't load net/ssh/authentication/pageant on Windows with Ruby 1.9 [Travis Reeder, Delano Mandelbaum]
-
-
-=== 2.0.16 / 28 Nov 2009
-
-* Fix for "multiple hosts are separated by whitespace" [Akinori MUSHA]
-
-* Add support for the ProxyCommand directive [Akinori MUSHA]
-
-* Switched from #recv(1) to #readpartial in lib/net/ssh/transport/server_version.rb, so that closed sockets are recognized [Alex Peuchert]
-
-
-=== 2.0.15 / 03 Sep 2009
-
-* Scale back IO#select patch so it mutexes only zero-timeout calls [Daniel Azuma, Will Bryant]
-
-
-=== 2.0.14 / 28 Aug 2009
-
-* Fix for IO#select threading bug in Ruby 1.8 (LH-1) [Daniel Azuma]
-
-* Fix for "uninitialized constant OpenSSL::Digest::MD5" exception in Net::SFTP [DL Redden]
-
-
-=== 2.0.13 / 17 Aug 2009
-
-* Added fix for hanging in ServerVersion#negotiate! when using SOCKS5 proxy (GH-9) [Gerald Talton]
-
-* Added support for specifying a list of hosts in .ssh/config, with tests (GH-6) [ckoehler, Delano Mandelbaum]
-
-* Added tests for arcfour128/256/512 lengths, encryption, and decryption [Delano Mandelbaum]
-
-* Skip packet stream tests for arcfour128/256/512 [Delano Mandelbaum]
-
-* Fix for OpenSSL cipher key length because it always returns 16, even when 32 byte keys are required, e.g. for arcfour256 and arcfour512 ciphers [Karl Varga]
-
-
-=== 2.0.12 / 08 Jun 2009
-
-* Applied patch for arcfour128 and arcfour256 support [Denis Bernard]
-
-* Use unbuffered reads when negotiating the protocol version [Steven Hazel]
-
-
-=== 2.0.11 / 24 Feb 2009
-
-* Add :key_data option for specifying raw private keys in PEM format [Alex Holems, Andrew Babkin]
-
-
-=== 2.0.10 / 4 Feb 2009
-
-* Added Net::SSH.configuration_for to make it easier to query the SSH configuration file(s) [Jamis Buck]
-
-
-=== 2.0.9 / 1 Feb 2009
-
-* Specifying non-nil user argument overrides user in .ssh/config [Jamis Buck]
-
-* Ignore requests for non-existent channels (workaround ssh server bug) [Jamis Buck]
-
-* Add terminate! method for hard shutdown scenarios [Jamis Buck]
-
-* Revert to pre-2.0.7 key-loading behavior by default, but load private-key if public-key doesn't exist [Jamis Buck]
-
-* Make sure :passphrase option gets passed to key manager [Bob Cotton]
-
-
-=== 2.0.8 / 29 December 2008
-
-* Fix private key change from 2.0.7 so that keys are loaded just-in-time, avoiding unecessary prompts from encrypted keys. [Jamis Buck]
-
-
-=== 2.0.7 / 29 December 2008
-
-* Make key manager use private keys instead of requiring public key to exist [arilerner@mac.com]
-
-* Fix failing tests [arilerner@mac.com]
-
-* Don't include pageant when running under JRuby [Angel N. Sciortino]
-
-
-=== 2.0.6 / 6 December 2008
-
-* Update the Manifest file so that the gem includes all necessary files [Jamis Buck]
-
-
-=== 2.0.5 / 6 December 2008
-
-* Make the Pageant interface comply with more of the Socket interface to avoid related errors [Jamis Buck]
-
-* Don't busy-wait on session close for remaining channels to close [Will Bryant]
-
-* Ruby 1.9 compatibility [Jamis Buck]
-
-* Fix Cipher#final to correctly flag a need for a cipher reset [Jamis Buck]
-
-
-=== 2.0.4 / 27 Aug 2008
-
-* Added Connection::Session#closed? and Transport::Session#closed? [Jamis Buck]
-
-* Numeric host names in .ssh/config are now parsed correct [Yanko Ivanov]
-
-* Make sure the error raised when a public key file is malformed is more informative than a MethodMissing error [Jamis Buck]
-
-* Cipher#reset is now called after Cipher#final, with the last n bytes used as the next initialization vector [Jamis Buck]
-
-
-=== 2.0.3 / 27 Jun 2008
-
-* Make Net::SSH::Version comparable [Brian Candler]
-
-* Fix errors in port forwarding when a channel could not be opened due to a typo in the exception name [Matthew Todd]
-
-* Use #chomp instead of #strip when cleaning the version string reported by the remote host, so that trailing whitespace is preserved (this is to play nice with servers like Mocana SSH) [Timo Gatsonides]
-
-* Correctly parse ssh_config entries with eq-sign delimiters [Jamis Buck]
-
-* Ignore malformed ssh_config entries [Jamis Buck]
-
-=== 2.0.2 / 29 May 2008
-
-* Make sure the agent client understands both RSA "identities answers" [Jamis Buck]
-
-* Fixed key truncation bug that caused hmacs other than SHA1 to fail with "corrupt hmac" errors [Jamis Buck]
-
-* Fix detection and loading of public keys when the keys don't actually exist [David Dollar]
-
-
-=== 2.0.1 / 5 May 2008
-
-* Teach Net::SSH about a handful of default key names [Jamis Buck]
-
-
-=== 2.0.0 / 1 May 2008
-
-* Allow the :verbose argument to accept symbols (:debug, etc.) as well as Logger level constants (Logger::DEBUG, etc.) [Jamis Buck]
-
-
-=== 2.0 Preview Release 4 (1.99.3) / 19 Apr 2008
-
-* Make sure HOME is set to something sane, even on OS's that don't set it by default [Jamis Buck]
-
-* Add a :passphrase option to specify the passphrase to use with private keys [Francis Sullivan]
-
-* Open a new auth agent connection for every auth-agent channel request [Jamis Buck]
-
-
-=== 2.0 Preview Release 3 (1.99.2) / 10 Apr 2008
-
-* Session properties [Jamis Buck]
-
-* Make channel open failure work with a callback so that failures can be handled similarly to successes [Jamis Buck]
-
-
-=== 2.0 Preview Release 2 (1.99.1) / 22 Mar 2008
-
-* Partial support for ~/.ssh/config (and related) SSH configuration files [Daniel J. Berger, Jamis Buck]
-
-* Added Net::SSH::Test to facilitate testing complex SSH state machines [Jamis Buck]
-
-* Reworked Net::SSH::Prompt to use conditionally-selected modules [Jamis Buck, suggested by James Rosen]
-
-* Added Channel#eof? and Channel#eof! [Jamis Buck]
-
-* Fixed bug in strict host key verifier on cache miss [Mike Timm]
-
-
-=== 2.0 Preview Release 1 (1.99.0) / 21 Aug 2007
-
-* First preview release of Net::SSH v2
diff -Nru ruby-net-ssh-2.2.1/CHANGES.txt ruby-net-ssh-2.6.7/CHANGES.txt
--- ruby-net-ssh-2.2.1/CHANGES.txt 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/CHANGES.txt 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,343 @@
+
+=== 2.6.7 / 11 Apr 2013
+
+* Decreased default packet size to 32768 as described in RFC 4253 [Olipro]
+* Added max_pkt_size and max_win_size options to Net::SSH.start [Olipro]
+
+
+=== 2.6.6 / 03 Mar 2013
+
+* Fix for ruby 2.0 in windows [jansegre]
+
+=== 2.6.5 / 06 Feb 2013
+
+* Fixed path in gemspec [thanks priteau]
+
+=== 2.6.4 / 06 Feb 2013
+
+* Added license info to gemspec [jordimassaguerpla]
+* Added public cert. All gem releases are now signed.
+
+
+=== 2.6.3 / 10 Jan 2013
+
+* Small doc fix and correct error class for PKey::EC key type [Andreas Wolff]
+* Improve test dependencies [Kenichi Kamiya]
+
+
+=== 2.6.2 / 22 Nov 2012
+
+* Net::SSH.start now returns result of block [mhuffnagle]
+* Add stderr handling to Net::SSH::Test [ohrite]
+* Fix Invalid key size in JRuby [ohrite]
+
+
+=== 2.6.1 / 18 Oct 2012
+
+* Remove platform specific jruby dependency from gemspec
+* Changed encoding of file to prevent warnings when generating docs [iltempo]
+
+
+=== 2.6.0 / 19 Sep 2012
+
+* Use OpenSSL::PKey.read to read arbitrary private key. [nagachika]
+* Check availability of UNIXSocket and UNIXServer for Windows [Nobuhiro IMAI]
+* Bump version to 2.5.3 and depend on newer jruby-pageant version for Java 1.5 compat. [arturaz]
+* Implementation of the "none"-authentication method [dubspeed]
+* Add class for stricter host key verification [Andy Brody]
+
+
+=== 2.5.2 / 25 May 2012
+
+* Fix for Net::SSH::KnownHosts::SUPPORTED_TYPE [Marco Sandrini]
+
+=== 2.5.1 / 24 May 2012
+
+* Added missing file to manifest [Marco Sandrini]
+
+=== 2.5.0 / 24 May 2012
+
+* Implement many algorithms [Ryosuke Yamazaki]
+ * Key Exchange
+ * diffie-hellman-group14-sha1
+ * ecdh-sha2-nistp{256,384,521}
+ * Host Key
+ * ecdsa-sha2-nistp{256,384,521}
+ * Authentication
+ * ecdsa-sha2-nistp{256,384,521}
+ * HMAC
+ * hmac-ripemd160
+ * Cipher:
+ * aes{128,192,256}-ctr
+ * camellia{128,192,256}-ctr
+ * blowfish-ctr
+ * cast128-ctr
+ * 3des-ctr
+ * arcfour (has problems with weak keys, and should be used with caution)
+ * camellia{128,192,256}-cbc
+
+=== 2.4.0 / 17 May 2012
+
+* Support for JRuby + Pageant + Windows [arturaz]
+
+=== 2.3.0 / 11 Jan 2012
+
+* Support for hmac-sha2 and diffie-hellman-group-exchange-sha256 [Ryosuke Yamazaki]
+
+=== 2.2.2 / 04 Jan 2012
+
+* Fixed: Connection hangs on ServerVersion.new(socket, logger) [muffl0n]
+* Avoid dying when unsupported auth mechanisms are defined [pcn]
+
+=== 2.2.1 / 24 Aug 2011
+
+* Do not prompt any passphrases before trying all identities from agent. [musybite]
+ (see: http://net-ssh.lighthouseapp.com/projects/36253-net-ssh/tickets/30)
+
+=== 2.2.0 / 16 Aug 2011
+
+* Add support for forward a local UNIX domain socket to a remote TCP socket. [Mark Imbriaco]
+
+=== 2.1.4 / 3 Apr 2011
+
+* Add ConnectionTimeout exception class. [Joel Watson]
+ See: https://github.com/net-ssh/net-ssh-multi/pull/1
+
+
+=== 2.1.3 / 2 Mar 2011
+
+* Call to transport.closed should be transport.close [Woon Jung]
+
+
+=== 2.1.2 / 1 Mar 2011
+
+* Fix for Net::SSH Continues to attempt authentication when notified it is not allowed [Eric Hodel]
+ (see: http://net-ssh.lighthouseapp.com/projects/36253-net-ssh/tickets/26)
+* Fix for transport won't be closed if authentication fails [Patrick Marchi]
+
+
+=== 2.1 / 19 Jan 2011
+
+* Support "IdentitiesOnly" directive (LH-24) [Musy Bite, Edmund Haselwanter]
+* Speeding up the Loggable module (LH-23) [robbebob]
+
+
+=== 2.0.24 / 14 Jan 2011
+
+* Fix for process code to correctly wait until remote_id is set before sending any output, including eof. [Daniel Pittman, Markus Roberts]
+* Fix circular require warning in Ruby 1.9.2 [Gavin Brock]
+
+
+=== 2.0.23 / 03 Jun 2010
+
+* delay CHANNEL_EOF packet until output buffer is empty [Rich Lane]
+
+Previously, calling #eof! after #send_data would result in the CHANNEL_EOF
+packet being sent immediately, ahead of the data in the output buffer. Now
+buffer becomes empty.
+
+
+=== 2.0.22 / 20 Apr 2010
+
+* Fix for: "Parsing the config errors out because it coerces the "1" into an integer and then tries to split it on spaces for multiple host checking." (http://net-ssh.lighthouseapp.com/projects/36253/tickets/10) [Lee Marlow]
+
+
+=== 2.0.21 / 20 Mar 2010
+
+* Fix for "IdentifyFile" in ~/.ssh/config does not work if no "Host" statement is given (http://net-ssh.lighthouseapp.com/projects/36253/tickets/9-identifyfile-in-sshconfig-does-not-work-if-no-host-statement-is-given#ticket-9-5) [xbaldauf, Delano Mandelbaum]
+
+* Fix for client closes a forwarded connection, but the server is reading, net-ssh terminates with IOError socket closed (http://net-ssh.lighthouseapp.com/projects/36253/tickets/7) [Miklós Fazekas]
+
+* Fix for client force closes (RST) a forwarded connection, but server is reading, net-ssh terminates with exception [Miklós Fazekas]
+
+* Fix for server closes the sending side, the on_eof is not handled. [Miklós Fazekas]
+
+* Removed Hanna dependency in Rakefile [Delano Mandelbaum]
+
+
+=== 2.0.20 / 10 Feb 2010
+
+* Support "ProxyCommand none" directive [Andy Lo-A-Foe]
+
+=== 2.0.19 / 16 Jan 2010
+
+* Support plus sign in sshconfig hostname [Jason Weathered]
+
+=== 2.0.18 / 15 Jan 2010
+
+* Fix related to #recv(1) to #readpartial change in 2.0.16 [Hans de Graaff, Delano Mandelbaum]
+
+
+=== 2.0.17 / 14 Dec 2009
+
+* Don't load net/ssh/authentication/pageant on Windows with Ruby 1.9 [Travis Reeder, Delano Mandelbaum]
+
+
+=== 2.0.16 / 28 Nov 2009
+
+* Fix for "multiple hosts are separated by whitespace" [Akinori MUSHA]
+
+* Add support for the ProxyCommand directive [Akinori MUSHA]
+
+* Switched from #recv(1) to #readpartial in lib/net/ssh/transport/server_version.rb, so that closed sockets are recognized [Alex Peuchert]
+
+
+=== 2.0.15 / 03 Sep 2009
+
+* Scale back IO#select patch so it mutexes only zero-timeout calls [Daniel Azuma, Will Bryant]
+
+
+=== 2.0.14 / 28 Aug 2009
+
+* Fix for IO#select threading bug in Ruby 1.8 (LH-1) [Daniel Azuma]
+
+* Fix for "uninitialized constant OpenSSL::Digest::MD5" exception in Net::SFTP [DL Redden]
+
+
+=== 2.0.13 / 17 Aug 2009
+
+* Added fix for hanging in ServerVersion#negotiate! when using SOCKS5 proxy (GH-9) [Gerald Talton]
+
+* Added support for specifying a list of hosts in .ssh/config, with tests (GH-6) [ckoehler, Delano Mandelbaum]
+
+* Added tests for arcfour128/256/512 lengths, encryption, and decryption [Delano Mandelbaum]
+
+* Skip packet stream tests for arcfour128/256/512 [Delano Mandelbaum]
+
+* Fix for OpenSSL cipher key length because it always returns 16, even when 32 byte keys are required, e.g. for arcfour256 and arcfour512 ciphers [Karl Varga]
+
+
+=== 2.0.12 / 08 Jun 2009
+
+* Applied patch for arcfour128 and arcfour256 support [Denis Bernard]
+
+* Use unbuffered reads when negotiating the protocol version [Steven Hazel]
+
+
+=== 2.0.11 / 24 Feb 2009
+
+* Add :key_data option for specifying raw private keys in PEM format [Alex Holems, Andrew Babkin]
+
+
+=== 2.0.10 / 4 Feb 2009
+
+* Added Net::SSH.configuration_for to make it easier to query the SSH configuration file(s) [Jamis Buck]
+
+
+=== 2.0.9 / 1 Feb 2009
+
+* Specifying non-nil user argument overrides user in .ssh/config [Jamis Buck]
+
+* Ignore requests for non-existent channels (workaround ssh server bug) [Jamis Buck]
+
+* Add terminate! method for hard shutdown scenarios [Jamis Buck]
+
+* Revert to pre-2.0.7 key-loading behavior by default, but load private-key if public-key doesn't exist [Jamis Buck]
+
+* Make sure :passphrase option gets passed to key manager [Bob Cotton]
+
+
+=== 2.0.8 / 29 December 2008
+
+* Fix private key change from 2.0.7 so that keys are loaded just-in-time, avoiding unecessary prompts from encrypted keys. [Jamis Buck]
+
+
+=== 2.0.7 / 29 December 2008
+
+* Make key manager use private keys instead of requiring public key to exist [arilerner@mac.com]
+
+* Fix failing tests [arilerner@mac.com]
+
+* Don't include pageant when running under JRuby [Angel N. Sciortino]
+
+
+=== 2.0.6 / 6 December 2008
+
+* Update the Manifest file so that the gem includes all necessary files [Jamis Buck]
+
+
+=== 2.0.5 / 6 December 2008
+
+* Make the Pageant interface comply with more of the Socket interface to avoid related errors [Jamis Buck]
+
+* Don't busy-wait on session close for remaining channels to close [Will Bryant]
+
+* Ruby 1.9 compatibility [Jamis Buck]
+
+* Fix Cipher#final to correctly flag a need for a cipher reset [Jamis Buck]
+
+
+=== 2.0.4 / 27 Aug 2008
+
+* Added Connection::Session#closed? and Transport::Session#closed? [Jamis Buck]
+
+* Numeric host names in .ssh/config are now parsed correct [Yanko Ivanov]
+
+* Make sure the error raised when a public key file is malformed is more informative than a MethodMissing error [Jamis Buck]
+
+* Cipher#reset is now called after Cipher#final, with the last n bytes used as the next initialization vector [Jamis Buck]
+
+
+=== 2.0.3 / 27 Jun 2008
+
+* Make Net::SSH::Version comparable [Brian Candler]
+
+* Fix errors in port forwarding when a channel could not be opened due to a typo in the exception name [Matthew Todd]
+
+* Use #chomp instead of #strip when cleaning the version string reported by the remote host, so that trailing whitespace is preserved (this is to play nice with servers like Mocana SSH) [Timo Gatsonides]
+
+* Correctly parse ssh_config entries with eq-sign delimiters [Jamis Buck]
+
+* Ignore malformed ssh_config entries [Jamis Buck]
+
+=== 2.0.2 / 29 May 2008
+
+* Make sure the agent client understands both RSA "identities answers" [Jamis Buck]
+
+* Fixed key truncation bug that caused hmacs other than SHA1 to fail with "corrupt hmac" errors [Jamis Buck]
+
+* Fix detection and loading of public keys when the keys don't actually exist [David Dollar]
+
+
+=== 2.0.1 / 5 May 2008
+
+* Teach Net::SSH about a handful of default key names [Jamis Buck]
+
+
+=== 2.0.0 / 1 May 2008
+
+* Allow the :verbose argument to accept symbols (:debug, etc.) as well as Logger level constants (Logger::DEBUG, etc.) [Jamis Buck]
+
+
+=== 2.0 Preview Release 4 (1.99.3) / 19 Apr 2008
+
+* Make sure HOME is set to something sane, even on OS's that don't set it by default [Jamis Buck]
+
+* Add a :passphrase option to specify the passphrase to use with private keys [Francis Sullivan]
+
+* Open a new auth agent connection for every auth-agent channel request [Jamis Buck]
+
+
+=== 2.0 Preview Release 3 (1.99.2) / 10 Apr 2008
+
+* Session properties [Jamis Buck]
+
+* Make channel open failure work with a callback so that failures can be handled similarly to successes [Jamis Buck]
+
+
+=== 2.0 Preview Release 2 (1.99.1) / 22 Mar 2008
+
+* Partial support for ~/.ssh/config (and related) SSH configuration files [Daniel J. Berger, Jamis Buck]
+
+* Added Net::SSH::Test to facilitate testing complex SSH state machines [Jamis Buck]
+
+* Reworked Net::SSH::Prompt to use conditionally-selected modules [Jamis Buck, suggested by James Rosen]
+
+* Added Channel#eof? and Channel#eof! [Jamis Buck]
+
+* Fixed bug in strict host key verifier on cache miss [Mike Timm]
+
+
+=== 2.0 Preview Release 1 (1.99.0) / 21 Aug 2007
+
+* First preview release of Net::SSH v2
diff -Nru ruby-net-ssh-2.2.1/LICENSE.txt ruby-net-ssh-2.6.7/LICENSE.txt
--- ruby-net-ssh-2.2.1/LICENSE.txt 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/LICENSE.txt 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,19 @@
+Copyright © 2008 Jamis Buck
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the ‘Software’), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff -Nru ruby-net-ssh-2.2.1/Manifest ruby-net-ssh-2.6.7/Manifest
--- ruby-net-ssh-2.2.1/Manifest 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/Manifest 2013-06-16 17:57:19.000000000 +0000
@@ -47,17 +47,29 @@
lib/net/ssh/transport/algorithms.rb
lib/net/ssh/transport/cipher_factory.rb
lib/net/ssh/transport/constants.rb
+lib/net/ssh/transport/ctr.rb
lib/net/ssh/transport/hmac.rb
lib/net/ssh/transport/hmac/abstract.rb
lib/net/ssh/transport/hmac/md5.rb
lib/net/ssh/transport/hmac/md5_96.rb
lib/net/ssh/transport/hmac/none.rb
+lib/net/ssh/transport/hmac/ripemd160.rb
lib/net/ssh/transport/hmac/sha1.rb
lib/net/ssh/transport/hmac/sha1_96.rb
+lib/net/ssh/transport/hmac/sha2_256.rb
+lib/net/ssh/transport/hmac/sha2_256_96.rb
+lib/net/ssh/transport/hmac/sha2_512.rb
+lib/net/ssh/transport/hmac/sha2_512_96.rb
lib/net/ssh/transport/identity_cipher.rb
+lib/net/ssh/transport/key_expander.rb
lib/net/ssh/transport/kex.rb
lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb
+lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb
lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb
+lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb
+lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb
+lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb
+lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb
lib/net/ssh/transport/openssl.rb
lib/net/ssh/transport/packet_stream.rb
lib/net/ssh/transport/server_version.rb
@@ -65,6 +77,7 @@
lib/net/ssh/transport/state.rb
lib/net/ssh/verifiers/lenient.rb
lib/net/ssh/verifiers/null.rb
+lib/net/ssh/verifiers/secure.rb
lib/net/ssh/verifiers/strict.rb
lib/net/ssh/version.rb
net-ssh.gemspec
@@ -96,10 +109,20 @@
test/transport/hmac/test_md5.rb
test/transport/hmac/test_md5_96.rb
test/transport/hmac/test_none.rb
+test/transport/hmac/test_ripemd160.rb
test/transport/hmac/test_sha1.rb
test/transport/hmac/test_sha1_96.rb
+test/transport/hmac/test_sha2_256.rb
+test/transport/hmac/test_sha2_256_96.rb
+test/transport/hmac/test_sha2_512.rb
+test/transport/hmac/test_sha2_512_96.rb
test/transport/kex/test_diffie_hellman_group1_sha1.rb
+test/transport/kex/test_diffie_hellman_group14_sha1.rb
test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb
+test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb
+test/transport/kex/test_ecdh_sha2_nistp256.rb
+test/transport/kex/test_ecdh_sha2_nistp384.rb
+test/transport/kex/test_ecdh_sha2_nistp521.rb
test/transport/test_algorithms.rb
test/transport/test_cipher_factory.rb
test/transport/test_hmac.rb
diff -Nru ruby-net-ssh-2.2.1/README.rdoc ruby-net-ssh-2.6.7/README.rdoc
--- ruby-net-ssh-2.2.1/README.rdoc 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/README.rdoc 2013-06-16 17:57:19.000000000 +0000
@@ -1,10 +1,14 @@
-= Net::SSH
+= Net::SSH 2.x
* Docs: http://net-ssh.github.com/net-ssh
-* Issues: http://net-ssh.lighthouseapp.com/
-* Codes: http://github.com/net-ssh/net-ssh
+* Issues: https://github.com/net-ssh/net-ssh/issues
+* Codes: https://github.com/net-ssh/net-ssh
* Email: net-ssh@solutious.com
+
+As of v2.6.4, all gem releases are signed. See INSTALL.
+
+
== DESCRIPTION:
Net::SSH is a pure-Ruby implementation of the SSH2 client protocol. It allows you to write programs that invoke and interact with processes on remote servers, via SSH2.
@@ -47,12 +51,12 @@
# "on_data" is called when the process writes something to stdout
ch.on_data do |c, data|
- $STDOUT.print data
+ $stdout.print data
end
# "on_extended_data" is called when the process writes something to stderr
ch.on_extended_data do |c, type, data|
- $STDERR.print data
+ $stderr.print data
end
ch.on_close { puts "done!" }
@@ -88,6 +92,34 @@
* gem install net-ssh (might need sudo privileges)
+NOTE: If you are running on jruby you need to install jruby-pageant manually (gemspec doesn't allow for platform specific dependencies).
+
+However, in order to be sure the code you're installing hasn't been tampered with, it's recommended that you verify the signiture[http://docs.rubygems.org/read/chapter/21]. To do this, you need to add my public key as a trusted certificate (you only need to do this once):
+
+ # Add the public key as a trusted certificate
+ # (You only need to do this once)
+ $ curl -O https://raw.github.com/net-ssh/net-ssh/master/gem-public_cert.pem
+ $ gem cert --add gem-public_cert.pem
+
+Then, when install the gem, do so with high security:
+
+ $ gem install net-ssh -P HighSecurity
+
+If you don't add the public key, you'll see an error like "Couldn't verify data signature". If you're still having trouble let me know and I'll give you a hand.
+
+== RUBY 1.8 SUPPORT
+
+net-ssh supports Ruby 1.8.x up until the 2.5.1 release. Later releases will work but the test suite is no longer guaranteed to pass all tests.
+
+== JRUBY 1.6
+
+There is an issue with jruby-openssl that produces the following error in jruby 1.6:
+
+ wrong number of arguments (2 for 1)
+ /home/offers/tracking/shared/bundle/jruby/1.8/gems/net-ssh-2.6.0/lib/net/ssh/key_factory.rb:77:in `load_data_private_key'
+
+You can downgrade jruby-openssl to version 0.7.4 (before they added the PKey.read method) to resolve it or upgrade jruby to 1.7. See issue #61 for more info: https://github.com/net-ssh/net-ssh/issues/61.
+
== ARCFOUR SUPPORT:
@@ -96,7 +128,7 @@
Ruby's OpenSSL bindings always return a key length of 16 for RC4 ciphers, which means that when we try to use ARCFOUR256 or higher, Net::SSH generates keys which are consistently too short - 16 bytes as opposed to 32 bytes - resulting in the following error:
OpenSSL::CipherError: key length too short
-
+
My patch simply instructs Net::SSH to build keys of the the proper length, regardless of the required key length reported by OpenSSL.
You should also be aware that your OpenSSL C libraries may also contain this bug. I've updated to 0.9.8k, but according to this thread[https://bugzilla.mindrot.org/show_bug.cgi?id=1291], the bug existed as recently as 0.9.8e! I've manually taken a look at my header files and they look ok, which is what makes me think it's a bug in the Ruby implementation.
@@ -105,17 +137,17 @@
$ openssl version
OpenSSL 0.9.8k 25 Mar 2009
-
+
After installing this gem, verify that Net::SSH is generating keys of the correct length by running the script support/arcfour_check.rb:
$ ruby arcfour_support.rb
-
+
which should produce the following:
arcfour128: [16, 8] OpenSSL::Cipher::Cipher
arcfour256: [32, 8] OpenSSL::Cipher::Cipher
arcfour512: [64, 8] OpenSSL::Cipher::Cipher
-
+
== RUNNING TESTS
diff -Nru ruby-net-ssh-2.2.1/Rakefile ruby-net-ssh-2.6.7/Rakefile
--- ruby-net-ssh-2.2.1/Rakefile 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/Rakefile 2013-06-16 17:57:19.000000000 +0000
@@ -1,86 +1,62 @@
-require 'rubygems'
-require 'rake/clean'
-require 'rake/gempackagetask'
-require 'fileutils'
-include FileUtils
+require "rubygems"
+require "rake"
+require "rake/clean"
+require "rdoc/task"
+
+task :default => ["build"]
+CLEAN.include [ 'pkg', 'rdoc' ]
+name = "net-ssh"
+
+$:.unshift File.join(File.dirname(__FILE__), 'lib')
+require "net/ssh"
+version = Net::SSH::Version::CURRENT
begin
- require 'hanna/rdoctask'
-rescue LoadError
- require 'rdoc/task'
-end
-
-
-task :default => :package
-
-# CONFIG =============================================================
-
-# Change the following according to your needs
-README = "README.rdoc"
-CHANGES = "CHANGELOG.rdoc"
-THANKS = 'THANKS.rdoc'
-
-# Files and directories to be deleted when you run "rake clean"
-CLEAN.include [ 'pkg', '*.gem', '.config', 'doc']
-
-# Virginia assumes your project and gemspec have the same name
-name = 'net-ssh'
-load "#{name}.gemspec"
-version = @spec.version
-
-# That's it! The following defaults should allow you to get started
-# on other things.
-
-
-# TESTS/SPECS =========================================================
-
-
-
-# INSTALL =============================================================
-
-Rake::GemPackageTask.new(@spec) do |p|
- p.need_tar = true if RUBY_PLATFORM !~ /mswin/
-end
-
-task :build => [ :package ]
-task :release => [ :rdoc, :package ]
-task :install => [ :rdoc, :package ] do
- sh %{sudo gem install pkg/#{name}-#{version}.gem}
-end
-task :uninstall => [ :clean ] do
- sh %{sudo gem uninstall #{name}}
-end
+ require "jeweler"
+ Jeweler::Tasks.new do |s|
+ s.version = version
+ s.name = name
+ s.rubyforge_project = s.name
+ s.summary = "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol."
+ s.description = s.summary + " It allows you to write programs that invoke and interact with processes on remote servers, via SSH2."
+ s.email = "net-ssh@solutious.com"
+ s.homepage = "https://github.com/net-ssh/net-ssh"
+ s.authors = ["Jamis Buck", "Delano Mandelbaum"]
+
+ # Note: this is run at package time not install time so if you are
+ # running on jruby, you need to install jruby-pageant manually.
+ if RUBY_PLATFORM == "java"
+ s.add_dependency 'jruby-pageant', ">=1.1.1"
+ end
+ s.add_development_dependency 'test-unit'
+ s.add_development_dependency 'mocha'
-# RUBYFORGE RELEASE / PUBLISH TASKS ==================================
+ s.license = "MIT"
-if @spec.rubyforge_project
- desc 'Publish website to rubyforge'
- task 'publish:rdoc' => 'doc/index.html' do
- sh "scp -r doc/* rubyforge.org:/var/www/gforge-projects/#{name}/ssh/v2/api/"
- end
-
- desc 'Public release to rubyforge'
- task 'publish:gem' => [:package] do |t|
- sh <<-end
- rubyforge add_release -o Any -a #{CHANGES} -f -n #{README} #{name} #{name} #{@spec.version} pkg/#{name}-#{@spec.version}.gem &&
- rubyforge add_file -o Any -a #{CHANGES} -f -n #{README} #{name} #{name} #{@spec.version} pkg/#{name}-#{@spec.version}.tgz
- end
+ s.signing_key = File.join('/mnt/gem/', 'gem-private_key.pem')
+ s.cert_chain = ['gem-public_cert.pem']
end
+ Jeweler::GemcutterTasks.new
+rescue LoadError
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
end
-
-
-# RUBY DOCS TASK ==================================
-
-Rake::RDocTask.new do |t|
- t.rdoc_dir = 'doc'
- t.title = @spec.summary
- t.options << '--line-numbers' << '-A cattr_accessor=object'
- t.options << '--charset' << 'utf-8'
- t.rdoc_files.include(README)
- t.rdoc_files.include(CHANGES)
- t.rdoc_files.include(THANKS)
- t.rdoc_files.include('lib/**/*.rb')
+require 'rake/testtask'
+Rake::TestTask.new do |t|
+ t.libs = ["lib", "test"]
+end
+
+extra_files = %w[LICENSE.txt THANKS.txt CHANGES.txt ]
+RDoc::Task.new do |rdoc|
+ rdoc.rdoc_dir = "rdoc"
+ rdoc.title = "#{name} #{version}"
+ rdoc.generator = 'hanna' # gem install hanna-nouveau
+ rdoc.main = 'README.rdoc'
+ rdoc.rdoc_files.include("README*")
+ rdoc.rdoc_files.include("bin/*.rb")
+ rdoc.rdoc_files.include("lib/**/*.rb")
+ extra_files.each { |file|
+ rdoc.rdoc_files.include(file) if File.exists?(file)
+ }
end
-
diff -Nru ruby-net-ssh-2.2.1/THANKS.rdoc ruby-net-ssh-2.6.7/THANKS.rdoc
--- ruby-net-ssh-2.2.1/THANKS.rdoc 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/THANKS.rdoc 1970-01-01 00:00:00.000000000 +0000
@@ -1,19 +0,0 @@
-Net::SSH was originally written by Jamis Buck . In
-addition, the following individuals are gratefully acknowledged for their
-contributions:
-
-GOTOU Yuuzou
- * help and code related to OpenSSL
-
-Guillaume Marçais
- * support for communicating with the the PuTTY "pageant" process
-
-Daniel Berger
- * help getting unit tests in earlier Net::SSH versions to pass in Windows
- * initial version of Net::SSH::Config provided inspiration and encouragement
-
-Chris Andrews and Lee Jensen
- * support for ssh agent forwarding
-
-Hiroshi Nakamura
- * fixed errors with JRuby tests
\ No newline at end of file
diff -Nru ruby-net-ssh-2.2.1/THANKS.txt ruby-net-ssh-2.6.7/THANKS.txt
--- ruby-net-ssh-2.2.1/THANKS.txt 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/THANKS.txt 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,85 @@
+Net::SSH was originally written by Jamis Buck . It
+is currently maintained by Delano Mandelbaum . In
+addition, the following individuals are gratefully acknowledged for their
+contributions:
+
+GOTOU Yuuzou
+ * help and code related to OpenSSL
+
+Guillaume Marçais
+ * support for communicating with the the PuTTY "pageant" process
+
+Daniel Berger
+ * help getting unit tests in earlier Net::SSH versions to pass in Windows
+ * initial version of Net::SSH::Config provided inspiration and encouragement
+
+Chris Andrews and Lee Jensen
+ * support for ssh agent forwarding
+
+Hiroshi Nakamura
+ * fixed errors with JRuby tests
+
+Andreas Wolff
+mhuffnagle
+ohrite
+iltempo
+nagachika
+Nobuhiro IMAI
+arturaz
+dubspeed
+Andy Brody
+Marco Sandrini
+Ryosuke Yamazaki
+muffl0n
+pcn
+musybite
+Mark Imbriaco
+Joel Watson
+Woon Jung
+Edmund Haselwanter
+robbebob
+Daniel Pittman
+Markus Roberts
+Gavin Brock
+Rich Lane
+Lee Marlow
+xbaldauf
+Delano Mandelbaum
+Miklós Fazekas
+Andy Lo-A-Foe
+Jason Weathered
+Hans de Graaff
+Travis Reeder
+Akinori MUSHA
+Alex Peuchert
+Daniel Azuma
+Will Bryant
+Gerald Talton
+ckoehler
+Karl Varga
+Denis Bernard
+Steven Hazel
+Alex Holems
+Andrew Babkin
+Bob Cotton
+Yanko Ivanov
+Angel N. Sciortino
+arilerner@mac.com
+David Dollar
+Timo Gatsonides
+Matthew Todd
+Brian Candler
+Francis Sullivan
+James Rosen
+Mike Timm
+guns
+devrandom
+kachick
+Pablo Merino
+thedarkone
+czarneckid
+jbarnette
+watsonian
+Grant Hutchins
+Michael Schubert
+mtrudel
Binary files /tmp/f0ljLj0g_T/ruby-net-ssh-2.2.1/data.tar.gz.sig and /tmp/hhGNp0q16E/ruby-net-ssh-2.6.7/data.tar.gz.sig differ
diff -Nru ruby-net-ssh-2.2.1/debian/changelog ruby-net-ssh-2.6.7/debian/changelog
--- ruby-net-ssh-2.2.1/debian/changelog 2011-09-25 12:31:05.000000000 +0000
+++ ruby-net-ssh-2.6.7/debian/changelog 2013-10-02 08:50:04.000000000 +0000
@@ -1,3 +1,67 @@
+ruby-net-ssh (1:2.6.7-1ubuntu0~ubuntu12.04.1~ppa1) precise; urgency=low
+
+ * No-change backport to precise
+
+ -- Neil Wilson Wed, 02 Oct 2013 08:50:04 +0000
+
+ruby-net-ssh (1:2.6.7-1ubuntu0) saucy; urgency=low
+
+ * debian/patches/fix-missing-requires-in-test-files.patch: Cherry pick
+ upstream fix for missing requires.
+
+ -- Neil Wilson Wed, 02 Oct 2013 05:36:52 +0000
+
+ruby-net-ssh (1:2.6.7-1) unstable; urgency=low
+
+ * Team upload.
+ * New upstream release
+ - debian/patches/disable-rubygems-in-tests.patch: Refreshed
+ * debian/control: Drop the transitional packages
+ * debian/control: Bump Standards-Version to 3.9.4 (no further changes)
+ * debian/patches/skip-test-broken-on-1.8.patch: Also disable
+ test_from_should_measure_bytesize_of_utf_8_string_correctly check with
+ ruby 1.8
+ * debian/patches:
+ - Drop disable-test1.patch: The test is passing with ruby-test-unit 2.5.5
+ - Drop disable-config-tests.patch: The input config is now existing
+ - Drop fix-test-inheritance.patch: Tests are running as expected now
+
+ -- Laurent Bigonville Sat, 06 Jul 2013 21:04:36 +0200
+
+ruby-net-ssh (1:2.5.2-2) unstable; urgency=low
+
+ * Bumped build-dependency on gem2deb to >= 0.3.0~.
+
+ -- Paul van Tilburg Tue, 26 Jun 2012 23:54:08 +0200
+
+ruby-net-ssh (1:2.5.2-1) unstable; urgency=low
+
+ * New upstream release.
+ + Fixes crash looking for an unknown constant
+ Net::SSH::KnownHosts::SUPPORTED_TYPE (Closes: #675946)
+ * Added debian/patches/skip-test-broken-on-1.8.patch: a new test added in
+ this release is broken on Ruby 1.8, so it has to be skipped.
+
+ -- Antonio Terceiro Tue, 12 Jun 2012 15:46:54 -0300
+
+ruby-net-ssh (1:2.5.1-1) unstable; urgency=low
+
+ * New upstream release.
+ * debian/control:
+ + Added myself to uploaders.
+ + Bumped standards version to 3.9.3; no changes required.
+ + Added a depend on ruby-test-unit; the one shipped with ruby1.8 is too
+ old to run the tests.
+ + Set the priority of the lib*-ruby transitional packages to extra.
+ * debian/copyright: converted to the Debian copyright format version 1.0.
+ * debian/patches:
+ + Added patch disable-config-tests.patch to disable config tests for
+ which the input config does not actually exist.
+ + Added patch fix-test-inheritance.patch to fix some tests that use
+ inheritance but forget to require the parent test file.
+
+ -- Paul van Tilburg Thu, 24 May 2012 20:55:35 +0200
+
ruby-net-ssh (1:2.2.1-1) unstable; urgency=low
* New upstream release.
diff -Nru ruby-net-ssh-2.2.1/debian/control ruby-net-ssh-2.6.7/debian/control
--- ruby-net-ssh-2.2.1/debian/control 2011-09-25 12:18:11.000000000 +0000
+++ ruby-net-ssh-2.6.7/debian/control 2013-07-04 09:53:06.000000000 +0000
@@ -2,12 +2,11 @@
Section: ruby
Priority: optional
Maintainer: Debian Ruby Extras Maintainers
-Uploaders: Lucas Nussbaum
-DM-Upload-Allowed: yes
-Build-Depends: debhelper (>= 7.0.50~), gem2deb (>= 0.2.1), ruby-mocha
-Standards-Version: 3.9.2
-Vcs-Git: git://git.debian.org/pkg-ruby-extras/ruby-net-ssh.git
-Vcs-Browser: http://git.debian.org/?p=pkg-ruby-extras/ruby-net-ssh.git;a=summary
+Uploaders: Lucas Nussbaum , Paul van Tilburg
+Build-Depends: debhelper (>= 7.0.50~), gem2deb (>= 0.3.0~), ruby-mocha, ruby-test-unit
+Standards-Version: 3.9.4
+Vcs-Git: git://anonscm.debian.org/pkg-ruby-extras/ruby-net-ssh.git
+Vcs-Browser: http://anonscm.debian.org/gitweb?p=pkg-ruby-extras/ruby-net-ssh.git;a=summary
Homepage: http://net-ssh.github.com/net-ssh/
XS-Ruby-Versions: all
@@ -22,35 +21,3 @@
Net::SSH is a pure-Ruby implementation of the SSH protocol. It allows
you to write programs that invoke and interact with processes on remote
servers, via SSH.
-
-Package: libnet-ssh-ruby1.8
-Section: oldlibs
-Architecture: all
-Depends: ${misc:Depends}, ruby-net-ssh
-Description: Transitional package for ruby-net-ssh
- This is a transitional package to ease upgrades to the ruby-net-ssh
- package. It can safely be removed.
-
-Package: libnet-ssh2-ruby
-Section: oldlibs
-Architecture: all
-Depends: ${misc:Depends}, ruby-net-ssh
-Description: Transitional package for ruby-net-ssh
- This is a transitional package to ease upgrades to the ruby-net-ssh
- package. It can safely be removed.
-
-Package: libnet-ssh2-ruby1.8
-Section: oldlibs
-Architecture: all
-Depends: ${misc:Depends}, ruby-net-ssh
-Description: Transitional package for ruby-net-ssh
- This is a transitional package to ease upgrades to the ruby-net-ssh
- package. It can safely be removed.
-
-Package: libnet-ssh2-ruby1.9.1
-Section: oldlibs
-Architecture: all
-Depends: ${misc:Depends}, ruby-net-ssh
-Description: Transitional package for ruby-net-ssh
- This is a transitional package to ease upgrades to the ruby-net-ssh
- package. It can safely be removed.
diff -Nru ruby-net-ssh-2.2.1/debian/copyright ruby-net-ssh-2.6.7/debian/copyright
--- ruby-net-ssh-2.2.1/debian/copyright 2011-07-20 08:48:02.000000000 +0000
+++ ruby-net-ssh-2.6.7/debian/copyright 2013-07-02 12:14:50.000000000 +0000
@@ -1,36 +1,33 @@
-This package was debianized by Christopher Lunsford on
-Sun, 23 Aug 2009 06:02:42 -0500.
-
-It was downloaded from http://net-ssh.rubyforge.org/
-
-Upstream authors:
-
- Jamis Buck
-
-Copyright:
-
- Copyright © 2008 by Jamis Buck
-
-License:
-
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-The Debian packaging is © 2009, Christopher Lunsford and
-is licensed under the GPL, see `/usr/share/common-licenses/GPL-3'.
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: Net::SSH
+Upstream-Contact: Jamis Buck
+Source: http://net-ssh.rubyforge.org/
+
+Files: *
+Copyright: 2008, Jamis Buck
+License: Expat
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+ .
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+Comment: License referred to as MIT license.
+
+Files: debian/*
+Copyright: 2009, Christopher Lunsford
+License: GPL-3
+ On Debian systems, the complete text of the GNU General Public License
+ version 3 can be found in `/usr/share/common-licenses/GPL-3'.
diff -Nru ruby-net-ssh-2.2.1/debian/patches/disable-rubygems-in-tests.patch ruby-net-ssh-2.6.7/debian/patches/disable-rubygems-in-tests.patch
--- ruby-net-ssh-2.2.1/debian/patches/disable-rubygems-in-tests.patch 2011-07-20 08:48:02.000000000 +0000
+++ ruby-net-ssh-2.6.7/debian/patches/disable-rubygems-in-tests.patch 2013-07-02 17:06:33.000000000 +0000
@@ -6,10 +6,12 @@
--- a/test/common.rb
+++ b/test/common.rb
-@@ -1,5 +1,5 @@
+@@ -1,6 +1,6 @@
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
-gem "test-unit" # http://rubyforge.org/pipermail/test-unit-tracker/2009-July/000075.html
+-gem 'mocha'
+#gem "test-unit" # http://rubyforge.org/pipermail/test-unit-tracker/2009-July/000075.html
++#gem 'mocha'
require 'test/unit'
- require 'mocha'
+ require 'mocha/setup'
require 'net/ssh/buffer'
diff -Nru ruby-net-ssh-2.2.1/debian/patches/disable-test1.patch ruby-net-ssh-2.6.7/debian/patches/disable-test1.patch
--- ruby-net-ssh-2.2.1/debian/patches/disable-test1.patch 2011-09-25 12:22:07.000000000 +0000
+++ ruby-net-ssh-2.6.7/debian/patches/disable-test1.patch 1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-Description: disable a test that doesn't work with test/unit 2.2.0
-Forwarded: http://net-ssh.lighthouseapp.com/projects/36253/tickets/29-tests-fails-with-test-unit-220
-
---- a/test/transport/test_algorithms.rb
-+++ b/test/transport/test_algorithms.rb
-@@ -143,7 +143,7 @@ module Transport
- assert_raises(Net::SSH::Exception) { algorithms.accept_kexinit(kexinit) }
- end
-
-- def test_allow_when_not_pending_should_be_true_for_all_packets
-+ def est_allow_when_not_pending_should_be_true_for_all_packets
- (0..255).each do |type|
- packet = stub("packet", :type => type)
- assert algorithms.allow?(packet), type.to_s
diff -Nru ruby-net-ssh-2.2.1/debian/patches/fix-missing-requires-in-test-files.patch ruby-net-ssh-2.6.7/debian/patches/fix-missing-requires-in-test-files.patch
--- ruby-net-ssh-2.2.1/debian/patches/fix-missing-requires-in-test-files.patch 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/debian/patches/fix-missing-requires-in-test-files.patch 2013-10-02 05:36:51.000000000 +0000
@@ -0,0 +1,38 @@
+## Description: add some description
+## Origin/Author: add some origin or author
+## Bug: bug URL
+Index: ruby-net-ssh-2.6.7/test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb
+===================================================================
+--- ruby-net-ssh-2.6.7.orig/test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb 2013-06-16 17:57:19.000000000 +0000
++++ ruby-net-ssh-2.6.7/test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb 2013-10-02 05:35:08.190560615 +0000
+@@ -1,5 +1,6 @@
+ require 'common'
+ require 'net/ssh/transport/kex/diffie_hellman_group_exchange_sha1'
++require 'transport/kex/test_diffie_hellman_group_exchange_sha1'
+
+ module Transport; module Kex
+
+Index: ruby-net-ssh-2.6.7/test/transport/kex/test_ecdh_sha2_nistp384.rb
+===================================================================
+--- ruby-net-ssh-2.6.7.orig/test/transport/kex/test_ecdh_sha2_nistp384.rb 2013-06-16 17:57:19.000000000 +0000
++++ ruby-net-ssh-2.6.7/test/transport/kex/test_ecdh_sha2_nistp384.rb 2013-10-02 05:35:58.470560615 +0000
+@@ -3,6 +3,7 @@
+ unless defined?(OpenSSL::PKey::EC)
+ puts "Skipping tests for ecdh-sha2-nistp384 key exchange"
+ else
++ require 'transport/kex/test_ecdh_sha2_nistp256'
+ module Transport; module Kex
+ class TestEcdhSHA2NistP384 < TestEcdhSHA2NistP256
+
+Index: ruby-net-ssh-2.6.7/test/transport/kex/test_ecdh_sha2_nistp521.rb
+===================================================================
+--- ruby-net-ssh-2.6.7.orig/test/transport/kex/test_ecdh_sha2_nistp521.rb 2013-06-16 17:57:19.000000000 +0000
++++ ruby-net-ssh-2.6.7/test/transport/kex/test_ecdh_sha2_nistp521.rb 2013-10-02 05:36:46.742560615 +0000
+@@ -3,6 +3,7 @@
+ unless defined?(OpenSSL::PKey::EC)
+ puts "Skipping tests for ecdh-sha2-nistp521 key exchange"
+ else
++ require 'transport/kex/test_ecdh_sha2_nistp256'
+ module Transport; module Kex
+ class TestEcdhSHA2NistP521 < TestEcdhSHA2NistP256
+
diff -Nru ruby-net-ssh-2.2.1/debian/patches/series ruby-net-ssh-2.6.7/debian/patches/series
--- ruby-net-ssh-2.2.1/debian/patches/series 2011-07-20 08:48:02.000000000 +0000
+++ ruby-net-ssh-2.6.7/debian/patches/series 2013-10-02 05:34:12.000000000 +0000
@@ -1,2 +1,3 @@
-disable-test1.patch
disable-rubygems-in-tests.patch
+skip-test-broken-on-1.8.patch
+fix-missing-requires-in-test-files.patch
diff -Nru ruby-net-ssh-2.2.1/debian/patches/skip-test-broken-on-1.8.patch ruby-net-ssh-2.6.7/debian/patches/skip-test-broken-on-1.8.patch
--- ruby-net-ssh-2.2.1/debian/patches/skip-test-broken-on-1.8.patch 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/debian/patches/skip-test-broken-on-1.8.patch 2013-07-02 17:06:33.000000000 +0000
@@ -0,0 +1,28 @@
+Description: Skip test that is broken on Ruby 1.8
+Author: Antonio Terceiro
+
+---
+
+--- a/test/test_known_hosts.rb
++++ b/test/test_known_hosts.rb
+@@ -8,6 +8,6 @@ class TestKnownHosts < Test::Unit::TestC
+ keys = kh.keys_for("github.com")
+ assert_equal(1, keys.count)
+ assert_equal("ssh-rsa", keys[0].ssh_type)
+- end
++ end if RUBY_VERSION > '1.9'
+
+-end
+\ No newline at end of file
++end
+--- a/test/test_buffer.rb
++++ b/test/test_buffer.rb
+@@ -32,7 +32,7 @@ class TestBuffer < Test::Unit::TestCase
+ def test_from_should_measure_bytesize_of_utf_8_string_correctly
+ buffer = Net::SSH::Buffer.from(:string, "\u2603") # Snowman is 3 bytes
+ assert_equal "\0\0\0\3\u2603", buffer.to_s
+- end
++ end if RUBY_VERSION > '1.9'
+
+ def test_read_without_argument_should_read_to_end
+ buffer = new("hello world")
diff -Nru ruby-net-ssh-2.2.1/gem-public_cert.pem ruby-net-ssh-2.6.7/gem-public_cert.pem
--- ruby-net-ssh-2.2.1/gem-public_cert.pem 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/gem-public_cert.pem 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMQ8wDQYDVQQDDAZkZWxh
+bm8xGTAXBgoJkiaJk/IsZAEZFglzb2x1dGlvdXMxEzARBgoJkiaJk/IsZAEZFgNj
+b20wHhcNMTMwMjA2MTE1NzQ1WhcNMTQwMjA2MTE1NzQ1WjBBMQ8wDQYDVQQDDAZk
+ZWxhbm8xGTAXBgoJkiaJk/IsZAEZFglzb2x1dGlvdXMxEzARBgoJkiaJk/IsZAEZ
+FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDg1hMtl0XsMuUK
+AKTgYWv3gjj7vuEsE2EjT+vyBg8/LpqVVwZziiaebJT9IZiQ+sCFqbiakj0b53pI
+hg1yOaBEmH6/W0L7rwzqaRV9sW1eJs9JxFYQCnd67zUnzj8nnRlOjG+hhIG+Vsij
+npsGbt28pefuNZJjO5q2clAlfSniIIHfIsU7/StEYu6FUGOjnwryZ0r5yJlr9RrE
+Gs+q0DW8QnZ9UpAfuDFQZuIqeKQFFLE7nMmCGaA+0BN1nLl3fVHNbLHq7Avk8+Z+
+ZuuvkdscbHlO/l+3xCNQ5nUnHwq0ADAbMLOlmiYYzqXoWLjmeI6me/clktJCfN2R
+oZG3UQvvAgMBAAGjOTA3MAkGA1UdEwQCMAAwHQYDVR0OBBYEFMSJOEtHzE4l0azv
+M0JK0kKNToK1MAsGA1UdDwQEAwIEsDANBgkqhkiG9w0BAQUFAAOCAQEAtOdE73qx
+OH2ydi9oT2hS5f9G0y1Z70Tlwh+VGExyfxzVE9XwC+iPpJxNraiHYgF/9/oky7ZZ
+R9q0/tJneuhAenZdiQkX7oi4O3v9wRS6YHoWBxMPFKVRLNTzvVJsbmfpCAlp5/5g
+ps4wQFy5mibElGVlOobf/ghqZ25HS9J6kd0/C/ry0AUtTogsL7TxGwT4kbCx63ub
+3vywEEhsJUzfd97GCABmtQfRTldX/j7F1z/5wd8p+hfdox1iibds9ZtfaZA3KzKn
+kchWN9B6zg9r1XMQ8BM2Jz0XoPanPe354+lWwjpkRKbFow/ZbQHcCLCq24+N6b6g
+dgKfNDzwiDpqCA==
+-----END CERTIFICATE-----
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/authentication/agent/java_pageant.rb ruby-net-ssh-2.6.7/lib/net/ssh/authentication/agent/java_pageant.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/authentication/agent/java_pageant.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/authentication/agent/java_pageant.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,85 @@
+require 'jruby_pageant'
+
+module Net; module SSH; module Authentication
+
+ # This class implements an agent for JRuby + Pageant.
+ #
+ # Written by Artūras Šlajus
+ class Agent
+ include Loggable
+ include JRubyPageant
+
+ # A simple module for extending keys, to allow blobs and comments to be
+ # specified for them.
+ module Key
+ # :blob is used by OpenSSL::PKey::RSA#to_blob
+ attr_accessor :java_blob
+ attr_accessor :comment
+ end
+
+ # Instantiates a new agent object, connects to a running SSH agent,
+ # negotiates the agent protocol version, and returns the agent object.
+ def self.connect(logger=nil)
+ agent = new(logger)
+ agent.connect!
+ agent
+ end
+
+ # Creates a new Agent object, using the optional logger instance to
+ # report status.
+ def initialize(logger=nil)
+ self.logger = logger
+ end
+
+ # Connect to the agent process using the socket factory and socket name
+ # given by the attribute writers. If the agent on the other end of the
+ # socket reports that it is an SSH2-compatible agent, this will fail
+ # (it only supports the ssh-agent distributed by OpenSSH).
+ def connect!
+ debug { "connecting to Pageant ssh-agent (via java connector)" }
+ @agent_proxy = JRubyPageant.create
+ unless @agent_proxy.is_running
+ raise AgentNotAvailable, "Pageant is not running!"
+ end
+ debug { "connection to Pageant ssh-agent (via java connector) succeeded" }
+ rescue AgentProxyException => e
+ error { "could not connect to Pageant ssh-agent (via java connector)" }
+ raise AgentNotAvailable, e.message, e.backtrace
+ end
+
+ # Return an array of all identities (public keys) known to the agent.
+ # Each key returned is augmented with a +comment+ property which is set
+ # to the comment returned by the agent for that key.
+ def identities
+ debug { "getting identities from Pageant" }
+ @agent_proxy.get_identities.map do |identity|
+ blob = identity.get_blob
+ key = Buffer.new(String.from_java_bytes(blob)).read_key
+ key.extend(Key)
+ key.java_blob = blob
+ key.comment = String.from_java_bytes(identity.get_comment)
+ key
+ end
+ rescue AgentProxyException => e
+ raise AgentError, "Cannot get identities: #{e.message}", e.backtrace
+ end
+
+ # Simulate agent close. This agent reference is no longer able to
+ # query the agent.
+ def close
+ @agent_proxy = nil
+ end
+
+ # Using the agent and the given public key, sign the given data. The
+ # signature is returned in SSH2 format.
+ def sign(key, data)
+ signed = @agent_proxy.sign(key.java_blob, data.to_java_bytes)
+ String.from_java_bytes(signed)
+ rescue AgentProxyException => e
+ raise AgentError,
+ "agent could not sign data with requested identity: #{e.message}",
+ e.backtrace
+ end
+ end
+
+end; end; end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/authentication/agent/socket.rb ruby-net-ssh-2.6.7/lib/net/ssh/authentication/agent/socket.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/authentication/agent/socket.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/authentication/agent/socket.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,170 @@
+require 'net/ssh/transport/server_version'
+
+# Only load pageant on Windows
+if Net::SSH::Authentication::PLATFORM == :win32
+ require 'net/ssh/authentication/pageant'
+end
+
+module Net; module SSH; module Authentication
+
+ # This class implements a simple client for the ssh-agent protocol. It
+ # does not implement any specific protocol, but instead copies the
+ # behavior of the ssh-agent functions in the OpenSSH library (3.8).
+ #
+ # This means that although it behaves like a SSH1 client, it also has
+ # some SSH2 functionality (like signing data).
+ class Agent
+ include Loggable
+
+ # A simple module for extending keys, to allow comments to be specified
+ # for them.
+ module Comment
+ attr_accessor :comment
+ end
+
+ SSH2_AGENT_REQUEST_VERSION = 1
+ SSH2_AGENT_REQUEST_IDENTITIES = 11
+ SSH2_AGENT_IDENTITIES_ANSWER = 12
+ SSH2_AGENT_SIGN_REQUEST = 13
+ SSH2_AGENT_SIGN_RESPONSE = 14
+ SSH2_AGENT_FAILURE = 30
+ SSH2_AGENT_VERSION_RESPONSE = 103
+
+ SSH_COM_AGENT2_FAILURE = 102
+
+ SSH_AGENT_REQUEST_RSA_IDENTITIES = 1
+ SSH_AGENT_RSA_IDENTITIES_ANSWER1 = 2
+ SSH_AGENT_RSA_IDENTITIES_ANSWER2 = 5
+ SSH_AGENT_FAILURE = 5
+
+ # The underlying socket being used to communicate with the SSH agent.
+ attr_reader :socket
+
+ # Instantiates a new agent object, connects to a running SSH agent,
+ # negotiates the agent protocol version, and returns the agent object.
+ def self.connect(logger=nil)
+ agent = new(logger)
+ agent.connect!
+ agent.negotiate!
+ agent
+ end
+
+ # Creates a new Agent object, using the optional logger instance to
+ # report status.
+ def initialize(logger=nil)
+ self.logger = logger
+ end
+
+ # Connect to the agent process using the socket factory and socket name
+ # given by the attribute writers. If the agent on the other end of the
+ # socket reports that it is an SSH2-compatible agent, this will fail
+ # (it only supports the ssh-agent distributed by OpenSSH).
+ def connect!
+ begin
+ debug { "connecting to ssh-agent" }
+ @socket = agent_socket_factory.open(ENV['SSH_AUTH_SOCK'])
+ rescue
+ error { "could not connect to ssh-agent" }
+ raise AgentNotAvailable, $!.message
+ end
+ end
+
+ # Attempts to negotiate the SSH agent protocol version. Raises an error
+ # if the version could not be negotiated successfully.
+ def negotiate!
+ # determine what type of agent we're communicating with
+ type, body = send_and_wait(SSH2_AGENT_REQUEST_VERSION, :string, Transport::ServerVersion::PROTO_VERSION)
+
+ if type == SSH2_AGENT_VERSION_RESPONSE
+ raise NotImplementedError, "SSH2 agents are not yet supported"
+ elsif type != SSH_AGENT_RSA_IDENTITIES_ANSWER1 && type != SSH_AGENT_RSA_IDENTITIES_ANSWER2
+ raise AgentError, "unknown response from agent: #{type}, #{body.to_s.inspect}"
+ end
+ end
+
+ # Return an array of all identities (public keys) known to the agent.
+ # Each key returned is augmented with a +comment+ property which is set
+ # to the comment returned by the agent for that key.
+ def identities
+ type, body = send_and_wait(SSH2_AGENT_REQUEST_IDENTITIES)
+ raise AgentError, "could not get identity count" if agent_failed(type)
+ raise AgentError, "bad authentication reply: #{type}" if type != SSH2_AGENT_IDENTITIES_ANSWER
+
+ identities = []
+ body.read_long.times do
+ key = Buffer.new(body.read_string).read_key
+ key.extend(Comment)
+ key.comment = body.read_string
+ identities.push key
+ end
+
+ return identities
+ end
+
+ # Closes this socket. This agent reference is no longer able to
+ # query the agent.
+ def close
+ @socket.close
+ end
+
+ # Using the agent and the given public key, sign the given data. The
+ # signature is returned in SSH2 format.
+ def sign(key, data)
+ type, reply = send_and_wait(SSH2_AGENT_SIGN_REQUEST, :string, Buffer.from(:key, key), :string, data, :long, 0)
+
+ if agent_failed(type)
+ raise AgentError, "agent could not sign data with requested identity"
+ elsif type != SSH2_AGENT_SIGN_RESPONSE
+ raise AgentError, "bad authentication response #{type}"
+ end
+
+ return reply.read_string
+ end
+
+ private
+
+ # Returns the agent socket factory to use.
+ def agent_socket_factory
+ if Net::SSH::Authentication::PLATFORM == :win32
+ Pageant::socket_factory
+ else
+ UNIXSocket
+ end
+ end
+
+ # Send a new packet of the given type, with the associated data.
+ def send_packet(type, *args)
+ buffer = Buffer.from(*args)
+ data = [buffer.length + 1, type.to_i, buffer.to_s].pack("NCA*")
+ debug { "sending agent request #{type} len #{buffer.length}" }
+ @socket.send data, 0
+ end
+
+ # Read the next packet from the agent. This will return a two-part
+ # tuple consisting of the packet type, and the packet's body (which
+ # is returned as a Net::SSH::Buffer).
+ def read_packet
+ buffer = Net::SSH::Buffer.new(@socket.read(4))
+ buffer.append(@socket.read(buffer.read_long))
+ type = buffer.read_byte
+ debug { "received agent packet #{type} len #{buffer.length-4}" }
+ return type, buffer
+ end
+
+ # Send the given packet and return the subsequent reply from the agent.
+ # (See #send_packet and #read_packet).
+ def send_and_wait(type, *args)
+ send_packet(type, *args)
+ read_packet
+ end
+
+ # Returns +true+ if the parameter indicates a "failure" response from
+ # the agent, and +false+ otherwise.
+ def agent_failed(type)
+ type == SSH_AGENT_FAILURE ||
+ type == SSH2_AGENT_FAILURE ||
+ type == SSH_COM_AGENT2_FAILURE
+ end
+ end
+
+end; end; end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/authentication/agent.rb ruby-net-ssh-2.6.7/lib/net/ssh/authentication/agent.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/authentication/agent.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/authentication/agent.rb 2013-06-16 17:57:19.000000000 +0000
@@ -1,179 +1,23 @@
require 'net/ssh/buffer'
require 'net/ssh/errors'
require 'net/ssh/loggable'
-require 'net/ssh/transport/server_version'
-
-# Only load pageant on Windows, Ruby 1.8.x
-if File::ALT_SEPARATOR && !(RUBY_PLATFORM =~ /java/) && RUBY_VERSION < "1.9"
- require 'net/ssh/authentication/pageant'
-end
module Net; module SSH; module Authentication
+ PLATFORM = File::ALT_SEPARATOR \
+ ? RUBY_PLATFORM =~ /java/ ? :java_win32 : :win32 \
+ : RUBY_PLATFORM =~ /java/ ? :java : :unix
# A trivial exception class for representing agent-specific errors.
class AgentError < Net::SSH::Exception; end
# An exception for indicating that the SSH agent is not available.
class AgentNotAvailable < AgentError; end
-
- # This class implements a simple client for the ssh-agent protocol. It
- # does not implement any specific protocol, but instead copies the
- # behavior of the ssh-agent functions in the OpenSSH library (3.8).
- #
- # This means that although it behaves like a SSH1 client, it also has
- # some SSH2 functionality (like signing data).
- class Agent
- include Loggable
-
- # A simple module for extending keys, to allow comments to be specified
- # for them.
- module Comment
- attr_accessor :comment
- end
-
- SSH2_AGENT_REQUEST_VERSION = 1
- SSH2_AGENT_REQUEST_IDENTITIES = 11
- SSH2_AGENT_IDENTITIES_ANSWER = 12
- SSH2_AGENT_SIGN_REQUEST = 13
- SSH2_AGENT_SIGN_RESPONSE = 14
- SSH2_AGENT_FAILURE = 30
- SSH2_AGENT_VERSION_RESPONSE = 103
-
- SSH_COM_AGENT2_FAILURE = 102
-
- SSH_AGENT_REQUEST_RSA_IDENTITIES = 1
- SSH_AGENT_RSA_IDENTITIES_ANSWER1 = 2
- SSH_AGENT_RSA_IDENTITIES_ANSWER2 = 5
- SSH_AGENT_FAILURE = 5
-
- # The underlying socket being used to communicate with the SSH agent.
- attr_reader :socket
-
- # Instantiates a new agent object, connects to a running SSH agent,
- # negotiates the agent protocol version, and returns the agent object.
- def self.connect(logger=nil)
- agent = new(logger)
- agent.connect!
- agent.negotiate!
- agent
- end
-
- # Creates a new Agent object, using the optional logger instance to
- # report status.
- def initialize(logger=nil)
- self.logger = logger
- end
-
- # Connect to the agent process using the socket factory and socket name
- # given by the attribute writers. If the agent on the other end of the
- # socket reports that it is an SSH2-compatible agent, this will fail
- # (it only supports the ssh-agent distributed by OpenSSH).
- def connect!
- begin
- debug { "connecting to ssh-agent" }
- @socket = agent_socket_factory.open(ENV['SSH_AUTH_SOCK'])
- rescue
- error { "could not connect to ssh-agent" }
- raise AgentNotAvailable, $!.message
- end
- end
-
- # Attempts to negotiate the SSH agent protocol version. Raises an error
- # if the version could not be negotiated successfully.
- def negotiate!
- # determine what type of agent we're communicating with
- type, body = send_and_wait(SSH2_AGENT_REQUEST_VERSION, :string, Transport::ServerVersion::PROTO_VERSION)
-
- if type == SSH2_AGENT_VERSION_RESPONSE
- raise NotImplementedError, "SSH2 agents are not yet supported"
- elsif type != SSH_AGENT_RSA_IDENTITIES_ANSWER1 && type != SSH_AGENT_RSA_IDENTITIES_ANSWER2
- raise AgentError, "unknown response from agent: #{type}, #{body.to_s.inspect}"
- end
- end
-
- # Return an array of all identities (public keys) known to the agent.
- # Each key returned is augmented with a +comment+ property which is set
- # to the comment returned by the agent for that key.
- def identities
- type, body = send_and_wait(SSH2_AGENT_REQUEST_IDENTITIES)
- raise AgentError, "could not get identity count" if agent_failed(type)
- raise AgentError, "bad authentication reply: #{type}" if type != SSH2_AGENT_IDENTITIES_ANSWER
-
- identities = []
- body.read_long.times do
- key = Buffer.new(body.read_string).read_key
- key.extend(Comment)
- key.comment = body.read_string
- identities.push key
- end
-
- return identities
- end
-
- # Closes this socket. This agent reference is no longer able to
- # query the agent.
- def close
- @socket.close
- end
-
- # Using the agent and the given public key, sign the given data. The
- # signature is returned in SSH2 format.
- def sign(key, data)
- type, reply = send_and_wait(SSH2_AGENT_SIGN_REQUEST, :string, Buffer.from(:key, key), :string, data, :long, 0)
-
- if agent_failed(type)
- raise AgentError, "agent could not sign data with requested identity"
- elsif type != SSH2_AGENT_SIGN_RESPONSE
- raise AgentError, "bad authentication response #{type}"
- end
-
- return reply.read_string
- end
-
- private
-
- # Returns the agent socket factory to use.
- def agent_socket_factory
- if File::ALT_SEPARATOR
- Pageant::Socket
- else
- UNIXSocket
- end
- end
-
- # Send a new packet of the given type, with the associated data.
- def send_packet(type, *args)
- buffer = Buffer.from(*args)
- data = [buffer.length + 1, type.to_i, buffer.to_s].pack("NCA*")
- debug { "sending agent request #{type} len #{buffer.length}" }
- @socket.send data, 0
- end
-
- # Read the next packet from the agent. This will return a two-part
- # tuple consisting of the packet type, and the packet's body (which
- # is returned as a Net::SSH::Buffer).
- def read_packet
- buffer = Net::SSH::Buffer.new(@socket.read(4))
- buffer.append(@socket.read(buffer.read_long))
- type = buffer.read_byte
- debug { "received agent packet #{type} len #{buffer.length-4}" }
- return type, buffer
- end
-
- # Send the given packet and return the subsequent reply from the agent.
- # (See #send_packet and #read_packet).
- def send_and_wait(type, *args)
- send_packet(type, *args)
- read_packet
- end
-
- # Returns +true+ if the parameter indicates a "failure" response from
- # the agent, and +false+ otherwise.
- def agent_failed(type)
- type == SSH_AGENT_FAILURE ||
- type == SSH2_AGENT_FAILURE ||
- type == SSH_COM_AGENT2_FAILURE
- end
- end
-
end; end; end
+
+case Net::SSH::Authentication::PLATFORM
+when :java_win32
+ # Java pageant requires whole different agent.
+ require 'net/ssh/authentication/agent/java_pageant'
+else
+ require 'net/ssh/authentication/agent/socket'
+end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/authentication/key_manager.rb ruby-net-ssh-2.6.7/lib/net/ssh/authentication/key_manager.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/authentication/key_manager.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/authentication/key_manager.rb 2013-06-16 17:57:19.000000000 +0000
@@ -222,7 +222,7 @@
identity
end
- rescue OpenSSL::PKey::RSAError, OpenSSL::PKey::DSAError => e
+ rescue OpenSSL::PKey::RSAError, OpenSSL::PKey::DSAError, OpenSSL::PKey::ECError => e
if ask_passphrase
process_identity_loading_error(identity, e)
nil
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/authentication/methods/keyboard_interactive.rb ruby-net-ssh-2.6.7/lib/net/ssh/authentication/methods/keyboard_interactive.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/authentication/methods/keyboard_interactive.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/authentication/methods/keyboard_interactive.rb 2013-06-16 17:57:19.000000000 +0000
@@ -42,7 +42,7 @@
puts(instruction) unless instruction.empty?
end
- lang_tag = message.read_string
+ _ = message.read_string # lang_tag
responses =[]
message.read_long.times do
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/authentication/methods/none.rb ruby-net-ssh-2.6.7/lib/net/ssh/authentication/methods/none.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/authentication/methods/none.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/authentication/methods/none.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,37 @@
+require 'net/ssh/errors'
+require 'net/ssh/authentication/methods/abstract'
+
+module Net
+ module SSH
+ module Authentication
+ module Methods
+
+ # Implements the "none" SSH authentication method.
+ class None < Abstract
+ # Attempt to authenticate as "none"
+ def authenticate(next_service, user="", password="")
+ send_message(userauth_request(user, next_service, "none"))
+ message = session.next_message
+
+ case message.type
+ when USERAUTH_SUCCESS
+ debug { "none succeeded" }
+ return true
+ when USERAUTH_FAILURE
+ debug { "none failed" }
+
+ raise Net::SSH::Authentication::DisallowedMethod unless
+ message[:authentications].split(/,/).include? 'none'
+
+ return false
+ else
+ raise Net::SSH::Exception, "unexpected reply to USERAUTH_REQUEST: #{message.type} (#{message.inspect})"
+ end
+
+ end
+ end
+
+ end
+ end
+ end
+end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/authentication/pageant.rb ruby-net-ssh-2.6.7/lib/net/ssh/authentication/pageant.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/authentication/pageant.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/authentication/pageant.rb 2013-06-16 17:57:19.000000000 +0000
@@ -1,5 +1,11 @@
require 'dl/import'
-require 'dl/struct'
+
+if RUBY_VERSION < "1.9"
+ require 'dl/struct'
+else
+ require 'dl/types'
+ require 'dl'
+end
require 'net/ssh/errors'
@@ -10,22 +16,28 @@
# identities.
#
# This code is a slightly modified version of the original implementation
- # by Guillaume Marais (guillaume.marcais@free.fr). It is used and
+ # by Guillaume Marçais (guillaume.marcais@free.fr). It is used and
# relicensed by permission.
module Pageant
# From Putty pageant.c
AGENT_MAX_MSGLEN = 8192
AGENT_COPYDATA_ID = 0x804e50ba
-
+
# The definition of the Windows methods and data structures used in
# communicating with the pageant process.
module Win
- extend DL::Importable
-
- dlload 'user32'
- dlload 'kernel32'
-
+ if RUBY_VERSION < "1.9"
+ extend DL::Importable
+
+ dlload 'user32'
+ dlload 'kernel32'
+ else
+ extend DL::Importer
+ dlload 'user32','kernel32'
+ include DL::Win32Types
+ end
+
typealias("LPCTSTR", "char *") # From winnt.h
typealias("LPVOID", "void *") # From winnt.h
typealias("LPCVOID", "const void *") # From windef.h
@@ -52,7 +64,7 @@
# args: hFile, (ignored), flProtect, dwMaximumSizeHigh,
# dwMaximumSizeLow, lpName
extern 'HANDLE CreateFileMapping(HANDLE, void *, DWORD, DWORD, ' +
- 'DWORD, LPCTSTR)'
+ 'DWORD, LPCTSTR)'
# args: hFileMappingObject, dwDesiredAccess, dwFileOffsetHigh,
# dwfileOffsetLow, dwNumberOfBytesToMap
@@ -66,7 +78,11 @@
# args: hWnd, Msg, wParam, lParam, fuFlags, uTimeout, lpdwResult
extern 'LRESULT SendMessageTimeout(HWND, UINT, WPARAM, LPARAM, ' +
- 'UINT, UINT, PDWORD_PTR)'
+ 'UINT, UINT, PDWORD_PTR)'
+ if RUBY_VERSION < "1.9"
+ alias_method :FindWindow,:findWindow
+ module_function :FindWindow
+ end
end
# This is the pseudo-socket implementation that mimics the interface of
@@ -87,7 +103,7 @@
# Create a new instance that communicates with the running pageant
# instance. If no such instance is running, this will cause an error.
def initialize
- @win = Win.findWindow("Pageant", "Pageant")
+ @win = Win.FindWindow("Pageant", "Pageant")
if @win == 0
raise Net::SSH::Exception,
@@ -97,7 +113,7 @@
@res = nil
@pos = 0
end
-
+
# Forwards the data to #send_query, ignoring any arguments after
# the first. Returns 0.
def send(data, *args)
@@ -132,11 +148,11 @@
end
ptr[0] = query
-
+
cds = [AGENT_COPYDATA_ID, mapname.size + 1, mapname].
pack("LLp").to_ptr
succ = Win.sendMessageTimeout(@win, Win::WM_COPYDATA, Win::NULL,
- cds, Win::SMTO_NORMAL, 5000, id)
+ cds, Win::SMTO_NORMAL, 5000, id)
if succ > 0
retlen = 4 + ptr.to_s(4).unpack("N")[0]
@@ -178,6 +194,67 @@
end
+ # Socket changes for Ruby 1.9
+ # Functionality is the same as Ruby 1.8 but it includes the new calls to
+ # the DL module as well as other pointer transformations
+ class Socket19 < Socket
+ # Packages the given query string and sends it to the pageant
+ # process via the Windows messaging subsystem. The result is
+ # cached, to be returned piece-wise when #read is called.
+ def send_query(query)
+ res = nil
+ filemap = 0
+ ptr = nil
+ id = DL.malloc(DL::SIZEOF_LONG)
+
+ mapname = "PageantRequest%08x\000" % Win.GetCurrentThreadId()
+
+ filemap = Win.CreateFileMapping(Win::INVALID_HANDLE_VALUE,
+ Win::NULL,
+ Win::PAGE_READWRITE, 0,
+ AGENT_MAX_MSGLEN, mapname)
+
+ if filemap == 0 || filemap == Win::INVALID_HANDLE_VALUE
+ raise Net::SSH::Exception,
+ "Creation of file mapping failed"
+ end
+
+ ptr = Win.MapViewOfFile(filemap, Win::FILE_MAP_WRITE, 0, 0,
+ 0)
+
+ if ptr.nil? || ptr.null?
+ raise Net::SSH::Exception, "Mapping of file failed"
+ end
+
+ DL::CPtr.new(ptr)[0,query.size]=query
+
+ cds = DL::CPtr.to_ptr [AGENT_COPYDATA_ID, mapname.size + 1, mapname].
+ pack("LLp")
+ succ = Win.SendMessageTimeout(@win, Win::WM_COPYDATA, Win::NULL,
+ cds, Win::SMTO_NORMAL, 5000, id)
+
+ if succ > 0
+ retlen = 4 + ptr.to_s(4).unpack("N")[0]
+ res = ptr.to_s(retlen)
+ end
+
+ return res
+ ensure
+ Win.UnmapViewOfFile(ptr) unless ptr.nil? || ptr.null?
+ Win.CloseHandle(filemap) if filemap != 0
+ end
+ end
+
+ # Selects which socket to use depending on the ruby version
+ # This is needed due changes in the DL module.
+ def self.socket_factory
+ if RUBY_VERSION < "1.9"
+ Socket
+ else
+ Socket19
+ end
+ end
+
end
end; end; end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/authentication/session.rb ruby-net-ssh-2.6.7/lib/net/ssh/authentication/session.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/authentication/session.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/authentication/session.rb 2013-06-16 17:57:19.000000000 +0000
@@ -41,7 +41,7 @@
self.logger = transport.logger
@transport = transport
- @auth_methods = options[:auth_methods] || %w(publickey hostbased password keyboard-interactive)
+ @auth_methods = options[:auth_methods] || %w(none publickey hostbased password keyboard-interactive)
@options = options
@allowed_auth_methods = @auth_methods
@@ -54,7 +54,7 @@
debug { "beginning authentication of `#{username}'" }
transport.send_message(transport.service_request("ssh-userauth"))
- message = expect_message(SERVICE_ACCEPT)
+ expect_message(SERVICE_ACCEPT)
key_manager = KeyManager.new(logger, options)
keys.each { |key| key_manager.add(key) } unless keys.empty?
@@ -68,7 +68,12 @@
attempted << name
debug { "trying #{name}" }
- method = Methods.const_get(name.split(/\W+/).map { |p| p.capitalize }.join).new(self, :key_manager => key_manager)
+ begin
+ method = Methods.const_get(name.split(/\W+/).map { |p| p.capitalize }.join).new(self, :key_manager => key_manager)
+ rescue NameError
+ debug{"Mechanism #{name} was requested, but isn't a known type. Ignoring it."}
+ next
+ end
return true if method.authenticate(next_service, username, password)
rescue Net::SSH::Authentication::DisallowedMethod
@@ -123,13 +128,21 @@
private
+ # Returns an array of paths to the key files usually defined
+ # by system default.
+ def default_keys
+ if defined?(OpenSSL::PKey::EC)
+ %w(~/.ssh/id_dsa ~/.ssh/id_rsa ~/.ssh/id_ecdsa
+ ~/.ssh2/id_dsa ~/.ssh2/id_rsa ~/.ssh2/id_ecdsa)
+ else
+ %w(~/.ssh/id_dsa ~/.ssh/id_rsa ~/.ssh2/id_dsa ~/.ssh2/id_rsa)
+ end
+ end
+
# Returns an array of paths to the key files that should be used when
# attempting any key-based authentication mechanism.
def keys
- Array(
- options[:keys] ||
- %w(~/.ssh/id_dsa ~/.ssh/id_rsa ~/.ssh2/id_dsa ~/.ssh2/id_rsa)
- )
+ Array(options[:keys] || default_keys)
end
# Returns an array of the key data that should be used when
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/buffer.rb ruby-net-ssh-2.6.7/lib/net/ssh/buffer.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/buffer.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/buffer.rb 2013-06-16 17:57:19.000000000 +0000
@@ -240,7 +240,7 @@
end
# Read a keyblob of the given type from the buffer, and return it as
- # a key. Only RSA and DSA keys are supported.
+ # a key. Only RSA, DSA, and ECDSA keys are supported.
def read_keyblob(type)
case type
when "ssh-dss"
@@ -255,6 +255,16 @@
key.e = read_bignum
key.n = read_bignum
+ when /^ecdsa\-sha2\-(\w*)$/
+ unless defined?(OpenSSL::PKey::EC)
+ raise NotImplementedError, "unsupported key type `#{type}'"
+ else
+ begin
+ key = OpenSSL::PKey::EC.read_keyblob($1, self)
+ rescue OpenSSL::PKey::ECError
+ raise NotImplementedError, "unsupported key type `#{type}'"
+ end
+ end
else
raise NotImplementedError, "unsupported key type `#{type}'"
end
@@ -308,7 +318,7 @@
def write_string(*text)
text.each do |string|
s = string.to_s
- write_long(s.length)
+ write_long(s.bytesize)
write(s)
end
self
@@ -337,4 +347,4 @@
self
end
end
-end; end;
\ No newline at end of file
+end; end;
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/connection/channel.rb ruby-net-ssh-2.6.7/lib/net/ssh/connection/channel.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/connection/channel.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/connection/channel.rb 2013-06-16 17:57:19.000000000 +0000
@@ -107,15 +107,15 @@
# that time (see #do_open_confirmation).
#
# This also sets the default maximum packet size and maximum window size.
- def initialize(connection, type, local_id, &on_confirm_open)
+ def initialize(connection, type, local_id, max_pkt_size = 0x8000, max_win_size = 0x20000, &on_confirm_open)
self.logger = connection.logger
@connection = connection
@type = type
@local_id = local_id
- @local_maximum_packet_size = 0x10000
- @local_window_size = @local_maximum_window_size = 0x20000
+ @local_maximum_packet_size = max_pkt_size
+ @local_window_size = @local_maximum_window_size = max_win_size
@on_confirm_open = on_confirm_open
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/connection/session.rb ruby-net-ssh-2.6.7/lib/net/ssh/connection/session.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/connection/session.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/connection/session.rb 2013-06-16 17:57:19.000000000 +0000
@@ -72,6 +72,9 @@
@channel_open_handlers = {}
@on_global_request = {}
@properties = (options[:properties] || {}).dup
+
+ @max_pkt_size = (options.has_key?(:max_pkt_size) ? options[:max_pkt_size] : 0x8000)
+ @max_win_size = (options.has_key?(:max_win_size) ? options[:max_win_size] : 0x20000)
end
# Retrieves a custom property from this instance. This can be used to
@@ -286,8 +289,8 @@
# channel.wait
def open_channel(type="session", *extra, &on_confirm)
local_id = get_next_channel_id
- channel = Channel.new(self, type, local_id, &on_confirm)
+ channel = Channel.new(self, type, local_id, @max_pkt_size, @max_win_size, &on_confirm)
msg = Buffer.from(:byte, CHANNEL_OPEN, :string, type, :long, local_id,
:long, channel.local_maximum_window_size,
:long, channel.local_maximum_packet_size, *extra)
@@ -503,7 +506,8 @@
info { "channel open #{packet[:channel_type]}" }
local_id = get_next_channel_id
- channel = Channel.new(self, packet[:channel_type], local_id)
+
+ channel = Channel.new(self, packet[:channel_type], local_id, @max_pkt_size, @max_win_size)
channel.do_open_confirmation(packet[:remote_id], packet[:window_size], packet[:packet_size])
callback = channel_open_handlers[packet[:channel_type]]
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/errors.rb ruby-net-ssh-2.6.7/lib/net/ssh/errors.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/errors.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/errors.rb 2013-06-16 17:57:19.000000000 +0000
@@ -35,12 +35,10 @@
end
end
- # Raised when the cached key for a particular host does not match the
- # key given by the host, which can be indicative of a man-in-the-middle
- # attack. When rescuing this exception, you can inspect the key fingerprint
- # and, if you want to proceed anyway, simply call the remember_host!
- # method on the exception, and then retry.
- class HostKeyMismatch < Exception
+ # Base class for host key exceptions. When rescuing this exception, you can
+ # inspect the key fingerprint and, if you want to proceed anyway, simply call
+ # the remember_host! method on the exception, and then retry.
+ class HostKeyError < Exception
# the callback to use when #remember_host! is called
attr_writer :callback #:nodoc:
@@ -85,4 +83,18 @@
@callback.call
end
end
-end; end
\ No newline at end of file
+
+ # Raised when the cached key for a particular host does not match the
+ # key given by the host, which can be indicative of a man-in-the-middle
+ # attack. When rescuing this exception, you can inspect the key fingerprint
+ # and, if you want to proceed anyway, simply call the remember_host!
+ # method on the exception, and then retry.
+ class HostKeyMismatch < HostKeyError; end
+
+ # Raised when there is no cached key for a particular host, which probably
+ # means that the host has simply not been seen before.
+ # When rescuing this exception, you can inspect the key fingerprint and, if
+ # you want to proceed anyway, simply call the remember_host! method on the
+ # exception, and then retry.
+ class HostKeyUnknown < HostKeyError; end
+end; end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/key_factory.rb ruby-net-ssh-2.6.7/lib/net/ssh/key_factory.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/key_factory.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/key_factory.rb 2013-06-16 17:57:19.000000000 +0000
@@ -17,8 +17,11 @@
MAP = {
"dh" => OpenSSL::PKey::DH,
"rsa" => OpenSSL::PKey::RSA,
- "dsa" => OpenSSL::PKey::DSA
+ "dsa" => OpenSSL::PKey::DSA,
}
+ if defined?(OpenSSL::PKey::EC)
+ MAP["ecdsa"] = OpenSSL::PKey::EC
+ end
class < e
+ if pkey_read
+ return OpenSSL::PKey.read(data, passphrase || 'invalid')
+ else
+ return key_type.new(data, passphrase || 'invalid')
+ end
+ rescue error_class
if encrypted_key && ask_passphrase
tries += 1
if tries <= 3
@@ -87,7 +105,7 @@
# the file describes an RSA or DSA key, and will load it
# appropriately. The new public key is returned.
def load_data_public_key(data, filename="")
- type, blob = data.split(/ /)
+ _, blob = data.split(/ /)
raise Net::SSH::Exception, "public key at #{filename} is not valid" if blob.nil?
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/known_hosts.rb ruby-net-ssh-2.6.7/lib/net/ssh/known_hosts.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/known_hosts.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/known_hosts.rb 2013-06-16 17:57:19.000000000 +0000
@@ -10,7 +10,19 @@
# This is used internally by Net::SSH, and will never need to be used directly
# by consumers of the library.
class KnownHosts
+
+ if defined?(OpenSSL::PKey::EC)
+ SUPPORTED_TYPE = %w(ssh-rsa ssh-dss
+ ecdsa-sha2-nistp256
+ ecdsa-sha2-nistp384
+ ecdsa-sha2-nistp521)
+ else
+ SUPPORTED_TYPE = %w(ssh-rsa ssh-dss)
+ end
+
+
class < true) do |ssh|
+ # Net::SSH.start("remote.host", "me", :forward_agent => true) do |ssh|
# ssh.open_channel do |ch|
# # agent will be automatically forwarded by this point
# end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/test/channel.rb ruby-net-ssh-2.6.7/lib/net/ssh/test/channel.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/test/channel.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/test/channel.rb 2013-06-16 17:57:19.000000000 +0000
@@ -10,6 +10,7 @@
# channel = session.opens_channel
# channel.sends_exec "ls"
# channel.gets_data "result of ls"
+ # channel.gets_extended_data "some error coming from ls"
# channel.gets_close
# channel.sends_close
# end
@@ -104,6 +105,14 @@
script.gets_channel_data(self, data)
end
+ # Scripts the reception of a channel extended data packet from the remote
+ # end.
+ #
+ # channel.gets_extended_data "whoops"
+ def gets_extended_data(data)
+ script.gets_channel_extended_data(self, data)
+ end
+
# Scripts the reception of an "exit-status" channel request packet.
#
# channel.gets_exit_status(127)
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/test/kex.rb ruby-net-ssh-2.6.7/lib/net/ssh/test/kex.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/test/kex.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/test/kex.rb 2013-06-16 17:57:19.000000000 +0000
@@ -32,7 +32,7 @@
raise Net::SSH::Exception, "expected NEWKEYS" unless buffer.type == NEWKEYS
{ :session_id => "abc-xyz",
- :server_key => OpenSSL::PKey::RSA.new(32),
+ :server_key => OpenSSL::PKey::RSA.new(512),
:shared_secret => OpenSSL::BN.new("1234567890", 10),
:hashing_algorithm => OpenSSL::Digest::SHA1 }
end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/test/local_packet.rb ruby-net-ssh-2.6.7/lib/net/ssh/test/local_packet.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/test/local_packet.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/test/local_packet.rb 2013-06-16 17:57:19.000000000 +0000
@@ -33,17 +33,17 @@
type = packet.read_byte
raise "expected #{@type}, but got #{type}" if @type != type
- @data.zip(types).each do |expected, type|
- type ||= case expected
+ @data.zip(types).each do |expected, _type|
+ _type ||= case expected
when nil then break
when Numeric then :long
when String then :string
when TrueClass, FalseClass then :bool
end
- actual = packet.send("read_#{type}")
+ actual = packet.send("read_#{_type}")
next if expected.nil?
- raise "expected #{type} #{expected.inspect} but got #{actual.inspect}" unless expected == actual
+ raise "expected #{_type} #{expected.inspect} but got #{actual.inspect}" unless expected == actual
end
end
end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/test/packet.rb ruby-net-ssh-2.6.7/lib/net/ssh/test/packet.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/test/packet.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/test/packet.rb 2013-06-16 17:57:19.000000000 +0000
@@ -65,6 +65,7 @@
when CHANNEL_OPEN then [:string, :long, :long, :long]
when CHANNEL_OPEN_CONFIRMATION then [:long, :long, :long, :long]
when CHANNEL_DATA then [:long, :string]
+ when CHANNEL_EXTENDED_DATA then [:long, :long, :string]
when CHANNEL_EOF, CHANNEL_CLOSE, CHANNEL_SUCCESS, CHANNEL_FAILURE then [:long]
when CHANNEL_REQUEST
parts = [:long, :string, :bool]
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/test/script.rb ruby-net-ssh-2.6.7/lib/net/ssh/test/script.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/test/script.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/test/script.rb 2013-06-16 17:57:19.000000000 +0000
@@ -111,6 +111,15 @@
events << RemotePacket.new(:channel_data, channel.local_id, data)
end
+ # Scripts the reception of a channel extended data packet from the remote
+ # host by the given Net::SSH::Test::Channel +channel+. This will typically
+ # be called via Net::SSH::Test::Channel#gets_extended_data.
+ #
+ # Currently the only extended data type is stderr == 1.
+ def gets_channel_extended_data(channel, data)
+ events << RemotePacket.new(:channel_extended_data, channel.local_id, 1, data)
+ end
+
# Scripts the reception of a channel request packet from the remote host by
# the given Net::SSH::Test::Channel +channel+. This will typically be
# called via Net::SSH::Test::Channel#gets_exit_status.
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/algorithms.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/algorithms.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/algorithms.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/algorithms.rb 2013-06-16 17:57:19.000000000 +0000
@@ -24,14 +24,38 @@
ALGORITHMS = {
:host_key => %w(ssh-rsa ssh-dss),
:kex => %w(diffie-hellman-group-exchange-sha1
- diffie-hellman-group1-sha1),
+ diffie-hellman-group1-sha1
+ diffie-hellman-group14-sha1
+ diffie-hellman-group-exchange-sha256),
:encryption => %w(aes128-cbc 3des-cbc blowfish-cbc cast128-cbc
aes192-cbc aes256-cbc rijndael-cbc@lysator.liu.se
- idea-cbc none arcfour128 arcfour256),
- :hmac => %w(hmac-sha1 hmac-md5 hmac-sha1-96 hmac-md5-96 none),
+ idea-cbc none arcfour128 arcfour256 arcfour
+ aes128-ctr aes192-ctr aes256-ctr
+ camellia128-cbc camellia192-cbc camellia256-cbc
+ camellia128-cbc@openssh.org
+ camellia192-cbc@openssh.org
+ camellia256-cbc@openssh.org
+ camellia128-ctr camellia192-ctr camellia256-ctr
+ camellia128-ctr@openssh.org
+ camellia192-ctr@openssh.org
+ camellia256-ctr@openssh.org
+ cast128-ctr blowfish-ctr 3des-ctr
+ ),
+ :hmac => %w(hmac-sha1 hmac-md5 hmac-sha1-96 hmac-md5-96
+ hmac-ripemd160 hmac-ripemd160@openssh.com
+ hmac-sha2-256 hmac-sha2-512 hmac-sha2-256-96
+ hmac-sha2-512-96 none),
:compression => %w(none zlib@openssh.com zlib),
:language => %w()
}
+ if defined?(OpenSSL::PKey::EC)
+ ALGORITHMS[:host_key] += %w(ecdsa-sha2-nistp256
+ ecdsa-sha2-nistp384
+ ecdsa-sha2-nistp521)
+ ALGORITHMS[:kex] += %w(ecdh-sha2-nistp256
+ ecdh-sha2-nistp384
+ ecdh-sha2-nistp521)
+ end
# The underlying transport layer session that supports this object
attr_reader :session
@@ -239,7 +263,7 @@
# TODO: if first_kex_packet_follows, we need to try to skip the
# actual kexinit stuff and try to guess what the server is doing...
# need to read more about this scenario.
- first_kex_packet_follows = packet.read_bool
+ # first_kex_packet_follows = packet.read_bool
return data
end
@@ -345,14 +369,13 @@
mac_key_client = key["E"]
mac_key_server = key["F"]
- parameters = { :iv => iv_client, :key => key_client, :shared => secret,
- :hash => hash, :digester => digester }
+ parameters = { :shared => secret, :hash => hash, :digester => digester }
- cipher_client = CipherFactory.get(encryption_client, parameters.merge(:encrypt => true))
+ cipher_client = CipherFactory.get(encryption_client, parameters.merge(:iv => iv_client, :key => key_client, :encrypt => true))
cipher_server = CipherFactory.get(encryption_server, parameters.merge(:iv => iv_server, :key => key_server, :decrypt => true))
- mac_client = HMAC.get(hmac_client, mac_key_client)
- mac_server = HMAC.get(hmac_server, mac_key_server)
+ mac_client = HMAC.get(hmac_client, mac_key_client, parameters)
+ mac_server = HMAC.get(hmac_server, mac_key_server, parameters)
session.configure_client :cipher => cipher_client, :hmac => mac_client,
:compression => normalize_compression_name(compression_client),
@@ -381,4 +404,4 @@
end
end
end
-end; end; end
\ No newline at end of file
+end; end; end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/cipher_factory.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/cipher_factory.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/cipher_factory.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/cipher_factory.rb 2013-06-16 17:57:19.000000000 +0000
@@ -1,4 +1,6 @@
require 'openssl'
+require 'net/ssh/transport/ctr.rb'
+require 'net/ssh/transport/key_expander'
require 'net/ssh/transport/identity_cipher'
module Net; module SSH; module Transport
@@ -18,9 +20,30 @@
"arcfour128" => "rc4",
"arcfour256" => "rc4",
"arcfour512" => "rc4",
- "none" => "none"
+ "arcfour" => "rc4",
+ "camellia128-cbc" => "camellia-128-cbc",
+ "camellia192-cbc" => "camellia-192-cbc",
+ "camellia256-cbc" => "camellia-256-cbc",
+ "camellia128-cbc@openssh.org" => "camellia-128-cbc",
+ "camellia192-cbc@openssh.org" => "camellia-192-cbc",
+ "camellia256-cbc@openssh.org" => "camellia-256-cbc",
+
+ "3des-ctr" => "des-ede3",
+ "blowfish-ctr" => "bf-ecb",
+ "aes256-ctr" => "aes-256-ecb",
+ "aes192-ctr" => "aes-192-ecb",
+ "aes128-ctr" => "aes-128-ecb",
+ "cast128-ctr" => "cast5-ecb",
+ "camellia128-ctr" => "camellia-128-ecb",
+ "camellia192-ctr" => "camellia-192-ecb",
+ "camellia256-ctr" => "camellia-256-ecb",
+ "camellia128-ctr@openssh.org" => "camellia-128-ecb",
+ "camellia192-ctr@openssh.org" => "camellia-192-ecb",
+ "camellia256-ctr@openssh.org" => "camellia-256-ecb",
+
+ "none" => "none",
}
-
+
# Ruby's OpenSSL bindings always return a key length of 16 for RC4 ciphers
# resulting in the error: OpenSSL::CipherError: key length too short.
# The following ciphers will override this key length.
@@ -28,7 +51,8 @@
"arcfour256" => 32,
"arcfour512" => 64
}
-
+
+
# Returns true if the underlying OpenSSL library supports the given cipher,
# and false otherwise.
def self.supported?(name)
@@ -45,16 +69,20 @@
def self.get(name, options={})
ossl_name = SSH_TO_OSSL[name] or raise NotImplementedError, "unimplemented cipher `#{name}'"
return IdentityCipher if ossl_name == "none"
-
cipher = OpenSSL::Cipher::Cipher.new(ossl_name)
+
cipher.send(options[:encrypt] ? :encrypt : :decrypt)
cipher.padding = 0
- cipher.iv = make_key(cipher.iv_len, options[:iv], options) if ossl_name != "rc4"
+
+ cipher.extend(Net::SSH::Transport::CTR) if (name =~ /-ctr(@openssh.org)?$/)
+
+ cipher.iv = Net::SSH::Transport::KeyExpander.expand_key(cipher.iv_len, options[:iv], options) if ossl_name != "rc4"
+
key_len = KEY_LEN_OVERRIDE[name] || cipher.key_len
cipher.key_len = key_len
- cipher.key = make_key(key_len, options[:key], options)
- cipher.update(" " * 1536) if ossl_name == "rc4"
+ cipher.key = Net::SSH::Transport::KeyExpander.expand_key(key_len, options[:key], options)
+ cipher.update(" " * 1536) if (ossl_name == "rc4" && name != "arcfour")
return cipher
end
@@ -73,25 +101,6 @@
return [key_len, ossl_name=="rc4" ? 8 : cipher.block_size]
end
-
- private
-
- # Generate a key value in accordance with the SSH2 specification.
- def self.make_key(bytes, start, options={})
- k = start[0, bytes]
-
- digester = options[:digester] or raise 'No digester supplied'
- shared = options[:shared] or raise 'No shared secret supplied'
- hash = options[:hash] or raise 'No hash supplied'
-
- while k.length < bytes
- step = digester.digest(shared + hash + k)
- bytes_needed = bytes - k.length
- k << step[0, bytes_needed]
- end
-
- return k
- end
end
end; end; end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/constants.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/constants.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/constants.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/constants.rb 2013-06-16 17:57:19.000000000 +0000
@@ -26,5 +26,7 @@
KEXDH_INIT = 30
KEXDH_REPLY = 31
+ KEXECDH_INIT = 30
+ KEXECDH_REPLY = 31
end
-end; end; end
\ No newline at end of file
+end; end; end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/ctr.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/ctr.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/ctr.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/ctr.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,95 @@
+require 'openssl'
+
+module Net::SSH::Transport
+
+ # Pure-Ruby implementation of Stateful Decryption Counter(SDCTR) Mode
+ # for Block Ciphers. See RFC4344 for detail.
+ module CTR
+ def self.extended(orig)
+ orig.instance_eval {
+ @remaining = ""
+ @counter = nil
+ @counter_len = orig.block_size
+ orig.encrypt
+ orig.padding = 0
+ }
+
+ class <= block_size
+ encrypted += xor!(@remaining.slice!(0, block_size),
+ _update(@counter))
+ increment_counter!
+ end
+
+ encrypted
+ end
+
+ def final
+ unless @remaining.empty?
+ s = xor!(@remaining, _update(@counter))
+ else
+ s = ""
+ end
+
+ @remaining = ""
+
+ s
+ end
+
+ private
+
+ def xor!(s1, s2)
+ s = []
+ s1.unpack('Q*').zip(s2.unpack('Q*')) {|a,b| s.push(a^b) }
+ s.pack('Q*')
+ end
+
+ def increment_counter!
+ c = @counter_len
+ while ((c -= 1) > 0)
+ if @counter.setbyte(c, (@counter.getbyte(c) + 1) & 0xff) != 0
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/hmac/ripemd160.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/hmac/ripemd160.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/hmac/ripemd160.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/hmac/ripemd160.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,13 @@
+require 'net/ssh/transport/hmac/abstract'
+
+module Net::SSH::Transport::HMAC
+
+ # The RIPEMD-160 HMAC algorithm. This has a mac and key length of 20, and
+ # uses the RIPEMD-160 digest algorithm.
+ class RIPEMD160 < Abstract
+ mac_length 20
+ key_length 20
+ digest_class OpenSSL::Digest::RIPEMD160
+ end
+
+end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/hmac/sha2_256.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/hmac/sha2_256.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/hmac/sha2_256.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/hmac/sha2_256.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,15 @@
+require 'net/ssh/transport/hmac/abstract'
+
+if defined?(OpenSSL::Digest::SHA256) # need openssl support
+ module Net::SSH::Transport::HMAC
+
+ # The SHA-256 HMAC algorithm. This has a mac and key length of 32, and
+ # uses the SHA-256 digest algorithm.
+ class SHA2_256 < Abstract
+ mac_length 32
+ key_length 32
+ digest_class OpenSSL::Digest::SHA256
+ end
+
+ end
+end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/hmac/sha2_256_96.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/hmac/sha2_256_96.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/hmac/sha2_256_96.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/hmac/sha2_256_96.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,13 @@
+require 'net/ssh/transport/hmac/abstract'
+
+module Net::SSH::Transport::HMAC
+
+ if defined?(SHA2_256) # need openssl support
+ # The SHA256-96 HMAC algorithm. This returns only the first 12 bytes of
+ # the digest.
+ class SHA2_256_96 < SHA2_256
+ mac_length 12
+ end
+ end
+
+end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/hmac/sha2_512.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/hmac/sha2_512.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/hmac/sha2_512.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/hmac/sha2_512.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,14 @@
+require 'net/ssh/transport/hmac/abstract'
+
+module Net::SSH::Transport::HMAC
+
+ if defined?(OpenSSL::Digest::SHA512) # need openssl support
+ # The SHA-512 HMAC algorithm. This has a mac and key length of 64, and
+ # uses the SHA-512 digest algorithm.
+ class SHA2_512 < Abstract
+ mac_length 64
+ key_length 64
+ digest_class OpenSSL::Digest::SHA512
+ end
+ end
+end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/hmac/sha2_512_96.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/hmac/sha2_512_96.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/hmac/sha2_512_96.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/hmac/sha2_512_96.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,13 @@
+require 'net/ssh/transport/hmac/abstract'
+
+module Net::SSH::Transport::HMAC
+
+ if defined?(SHA2_512) # need openssl support
+ # The SHA2-512-96 HMAC algorithm. This returns only the first 12 bytes of
+ # the digest.
+ class SHA2_512_96 < SHA2_512
+ mac_length 12
+ end
+ end
+
+end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/hmac.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/hmac.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/hmac.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/hmac.rb 2013-06-16 17:57:19.000000000 +0000
@@ -1,7 +1,13 @@
+require 'net/ssh/transport/key_expander'
require 'net/ssh/transport/hmac/md5'
require 'net/ssh/transport/hmac/md5_96'
require 'net/ssh/transport/hmac/sha1'
require 'net/ssh/transport/hmac/sha1_96'
+require 'net/ssh/transport/hmac/sha2_256'
+require 'net/ssh/transport/hmac/sha2_256_96'
+require 'net/ssh/transport/hmac/sha2_512'
+require 'net/ssh/transport/hmac/sha2_512_96'
+require 'net/ssh/transport/hmac/ripemd160'
require 'net/ssh/transport/hmac/none'
# Implements a simple factory interface for fetching hmac implementations, or
@@ -9,18 +15,26 @@
module Net::SSH::Transport::HMAC
# The mapping of SSH hmac algorithms to their implementations
MAP = {
- 'hmac-md5' => MD5,
- 'hmac-md5-96' => MD5_96,
- 'hmac-sha1' => SHA1,
- 'hmac-sha1-96' => SHA1_96,
- 'none' => None
+ 'hmac-md5' => MD5,
+ 'hmac-md5-96' => MD5_96,
+ 'hmac-sha1' => SHA1,
+ 'hmac-sha1-96' => SHA1_96,
+ 'hmac-ripemd160' => RIPEMD160,
+ 'hmac-ripemd160@openssh.com' => RIPEMD160,
+ 'none' => None
}
+ # add mapping to sha2 hmac algorithms if they're available
+ MAP['hmac-sha2-256'] = SHA2_256 if defined?(::Net::SSH::Transport::HMAC::SHA2_256)
+ MAP['hmac-sha2-256-96'] = SHA2_256_96 if defined?(::Net::SSH::Transport::HMAC::SHA2_256_96)
+ MAP['hmac-sha2-512'] = SHA2_512 if defined?(::Net::SSH::Transport::HMAC::SHA2_512)
+ MAP['hmac-sha2-512-96'] = SHA2_512_96 if defined?(::Net::SSH::Transport::HMAC::SHA2_512_96)
+
# Retrieves a new hmac instance of the given SSH type (+name+). If +key+ is
# given, the new instance will be initialized with that key.
- def self.get(name, key="")
+ def self.get(name, key="", parameters = {})
impl = MAP[name] or raise ArgumentError, "hmac not found: #{name.inspect}"
- impl.new(key)
+ impl.new(Net::SSH::Transport::KeyExpander.expand_key(impl.key_length, key, parameters))
end
# Retrieves the key length for the hmac of the given SSH type (+name+).
@@ -28,4 +42,4 @@
impl = MAP[name] or raise ArgumentError, "hmac not found: #{name.inspect}"
impl.key_length
end
-end
\ No newline at end of file
+end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,44 @@
+require 'net/ssh/transport/kex/diffie_hellman_group1_sha1'
+
+module Net; module SSH; module Transport; module Kex
+
+ # A key-exchange service implementing the "diffie-hellman-group14-sha1"
+ # key-exchange algorithm. (defined in RFC 4253)
+ class DiffieHellmanGroup14SHA1 < DiffieHellmanGroup1SHA1
+ include Constants, Loggable
+
+ # The value of 'P', as a string, in hexadecimal
+ P_s = "FFFFFFFF" "FFFFFFFF" "C90FDAA2" "2168C234" +
+ "C4C6628B" "80DC1CD1" "29024E08" "8A67CC74" +
+ "020BBEA6" "3B139B22" "514A0879" "8E3404DD" +
+ "EF9519B3" "CD3A431B" "302B0A6D" "F25F1437" +
+ "4FE1356D" "6D51C245" "E485B576" "625E7EC6" +
+ "F44C42E9" "A637ED6B" "0BFF5CB6" "F406B7ED" +
+ "EE386BFB" "5A899FA5" "AE9F2411" "7C4B1FE6" +
+ "49286651" "ECE45B3D" "C2007CB8" "A163BF05" +
+ "98DA4836" "1C55D39A" "69163FA8" "FD24CF5F" +
+ "83655D23" "DCA3AD96" "1C62F356" "208552BB" +
+ "9ED52907" "7096966D" "670C354E" "4ABC9804" +
+ "F1746C08" "CA18217C" "32905E46" "2E36CE3B" +
+ "E39E772C" "180E8603" "9B2783A2" "EC07A28F" +
+ "B5C55DF0" "6F4C52C9" "DE2BCBF6" "95581718" +
+ "3995497C" "EA956AE5" "15D22618" "98FA0510" +
+ "15728E5A" "8AACAA68" "FFFFFFFF" "FFFFFFFF"
+
+ # The radix in which P_s represents the value of P
+ P_r = 16
+
+ # The group constant
+ G = 2
+
+ private
+
+ def get_p
+ OpenSSL::BN.new(P_s, P_r)
+ end
+
+ def get_g
+ G
+ end
+ end
+end; end; end; end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb 2013-06-16 17:57:19.000000000 +0000
@@ -40,8 +40,8 @@
# required by this algorithm, which was acquired during earlier
# processing.
def initialize(algorithms, connection, data)
- @p = OpenSSL::BN.new(P_s, P_r)
- @g = G
+ @p = get_p
+ @g = get_g
@digester = OpenSSL::Digest::SHA1
@algorithms = algorithms
@@ -76,7 +76,15 @@
end
private
-
+
+ def get_p
+ OpenSSL::BN.new(P_s, P_r)
+ end
+
+ def get_g
+ G
+ end
+
# Returns the DH key parameters for the current connection.
def get_parameters
[p, g]
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb 2013-06-16 17:57:19.000000000 +0000
@@ -19,7 +19,10 @@
# Compute the number of bits needed for the given number of bytes.
def compute_need_bits
- need_bits = data[:need_bytes] * 8
+
+ # for Compatibility: OpenSSH requires (need_bits * 2 + 1) length of parameter
+ need_bits = data[:need_bytes] * 8 * 2 + 1
+
if need_bits < MINIMUM_BITS
need_bits = MINIMUM_BITS
elsif need_bits > MAXIMUM_BITS
@@ -74,4 +77,4 @@
end
end
-end
\ No newline at end of file
+end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,15 @@
+require 'net/ssh/transport/kex/diffie_hellman_group_exchange_sha1'
+
+module Net::SSH::Transport::Kex
+ if defined?(OpenSSL::Digest::SHA256)
+ # A key-exchange service implementing the
+ # "diffie-hellman-group-exchange-sha256" key-exchange algorithm.
+ class DiffieHellmanGroupExchangeSHA256 < DiffieHellmanGroupExchangeSHA1
+ def initialize(*args)
+ super(*args)
+
+ @digester = OpenSSL::Digest::SHA256
+ end
+ end
+ end
+end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,93 @@
+require 'net/ssh/transport/constants'
+require 'net/ssh/transport/kex/diffie_hellman_group1_sha1'
+
+module Net; module SSH; module Transport; module Kex
+
+ # A key-exchange service implementing the "ecdh-sha2-nistp256"
+ # key-exchange algorithm. (defined in RFC 5656)
+ class EcdhSHA2NistP256 < DiffieHellmanGroup1SHA1
+ include Constants, Loggable
+
+ attr_reader :ecdh
+
+ def digester
+ OpenSSL::Digest::SHA256
+ end
+
+ def curve_name
+ OpenSSL::PKey::EC::CurveNameAlias['nistp256']
+ end
+
+ def initialize(algorithms, connection, data)
+ @algorithms = algorithms
+ @connection = connection
+
+ @digester = digester
+ @data = data.dup
+ @ecdh = generate_key
+ @logger = @data.delete(:logger)
+ end
+
+ private
+
+ def get_message_types
+ [KEXECDH_INIT, KEXECDH_REPLY]
+ end
+
+ def build_signature_buffer(result)
+ response = Net::SSH::Buffer.new
+ response.write_string data[:client_version_string],
+ data[:server_version_string],
+ data[:client_algorithm_packet],
+ data[:server_algorithm_packet],
+ result[:key_blob],
+ ecdh.public_key.to_bn.to_s(2),
+ result[:server_ecdh_pubkey]
+ response.write_bignum result[:shared_secret]
+ response
+ end
+
+ def generate_key #:nodoc:
+ OpenSSL::PKey::EC.new(curve_name).generate_key
+ end
+
+ def send_kexinit #:nodoc:
+ init, reply = get_message_types
+
+ # send the KEXECDH_INIT message
+ ## byte SSH_MSG_KEX_ECDH_INIT
+ ## string Q_C, client's ephemeral public key octet string
+ buffer = Net::SSH::Buffer.from(:byte, init, :string, ecdh.public_key.to_bn.to_s(2))
+ connection.send_message(buffer)
+
+ # expect the following KEXECDH_REPLY message
+ ## byte SSH_MSG_KEX_ECDH_REPLY
+ ## string K_S, server's public host key
+ ## string Q_S, server's ephemeral public key octet string
+ ## string the signature on the exchange hash
+ buffer = connection.next_message
+ raise Net::SSH::Exception, "expected REPLY" unless buffer.type == reply
+
+ result = Hash.new
+ result[:key_blob] = buffer.read_string
+ result[:server_key] = Net::SSH::Buffer.new(result[:key_blob]).read_key
+ result[:server_ecdh_pubkey] = buffer.read_string
+
+ # compute shared secret from server's public key and client's private key
+ pk = OpenSSL::PKey::EC::Point.new(OpenSSL::PKey::EC.new(curve_name).group,
+ OpenSSL::BN.new(result[:server_ecdh_pubkey], 2))
+ result[:shared_secret] = OpenSSL::BN.new(ecdh.dh_compute_key(pk), 2)
+
+ sig_buffer = Net::SSH::Buffer.new(buffer.read_string)
+ sig_type = sig_buffer.read_string
+ if sig_type != algorithms.host_key
+ raise Net::SSH::Exception,
+ "host key algorithm mismatch for signature " +
+ "'#{sig_type}' != '#{algorithms.host_key}'"
+ end
+ result[:server_sig] = sig_buffer.read_string
+
+ return result
+ end
+ end
+end; end; end; end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,13 @@
+module Net; module SSH; module Transport; module Kex
+
+ # A key-exchange service implementing the "ecdh-sha2-nistp256"
+ # key-exchange algorithm. (defined in RFC 5656)
+ class EcdhSHA2NistP384 < EcdhSHA2NistP256
+ def digester
+ OpenSSL::Digest::SHA384
+ end
+ def curve_name
+ OpenSSL::PKey::EC::CurveNameAlias['nistp384']
+ end
+ end
+end; end; end; end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,13 @@
+module Net; module SSH; module Transport; module Kex
+
+ # A key-exchange service implementing the "ecdh-sha2-nistp521"
+ # key-exchange algorithm. (defined in RFC 5656)
+ class EcdhSHA2NistP521 < EcdhSHA2NistP256
+ def digester
+ OpenSSL::Digest::SHA512
+ end
+ def curve_name
+ OpenSSL::PKey::EC::CurveNameAlias['nistp521']
+ end
+ end
+end; end; end; end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/kex.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/kex.rb 2013-06-16 17:57:19.000000000 +0000
@@ -1,5 +1,7 @@
require 'net/ssh/transport/kex/diffie_hellman_group1_sha1'
+require 'net/ssh/transport/kex/diffie_hellman_group14_sha1'
require 'net/ssh/transport/kex/diffie_hellman_group_exchange_sha1'
+require 'net/ssh/transport/kex/diffie_hellman_group_exchange_sha256'
module Net::SSH::Transport
module Kex
@@ -7,7 +9,20 @@
# to their corresponding implementors.
MAP = {
'diffie-hellman-group-exchange-sha1' => DiffieHellmanGroupExchangeSHA1,
- 'diffie-hellman-group1-sha1' => DiffieHellmanGroup1SHA1
+ 'diffie-hellman-group1-sha1' => DiffieHellmanGroup1SHA1,
+ 'diffie-hellman-group14-sha1' => DiffieHellmanGroup14SHA1,
}
+ if defined?(DiffieHellmanGroupExchangeSHA256)
+ MAP['diffie-hellman-group-exchange-sha256'] = DiffieHellmanGroupExchangeSHA256
+ end
+ if defined?(OpenSSL::PKey::EC)
+ require 'net/ssh/transport/kex/ecdh_sha2_nistp256'
+ require 'net/ssh/transport/kex/ecdh_sha2_nistp384'
+ require 'net/ssh/transport/kex/ecdh_sha2_nistp521'
+
+ MAP['ecdh-sha2-nistp256'] = EcdhSHA2NistP256
+ MAP['ecdh-sha2-nistp384'] = EcdhSHA2NistP384
+ MAP['ecdh-sha2-nistp521'] = EcdhSHA2NistP521
+ end
end
-end
\ No newline at end of file
+end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/key_expander.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/key_expander.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/key_expander.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/key_expander.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,26 @@
+module Net; module SSH; module Transport
+ module KeyExpander
+
+ # Generate a key value in accordance with the SSH2 specification.
+ # (RFC4253 7.2. "Output from Key Exchange")
+ def self.expand_key(bytes, start, options={})
+ if bytes == 0
+ return ""
+ end
+
+ k = start[0, bytes]
+
+ digester = options[:digester] or raise 'No digester supplied'
+ shared = options[:shared] or raise 'No shared secret supplied'
+ hash = options[:hash] or raise 'No hash supplied'
+
+ while k.length < bytes
+ step = digester.digest(shared + hash + k)
+ bytes_needed = bytes - k.length
+ k << step[0, bytes_needed]
+ end
+
+ return k
+ end
+ end
+end; end; end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/openssl.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/openssl.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/openssl.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/openssl.rb 2013-06-16 17:57:19.000000000 +0000
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
require 'openssl'
module OpenSSL
@@ -122,6 +123,115 @@
end
end
- end
+ if defined?(OpenSSL::PKey::EC)
+ # This class is originally defined in the OpenSSL module. As needed, methods
+ # have been added to it by the Net::SSH module for convenience in dealing
+ # with SSH functionality.
+ class EC
+ CurveNameAlias = {
+ "nistp256" => "prime256v1",
+ "nistp384" => "secp384r1",
+ "nistp521" => "secp521r1",
+ }
+
+ CurveNameAliasInv = {
+ "prime256v1" => "nistp256",
+ "secp384r1" => "nistp384",
+ "secp521r1" => "nistp521",
+ }
+
+ def self.read_keyblob(curve_name_in_type, buffer)
+ curve_name_in_key = buffer.read_string
+ unless curve_name_in_type == curve_name_in_key
+ raise Net::SSH::Exception, "curve name mismatched (`#{curve_name_in_key}' with `#{curve_name_in_type}')"
+ end
+ public_key_oct = buffer.read_string
+ begin
+ key = OpenSSL::PKey::EC.new(OpenSSL::PKey::EC::CurveNameAlias[curve_name_in_key])
+ group = key.group
+ point = OpenSSL::PKey::EC::Point.new(group, OpenSSL::BN.new(public_key_oct, 2))
+ key.public_key = point
+
+ return key
+ rescue OpenSSL::PKey::ECError
+ raise NotImplementedError, "unsupported key type `#{type}'"
+ end
+
+ end
+
+ # Returns the description of this key type used by the
+ # SSH2 protocol, like "ecdsa-sha2-nistp256"
+ def ssh_type
+ "ecdsa-sha2-#{CurveNameAliasInv[self.group.curve_name]}"
+ end
+
+ def digester
+ if self.group.curve_name =~ /^[a-z]+(\d+)\w*\z/
+ curve_size = $1.to_i
+ if curve_size <= 256
+ OpenSSL::Digest::SHA256.new
+ elsif curve_size <= 384
+ OpenSSL::Digest::SHA384.new
+ else
+ OpenSSL::Digest::SHA512.new
+ end
+ else
+ OpenSSL::Digest::SHA256.new
+ end
+ end
+ private :digester
+
+ # Converts the key to a blob, according to the SSH2 protocol.
+ def to_blob
+ @blob ||= Net::SSH::Buffer.from(:string, ssh_type,
+ :string, CurveNameAliasInv[self.group.curve_name],
+ :string, self.public_key.to_bn.to_s(2)).to_s
+ @blob
+ end
+ # Verifies the given signature matches the given data.
+ def ssh_do_verify(sig, data)
+ digest = digester.digest(data)
+ a1sig = nil
+
+ begin
+ sig_r_len = sig[0,4].unpack("H*")[0].to_i(16)
+ sig_l_len = sig[4+sig_r_len,4].unpack("H*")[0].to_i(16)
+
+ sig_r = sig[4,sig_r_len].unpack("H*")[0]
+ sig_s = sig[4+sig_r_len+4,sig_l_len].unpack("H*")[0]
+
+ a1sig = OpenSSL::ASN1::Sequence([
+ OpenSSL::ASN1::Integer(sig_r.to_i(16)),
+ OpenSSL::ASN1::Integer(sig_s.to_i(16)),
+ ])
+ rescue
+ end
+
+ if a1sig == nil
+ return false
+ else
+ dsa_verify_asn1(digest, a1sig.to_der)
+ end
+ end
+
+ # Returns the signature for the given data.
+ def ssh_do_sign(data)
+ digest = digester.digest(data)
+ sig = dsa_sign_asn1(digest)
+ a1sig = OpenSSL::ASN1.decode( sig )
+
+ sig_r = a1sig.value[0].value
+ sig_s = a1sig.value[1].value
+
+ return Net::SSH::Buffer.from(:bignum, sig_r, :bignum, sig_s).to_s
+ end
+ end
+ else
+ class OpenSSL::PKey::ECError < RuntimeError
+ # for compatibility with interpreters
+ # without EC support (i.e. JRuby)
+ end
+ end
+ end
end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/packet_stream.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/packet_stream.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/packet_stream.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/packet_stream.rb 2013-06-16 17:57:19.000000000 +0000
@@ -82,7 +82,11 @@
def next_packet(mode=:nonblock)
case mode
when :nonblock then
- fill if available_for_read?
+ if available_for_read?
+ if fill <= 0
+ raise Net::SSH::Disconnect, "connection closed by remote host"
+ end
+ end
poll_next_packet
when :block then
@@ -120,18 +124,18 @@
payload = client.compress(payload)
# the length of the packet, minus the padding
- actual_length = 4 + payload.length + 1
+ actual_length = 4 + payload.bytesize + 1
# compute the padding length
padding_length = client.block_size - (actual_length % client.block_size)
padding_length += client.block_size if padding_length < 4
# compute the packet length (sans the length field itself)
- packet_length = payload.length + padding_length + 1
+ packet_length = payload.bytesize + padding_length + 1
if packet_length < 16
padding_length += client.block_size
- packet_length = payload.length + padding_length + 1
+ packet_length = payload.bytesize + padding_length + 1
end
padding = Array.new(padding_length) { rand(256) }.pack("C*")
@@ -215,7 +219,6 @@
padding_length = @packet.read_byte
payload = @packet.read(@packet_length - padding_length - 1)
- padding = @packet.read(padding_length) if padding_length > 0
my_computed_hmac = server.hmac.digest([server.sequence_number, @packet.content].pack("NA*"))
raise Net::SSH::Exception, "corrupted mac detected" if real_hmac != my_computed_hmac
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/server_version.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/server_version.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/server_version.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/server_version.rb 2013-06-16 17:57:19.000000000 +0000
@@ -46,7 +46,7 @@
begin
b = socket.readpartial(1)
raise Net::SSH::Disconnect, "connection closed by remote host" if b.nil?
- rescue EOFError => e
+ rescue EOFError
raise Net::SSH::Disconnect, "connection closed by remote host"
end
@version << b
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/transport/session.rb ruby-net-ssh-2.6.7/lib/net/ssh/transport/session.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/transport/session.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/transport/session.rb 2013-06-16 17:57:19.000000000 +0000
@@ -9,6 +9,7 @@
require 'net/ssh/transport/packet_stream'
require 'net/ssh/transport/server_version'
require 'net/ssh/verifiers/null'
+require 'net/ssh/verifiers/secure'
require 'net/ssh/verifiers/strict'
require 'net/ssh/verifiers/lenient'
@@ -73,7 +74,8 @@
@host_key_verifier = select_host_key_verifier(options[:paranoid])
- @server_version = ServerVersion.new(socket, logger)
+
+ @server_version = timeout(options[:timeout] || 0) { ServerVersion.new(socket, logger) }
@algorithms = Algorithms.new(self, options)
wait { algorithms.initialized? }
@@ -254,8 +256,9 @@
# Instantiates a new host-key verification class, based on the value of
# the parameter. When true or nil, the default Lenient verifier is
# returned. If it is false, the Null verifier is returned, and if it is
- # :very, the Strict verifier is returned. If the argument happens to
- # respond to :verify, it is returned directly. Otherwise, an exception
+ # :very, the Strict verifier is returned. If it is :secure, the even more
+ # strict Secure verifier is returned. If the argument happens to respond
+ # to :verify, it is returned directly. Otherwise, an exception
# is raised.
def select_host_key_verifier(paranoid)
case paranoid
@@ -265,6 +268,8 @@
Net::SSH::Verifiers::Null.new
when :very then
Net::SSH::Verifiers::Strict.new
+ when :secure then
+ Net::SSH::Verifiers::Secure.new
else
if paranoid.respond_to?(:verify)
paranoid
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/verifiers/secure.rb ruby-net-ssh-2.6.7/lib/net/ssh/verifiers/secure.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/verifiers/secure.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/verifiers/secure.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,54 @@
+require 'net/ssh/errors'
+require 'net/ssh/known_hosts'
+
+module Net; module SSH; module Verifiers
+
+ # Does a strict host verification, looking the server up in the known
+ # host files to see if a key has already been seen for this server. If this
+ # server does not appear in any host file, an exception will be raised
+ # (HostKeyUnknown). This is in contrast to the "Strict" class, which will
+ # silently add the key to your known_hosts file. If the server does appear at
+ # least once, but the key given does not match any known for the server, an
+ # exception will be raised (HostKeyMismatch).
+ # Otherwise, this returns true.
+ class Secure
+ def verify(arguments)
+ options = arguments[:session].options
+ host = options[:host_key_alias] || arguments[:session].host_as_string
+ matches = Net::SSH::KnownHosts.search_for(host, arguments[:session].options)
+
+ # We've never seen this host before, so raise an exception.
+ if matches.empty?
+ process_cache_miss(host, arguments, HostKeyUnknown, "is unknown")
+ end
+
+ # If we found any matches, check to see that the key type and
+ # blob also match.
+ found = matches.any? do |key|
+ key.ssh_type == arguments[:key].ssh_type &&
+ key.to_blob == arguments[:key].to_blob
+ end
+
+ # If a match was found, return true. Otherwise, raise an exception
+ # indicating that the key was not recognized.
+ unless found
+ process_cache_miss(host, arguments, HostKeyMismatch, "does not match")
+ end
+
+ found
+ end
+
+ private
+
+ def process_cache_miss(host, args, exc_class, message)
+ exception = exc_class.new("fingerprint #{args[:fingerprint]} " +
+ "#{message} for #{host.inspect}")
+ exception.data = args
+ exception.callback = Proc.new do
+ Net::SSH::KnownHosts.add(host, args[:key], args[:session].options)
+ end
+ raise exception
+ end
+ end
+
+end; end; end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/verifiers/strict.rb ruby-net-ssh-2.6.7/lib/net/ssh/verifiers/strict.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/verifiers/strict.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/verifiers/strict.rb 2013-06-16 17:57:19.000000000 +0000
@@ -1,5 +1,6 @@
require 'net/ssh/errors'
require 'net/ssh/known_hosts'
+require 'net/ssh/verifiers/secure'
module Net; module SSH; module Verifiers
@@ -9,45 +10,15 @@
# server. If the server does appear at least once, but the key given does
# not match any known for the server, an exception will be raised (HostKeyMismatch).
# Otherwise, this returns true.
- class Strict
+ class Strict < Secure
def verify(arguments)
- options = arguments[:session].options
- host = options[:host_key_alias] || arguments[:session].host_as_string
- matches = Net::SSH::KnownHosts.search_for(host, arguments[:session].options)
-
- # we've never seen this host before, so just automatically add the key.
- # not the most secure option (since the first hit might be the one that
- # is hacked), but since almost nobody actually compares the key
- # fingerprint, this is a reasonable compromise between usability and
- # security.
- if matches.empty?
- ip = arguments[:session].peer[:ip]
- Net::SSH::KnownHosts.add(host, arguments[:key], arguments[:session].options)
+ begin
+ super
+ rescue HostKeyUnknown => err
+ err.remember_host!
return true
end
-
- # If we found any matches, check to see that the key type and
- # blob also match.
- found = matches.any? do |key|
- key.ssh_type == arguments[:key].ssh_type &&
- key.to_blob == arguments[:key].to_blob
- end
-
- # If a match was found, return true. Otherwise, raise an exception
- # indicating that the key was not recognized.
- found || process_cache_miss(host, arguments)
end
-
- private
-
- def process_cache_miss(host, args)
- exception = HostKeyMismatch.new("fingerprint #{args[:fingerprint]} does not match for #{host.inspect}")
- exception.data = args
- exception.callback = Proc.new do
- Net::SSH::KnownHosts.add(host, args[:key], args[:session].options)
- end
- raise exception
- end
end
-end; end; end
\ No newline at end of file
+end; end; end
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh/version.rb ruby-net-ssh-2.6.7/lib/net/ssh/version.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh/version.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh/version.rb 2013-06-16 17:57:19.000000000 +0000
@@ -48,10 +48,10 @@
MAJOR = 2
# The minor component of this version of the Net::SSH library
- MINOR = 2
+ MINOR = 6
# The tiny component of this version of the Net::SSH library
- TINY = 1
+ TINY = 7
# The current version of the Net::SSH library as a Version instance
CURRENT = new(MAJOR, MINOR, TINY)
diff -Nru ruby-net-ssh-2.2.1/lib/net/ssh.rb ruby-net-ssh-2.6.7/lib/net/ssh.rb
--- ruby-net-ssh-2.2.1/lib/net/ssh.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/lib/net/ssh.rb 2013-06-16 17:57:19.000000000 +0000
@@ -61,12 +61,13 @@
# This is the set of options that Net::SSH.start recognizes. See
# Net::SSH.start for a description of each option.
VALID_OPTIONS = [
- :auth_methods, :bind_address, :compression, :compression_level, :config,
- :encryption, :forward_agent, :hmac, :host_key, :kex, :keys, :key_data,
- :languages, :logger, :paranoid, :password, :port, :proxy,
+ :auth_methods, :bind_address, :compression, :compression_level, :config,
+ :encryption, :forward_agent, :hmac, :host_key, :kex, :keys, :key_data,
+ :languages, :logger, :paranoid, :password, :port, :proxy,
:rekey_blocks_limit,:rekey_limit, :rekey_packet_limit, :timeout, :verbose,
:global_known_hosts_file, :user_known_hosts_file, :host_key_alias,
- :host_name, :user, :properties, :passphrase, :keys_only
+ :host_name, :user, :properties, :passphrase, :keys_only, :max_pkt_size,
+ :max_win_size
]
# The standard means of starting a new SSH connection. When used with a
@@ -120,7 +121,7 @@
# host to a known_hosts dictionary file
# * :host_name => the real host name or IP to log into. This is used
# instead of the +host+ parameter, and is primarily only useful when
- # specified in an SSH configuration file. It lets you specify an
+ # specified in an SSH configuration file. It lets you specify an
# "alias", similarly to adding an entry in /etc/hosts but without needing
# to modify /etc/hosts.
# * :kex => the key exchange algorithm (or algorithms) to use
@@ -133,8 +134,13 @@
# option is intended for situations where ssh-agent offers many different
# identites.
# * :logger => the logger instance to use when logging
- # * :paranoid => either true, false, or :very, specifying how strict
- # host-key verification should be
+ # * :max_pkt_size => maximum size we tell the other side that is supported per
+ # packet. Default is 0x8000 (32768 bytes). Increase to 0x10000 (65536 bytes)
+ # for better performance if your SSH server supports it (most do).
+ # * :max_win_size => maximum size we tell the other side that is supported for
+ # the window.
+ # * :paranoid => either false, true, :very, or :secure specifying how
+ # strict host-key verification should be (in increasing order here)
# * :passphrase => the passphrase to use when loading a private key (default
# is +nil+, for no passphrase)
# * :password => the password to use to login
@@ -190,8 +196,9 @@
if auth.authenticate("ssh-connection", user, options[:password])
connection = Connection::Session.new(transport, options)
if block_given?
- yield connection
+ retval = yield connection
connection.close
+ retval
else
return connection
end
@@ -216,7 +223,7 @@
when false, nil then return {}
else Array(use_ssh_config)
end
-
+
Net::SSH::Config.for(host, files)
end
end
diff -Nru ruby-net-ssh-2.2.1/metadata.gz.sig ruby-net-ssh-2.6.7/metadata.gz.sig
--- ruby-net-ssh-2.2.1/metadata.gz.sig 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/metadata.gz.sig 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,4 @@
+Iϑrq}g)jr8!Ǧ3oOdϙOJvΓ,ɉ3jeL*p L})Kc
+o)5b\Y:+j߄?Mu'+zZCHR-3Bs|-{If6EY!ZR\C='
+ - !ruby/object:Gem::Version
+ version: '0'
+ type: :development
+ prerelease: false
+ version_requirements: !ruby/object:Gem::Requirement
+ none: false
+ requirements:
+ - - ! '>='
+ - !ruby/object:Gem::Version
+ version: '0'
+- !ruby/object:Gem::Dependency
+ name: mocha
+ requirement: !ruby/object:Gem::Requirement
+ none: false
+ requirements:
+ - - ! '>='
+ - !ruby/object:Gem::Version
+ version: '0'
+ type: :development
+ prerelease: false
+ version_requirements: !ruby/object:Gem::Requirement
+ none: false
+ requirements:
+ - - ! '>='
+ - !ruby/object:Gem::Version
+ version: '0'
+description: ! 'Net::SSH: a pure-Ruby implementation of the SSH2 client protocol.
+ It allows you to write programs that invoke and interact with processes on remote
+ servers, via SSH2.'
+email: net-ssh@solutious.com
executables: []
-
extensions: []
-
-extra_rdoc_files:
+extra_rdoc_files:
+- LICENSE.txt
- README.rdoc
-- THANKS.rdoc
-- CHANGELOG.rdoc
-files:
-- CHANGELOG.rdoc
+files:
+- CHANGES.txt
+- LICENSE.txt
- Manifest
- README.rdoc
- Rakefile
- Rudyfile
-- THANKS.rdoc
+- THANKS.txt
+- gem-public_cert.pem
- lib/net/ssh.rb
- lib/net/ssh/authentication/agent.rb
+- lib/net/ssh/authentication/agent/java_pageant.rb
+- lib/net/ssh/authentication/agent/socket.rb
- lib/net/ssh/authentication/constants.rb
- lib/net/ssh/authentication/key_manager.rb
- lib/net/ssh/authentication/methods/abstract.rb
- lib/net/ssh/authentication/methods/hostbased.rb
- lib/net/ssh/authentication/methods/keyboard_interactive.rb
+- lib/net/ssh/authentication/methods/none.rb
- lib/net/ssh/authentication/methods/password.rb
- lib/net/ssh/authentication/methods/publickey.rb
- lib/net/ssh/authentication/pageant.rb
@@ -76,17 +136,29 @@
- lib/net/ssh/transport/algorithms.rb
- lib/net/ssh/transport/cipher_factory.rb
- lib/net/ssh/transport/constants.rb
+- lib/net/ssh/transport/ctr.rb
- lib/net/ssh/transport/hmac.rb
- lib/net/ssh/transport/hmac/abstract.rb
- lib/net/ssh/transport/hmac/md5.rb
- lib/net/ssh/transport/hmac/md5_96.rb
- lib/net/ssh/transport/hmac/none.rb
+- lib/net/ssh/transport/hmac/ripemd160.rb
- lib/net/ssh/transport/hmac/sha1.rb
- lib/net/ssh/transport/hmac/sha1_96.rb
+- lib/net/ssh/transport/hmac/sha2_256.rb
+- lib/net/ssh/transport/hmac/sha2_256_96.rb
+- lib/net/ssh/transport/hmac/sha2_512.rb
+- lib/net/ssh/transport/hmac/sha2_512_96.rb
- lib/net/ssh/transport/identity_cipher.rb
- lib/net/ssh/transport/kex.rb
+- lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb
- lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb
- lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb
+- lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb
+- lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb
+- lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb
+- lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb
+- lib/net/ssh/transport/key_expander.rb
- lib/net/ssh/transport/openssl.rb
- lib/net/ssh/transport/packet_stream.rb
- lib/net/ssh/transport/server_version.rb
@@ -94,6 +166,7 @@
- lib/net/ssh/transport/state.rb
- lib/net/ssh/verifiers/lenient.rb
- lib/net/ssh/verifiers/null.rb
+- lib/net/ssh/verifiers/secure.rb
- lib/net/ssh/verifiers/strict.rb
- lib/net/ssh/version.rb
- net-ssh.gemspec
@@ -105,6 +178,7 @@
- test/authentication/methods/test_abstract.rb
- test/authentication/methods/test_hostbased.rb
- test/authentication/methods/test_keyboard_interactive.rb
+- test/authentication/methods/test_none.rb
- test/authentication/methods/test_password.rb
- test/authentication/methods/test_publickey.rb
- test/authentication/test_agent.rb
@@ -120,19 +194,32 @@
- test/configs/wild_cards
- test/connection/test_channel.rb
- test/connection/test_session.rb
+- test/known_hosts/github
- test/manual/test_forward.rb
+- test/start/test_transport.rb
- test/test_all.rb
- test/test_buffer.rb
- test/test_buffered_io.rb
- test/test_config.rb
- test/test_key_factory.rb
+- test/test_known_hosts.rb
- test/transport/hmac/test_md5.rb
- test/transport/hmac/test_md5_96.rb
- test/transport/hmac/test_none.rb
+- test/transport/hmac/test_ripemd160.rb
- test/transport/hmac/test_sha1.rb
- test/transport/hmac/test_sha1_96.rb
+- test/transport/hmac/test_sha2_256.rb
+- test/transport/hmac/test_sha2_256_96.rb
+- test/transport/hmac/test_sha2_512.rb
+- test/transport/hmac/test_sha2_512_96.rb
+- test/transport/kex/test_diffie_hellman_group14_sha1.rb
- test/transport/kex/test_diffie_hellman_group1_sha1.rb
- test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb
+- test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb
+- test/transport/kex/test_ecdh_sha2_nistp256.rb
+- test/transport/kex/test_ecdh_sha2_nistp384.rb
+- test/transport/kex/test_ecdh_sha2_nistp521.rb
- test/transport/test_algorithms.rb
- test/transport/test_cipher_factory.rb
- test/transport/test_hmac.rb
@@ -141,37 +228,29 @@
- test/transport/test_server_version.rb
- test/transport/test_session.rb
- test/transport/test_state.rb
-has_rdoc: true
-homepage: http://github.com/net-ssh/net-ssh
-licenses: []
-
+homepage: https://github.com/net-ssh/net-ssh
+licenses:
+- MIT
post_install_message:
-rdoc_options:
-- --line-numbers
-- --title
-- "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol."
-- --main
-- README.rdoc
-require_paths:
+rdoc_options: []
+require_paths:
- lib
-required_ruby_version: !ruby/object:Gem::Requirement
+required_ruby_version: !ruby/object:Gem::Requirement
none: false
- requirements:
- - - ">="
- - !ruby/object:Gem::Version
- version: "0"
-required_rubygems_version: !ruby/object:Gem::Requirement
+ requirements:
+ - - ! '>='
+ - !ruby/object:Gem::Version
+ version: '0'
+required_rubygems_version: !ruby/object:Gem::Requirement
none: false
- requirements:
- - - ">="
- - !ruby/object:Gem::Version
- version: "0"
+ requirements:
+ - - ! '>='
+ - !ruby/object:Gem::Version
+ version: '0'
requirements: []
-
rubyforge_project: net-ssh
-rubygems_version: 1.5.2
+rubygems_version: 1.8.25
signing_key:
specification_version: 3
-summary: "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol."
+summary: ! 'Net::SSH: a pure-Ruby implementation of the SSH2 client protocol.'
test_files: []
-
diff -Nru ruby-net-ssh-2.2.1/net-ssh.gemspec ruby-net-ssh-2.6.7/net-ssh.gemspec
--- ruby-net-ssh-2.2.1/net-ssh.gemspec 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/net-ssh.gemspec 2013-06-16 17:57:19.000000000 +0000
@@ -1,138 +1,191 @@
-@spec = Gem::Specification.new do |s|
- s.name = "net-ssh"
- s.rubyforge_project = 'net-ssh'
- s.version = "2.2.1"
- s.summary = "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol."
- s.description = s.summary
- s.authors = ["Jamis Buck", "Delano Mandelbaum"]
- s.email = ["net-ssh@solutious.com"]
- s.homepage = "http://github.com/net-ssh/net-ssh"
-
- s.extra_rdoc_files = %w[README.rdoc THANKS.rdoc CHANGELOG.rdoc]
- s.has_rdoc = true
- s.rdoc_options = ["--line-numbers", "--title", s.summary, "--main", "README.rdoc"]
- s.require_paths = %w[lib]
- s.rubygems_version = '1.3.2'
-
- s.executables = %w[]
-
- # = MANIFEST =
- s.files = %w(
- CHANGELOG.rdoc
- Manifest
- README.rdoc
- Rakefile
- Rudyfile
- THANKS.rdoc
- lib/net/ssh.rb
- lib/net/ssh/authentication/agent.rb
- lib/net/ssh/authentication/constants.rb
- lib/net/ssh/authentication/key_manager.rb
- lib/net/ssh/authentication/methods/abstract.rb
- lib/net/ssh/authentication/methods/hostbased.rb
- lib/net/ssh/authentication/methods/keyboard_interactive.rb
- lib/net/ssh/authentication/methods/password.rb
- lib/net/ssh/authentication/methods/publickey.rb
- lib/net/ssh/authentication/pageant.rb
- lib/net/ssh/authentication/session.rb
- lib/net/ssh/buffer.rb
- lib/net/ssh/buffered_io.rb
- lib/net/ssh/config.rb
- lib/net/ssh/connection/channel.rb
- lib/net/ssh/connection/constants.rb
- lib/net/ssh/connection/session.rb
- lib/net/ssh/connection/term.rb
- lib/net/ssh/errors.rb
- lib/net/ssh/key_factory.rb
- lib/net/ssh/known_hosts.rb
- lib/net/ssh/loggable.rb
- lib/net/ssh/packet.rb
- lib/net/ssh/prompt.rb
- lib/net/ssh/proxy/command.rb
- lib/net/ssh/proxy/errors.rb
- lib/net/ssh/proxy/http.rb
- lib/net/ssh/proxy/socks4.rb
- lib/net/ssh/proxy/socks5.rb
- lib/net/ssh/ruby_compat.rb
- lib/net/ssh/service/forward.rb
- lib/net/ssh/test.rb
- lib/net/ssh/test/channel.rb
- lib/net/ssh/test/extensions.rb
- lib/net/ssh/test/kex.rb
- lib/net/ssh/test/local_packet.rb
- lib/net/ssh/test/packet.rb
- lib/net/ssh/test/remote_packet.rb
- lib/net/ssh/test/script.rb
- lib/net/ssh/test/socket.rb
- lib/net/ssh/transport/algorithms.rb
- lib/net/ssh/transport/cipher_factory.rb
- lib/net/ssh/transport/constants.rb
- lib/net/ssh/transport/hmac.rb
- lib/net/ssh/transport/hmac/abstract.rb
- lib/net/ssh/transport/hmac/md5.rb
- lib/net/ssh/transport/hmac/md5_96.rb
- lib/net/ssh/transport/hmac/none.rb
- lib/net/ssh/transport/hmac/sha1.rb
- lib/net/ssh/transport/hmac/sha1_96.rb
- lib/net/ssh/transport/identity_cipher.rb
- lib/net/ssh/transport/kex.rb
- lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb
- lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb
- lib/net/ssh/transport/openssl.rb
- lib/net/ssh/transport/packet_stream.rb
- lib/net/ssh/transport/server_version.rb
- lib/net/ssh/transport/session.rb
- lib/net/ssh/transport/state.rb
- lib/net/ssh/verifiers/lenient.rb
- lib/net/ssh/verifiers/null.rb
- lib/net/ssh/verifiers/strict.rb
- lib/net/ssh/version.rb
- net-ssh.gemspec
- setup.rb
- support/arcfour_check.rb
- support/ssh_tunnel_bug.rb
- test/README.txt
- test/authentication/methods/common.rb
- test/authentication/methods/test_abstract.rb
- test/authentication/methods/test_hostbased.rb
- test/authentication/methods/test_keyboard_interactive.rb
- test/authentication/methods/test_password.rb
- test/authentication/methods/test_publickey.rb
- test/authentication/test_agent.rb
- test/authentication/test_key_manager.rb
- test/authentication/test_session.rb
- test/common.rb
- test/configs/eqsign
- test/configs/exact_match
- test/configs/host_plus
- test/configs/multihost
- test/configs/nohost
- test/configs/numeric_host
- test/configs/wild_cards
- test/connection/test_channel.rb
- test/connection/test_session.rb
- test/manual/test_forward.rb
- test/test_all.rb
- test/test_buffer.rb
- test/test_buffered_io.rb
- test/test_config.rb
- test/test_key_factory.rb
- test/transport/hmac/test_md5.rb
- test/transport/hmac/test_md5_96.rb
- test/transport/hmac/test_none.rb
- test/transport/hmac/test_sha1.rb
- test/transport/hmac/test_sha1_96.rb
- test/transport/kex/test_diffie_hellman_group1_sha1.rb
- test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb
- test/transport/test_algorithms.rb
- test/transport/test_cipher_factory.rb
- test/transport/test_hmac.rb
- test/transport/test_identity_cipher.rb
- test/transport/test_packet_stream.rb
- test/transport/test_server_version.rb
- test/transport/test_session.rb
- test/transport/test_state.rb
- )
+# Generated by jeweler
+# DO NOT EDIT THIS FILE DIRECTLY
+# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
+# -*- encoding: utf-8 -*-
-
+Gem::Specification.new do |s|
+ s.name = "net-ssh"
+ s.version = "2.6.7"
+
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
+ s.authors = ["Jamis Buck", "Delano Mandelbaum"]
+ s.cert_chain = ["gem-public_cert.pem"]
+ s.date = "2013-04-11"
+ s.description = "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol. It allows you to write programs that invoke and interact with processes on remote servers, via SSH2."
+ s.email = "net-ssh@solutious.com"
+ s.extra_rdoc_files = [
+ "LICENSE.txt",
+ "README.rdoc"
+ ]
+ s.files = [
+ "CHANGES.txt",
+ "LICENSE.txt",
+ "Manifest",
+ "README.rdoc",
+ "Rakefile",
+ "Rudyfile",
+ "THANKS.txt",
+ "gem-public_cert.pem",
+ "lib/net/ssh.rb",
+ "lib/net/ssh/authentication/agent.rb",
+ "lib/net/ssh/authentication/agent/java_pageant.rb",
+ "lib/net/ssh/authentication/agent/socket.rb",
+ "lib/net/ssh/authentication/constants.rb",
+ "lib/net/ssh/authentication/key_manager.rb",
+ "lib/net/ssh/authentication/methods/abstract.rb",
+ "lib/net/ssh/authentication/methods/hostbased.rb",
+ "lib/net/ssh/authentication/methods/keyboard_interactive.rb",
+ "lib/net/ssh/authentication/methods/none.rb",
+ "lib/net/ssh/authentication/methods/password.rb",
+ "lib/net/ssh/authentication/methods/publickey.rb",
+ "lib/net/ssh/authentication/pageant.rb",
+ "lib/net/ssh/authentication/session.rb",
+ "lib/net/ssh/buffer.rb",
+ "lib/net/ssh/buffered_io.rb",
+ "lib/net/ssh/config.rb",
+ "lib/net/ssh/connection/channel.rb",
+ "lib/net/ssh/connection/constants.rb",
+ "lib/net/ssh/connection/session.rb",
+ "lib/net/ssh/connection/term.rb",
+ "lib/net/ssh/errors.rb",
+ "lib/net/ssh/key_factory.rb",
+ "lib/net/ssh/known_hosts.rb",
+ "lib/net/ssh/loggable.rb",
+ "lib/net/ssh/packet.rb",
+ "lib/net/ssh/prompt.rb",
+ "lib/net/ssh/proxy/command.rb",
+ "lib/net/ssh/proxy/errors.rb",
+ "lib/net/ssh/proxy/http.rb",
+ "lib/net/ssh/proxy/socks4.rb",
+ "lib/net/ssh/proxy/socks5.rb",
+ "lib/net/ssh/ruby_compat.rb",
+ "lib/net/ssh/service/forward.rb",
+ "lib/net/ssh/test.rb",
+ "lib/net/ssh/test/channel.rb",
+ "lib/net/ssh/test/extensions.rb",
+ "lib/net/ssh/test/kex.rb",
+ "lib/net/ssh/test/local_packet.rb",
+ "lib/net/ssh/test/packet.rb",
+ "lib/net/ssh/test/remote_packet.rb",
+ "lib/net/ssh/test/script.rb",
+ "lib/net/ssh/test/socket.rb",
+ "lib/net/ssh/transport/algorithms.rb",
+ "lib/net/ssh/transport/cipher_factory.rb",
+ "lib/net/ssh/transport/constants.rb",
+ "lib/net/ssh/transport/ctr.rb",
+ "lib/net/ssh/transport/hmac.rb",
+ "lib/net/ssh/transport/hmac/abstract.rb",
+ "lib/net/ssh/transport/hmac/md5.rb",
+ "lib/net/ssh/transport/hmac/md5_96.rb",
+ "lib/net/ssh/transport/hmac/none.rb",
+ "lib/net/ssh/transport/hmac/ripemd160.rb",
+ "lib/net/ssh/transport/hmac/sha1.rb",
+ "lib/net/ssh/transport/hmac/sha1_96.rb",
+ "lib/net/ssh/transport/hmac/sha2_256.rb",
+ "lib/net/ssh/transport/hmac/sha2_256_96.rb",
+ "lib/net/ssh/transport/hmac/sha2_512.rb",
+ "lib/net/ssh/transport/hmac/sha2_512_96.rb",
+ "lib/net/ssh/transport/identity_cipher.rb",
+ "lib/net/ssh/transport/kex.rb",
+ "lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb",
+ "lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb",
+ "lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb",
+ "lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb",
+ "lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb",
+ "lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb",
+ "lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb",
+ "lib/net/ssh/transport/key_expander.rb",
+ "lib/net/ssh/transport/openssl.rb",
+ "lib/net/ssh/transport/packet_stream.rb",
+ "lib/net/ssh/transport/server_version.rb",
+ "lib/net/ssh/transport/session.rb",
+ "lib/net/ssh/transport/state.rb",
+ "lib/net/ssh/verifiers/lenient.rb",
+ "lib/net/ssh/verifiers/null.rb",
+ "lib/net/ssh/verifiers/secure.rb",
+ "lib/net/ssh/verifiers/strict.rb",
+ "lib/net/ssh/version.rb",
+ "net-ssh.gemspec",
+ "setup.rb",
+ "support/arcfour_check.rb",
+ "support/ssh_tunnel_bug.rb",
+ "test/README.txt",
+ "test/authentication/methods/common.rb",
+ "test/authentication/methods/test_abstract.rb",
+ "test/authentication/methods/test_hostbased.rb",
+ "test/authentication/methods/test_keyboard_interactive.rb",
+ "test/authentication/methods/test_none.rb",
+ "test/authentication/methods/test_password.rb",
+ "test/authentication/methods/test_publickey.rb",
+ "test/authentication/test_agent.rb",
+ "test/authentication/test_key_manager.rb",
+ "test/authentication/test_session.rb",
+ "test/common.rb",
+ "test/configs/eqsign",
+ "test/configs/exact_match",
+ "test/configs/host_plus",
+ "test/configs/multihost",
+ "test/configs/nohost",
+ "test/configs/numeric_host",
+ "test/configs/wild_cards",
+ "test/connection/test_channel.rb",
+ "test/connection/test_session.rb",
+ "test/known_hosts/github",
+ "test/manual/test_forward.rb",
+ "test/start/test_transport.rb",
+ "test/test_all.rb",
+ "test/test_buffer.rb",
+ "test/test_buffered_io.rb",
+ "test/test_config.rb",
+ "test/test_key_factory.rb",
+ "test/test_known_hosts.rb",
+ "test/transport/hmac/test_md5.rb",
+ "test/transport/hmac/test_md5_96.rb",
+ "test/transport/hmac/test_none.rb",
+ "test/transport/hmac/test_ripemd160.rb",
+ "test/transport/hmac/test_sha1.rb",
+ "test/transport/hmac/test_sha1_96.rb",
+ "test/transport/hmac/test_sha2_256.rb",
+ "test/transport/hmac/test_sha2_256_96.rb",
+ "test/transport/hmac/test_sha2_512.rb",
+ "test/transport/hmac/test_sha2_512_96.rb",
+ "test/transport/kex/test_diffie_hellman_group14_sha1.rb",
+ "test/transport/kex/test_diffie_hellman_group1_sha1.rb",
+ "test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb",
+ "test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb",
+ "test/transport/kex/test_ecdh_sha2_nistp256.rb",
+ "test/transport/kex/test_ecdh_sha2_nistp384.rb",
+ "test/transport/kex/test_ecdh_sha2_nistp521.rb",
+ "test/transport/test_algorithms.rb",
+ "test/transport/test_cipher_factory.rb",
+ "test/transport/test_hmac.rb",
+ "test/transport/test_identity_cipher.rb",
+ "test/transport/test_packet_stream.rb",
+ "test/transport/test_server_version.rb",
+ "test/transport/test_session.rb",
+ "test/transport/test_state.rb"
+ ]
+ s.homepage = "https://github.com/net-ssh/net-ssh"
+ s.licenses = ["MIT"]
+ s.require_paths = ["lib"]
+ s.rubyforge_project = "net-ssh"
+ s.rubygems_version = "1.8.25"
+ s.signing_key = "/mnt/gem/gem-private_key.pem"
+ s.summary = "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol."
+
+ if s.respond_to? :specification_version then
+ s.specification_version = 3
+
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
+ s.add_development_dependency(%q, [">= 0"])
+ s.add_development_dependency(%q, [">= 0"])
+ else
+ s.add_dependency(%q, [">= 0"])
+ s.add_dependency(%q, [">= 0"])
+ end
+ else
+ s.add_dependency(%q, [">= 0"])
+ s.add_dependency(%q, [">= 0"])
+ end
end
+
diff -Nru ruby-net-ssh-2.2.1/test/README.txt ruby-net-ssh-2.6.7/test/README.txt
--- ruby-net-ssh-2.2.1/test/README.txt 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/README.txt 2013-06-16 17:57:19.000000000 +0000
@@ -13,11 +13,15 @@
EXPECTED RESULTS
-* Ruby 1.8: all tests pass
-
* Ruby 1.9: all tests pass
-* JRuby 1.5: 99% tests pass (448 tests, 1846 assertions, 1 failures)
+* Ruby 1.8: all tests pass (up until version 2.5)
+
+* JRuby 1.7: 98% test pass (510 tests, 1914 assertions, 2 failures, 9 errors)
+
+* JRuby 1.6: 98% test pass (510 tests, 1914 assertions, 4 failures, 5 errors)
+
+* JRuby 1.5: 98% tests pass (510 tests, 1914 assertions, 5 failures, 5 errors)
PORT FORWARDING TESTS
diff -Nru ruby-net-ssh-2.2.1/test/authentication/methods/test_none.rb ruby-net-ssh-2.6.7/test/authentication/methods/test_none.rb
--- ruby-net-ssh-2.2.1/test/authentication/methods/test_none.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/authentication/methods/test_none.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,41 @@
+require 'common'
+require 'net/ssh/authentication/methods/none'
+require 'authentication/methods/common'
+
+module Authentication; module Methods
+
+ class TestNone < Test::Unit::TestCase
+ include Common
+
+ def test_authenticate_should_raise_if_none_disallowed
+ transport.expect do |t,packet|
+ assert_equal USERAUTH_REQUEST, packet.type
+ assert_equal "jamis", packet.read_string
+ assert_equal "ssh-connection", packet.read_string
+ assert_equal "none", packet.read_string
+
+ t.return(USERAUTH_FAILURE, :string, "publickey")
+ end
+
+ assert_raises Net::SSH::Authentication::DisallowedMethod do
+ subject.authenticate("ssh-connection", "jamis", "pass")
+ end
+ end
+
+ def test_authenticate_should_return_true
+ transport.expect do |t,packet|
+ assert_equal USERAUTH_REQUEST, packet.type
+ t.return(USERAUTH_SUCCESS)
+ end
+
+ assert subject.authenticate("ssh-connection", "", "")
+ end
+
+ private
+
+ def subject(options={})
+ @subject ||= Net::SSH::Authentication::Methods::None.new(session(options), options)
+ end
+ end
+
+end; end
diff -Nru ruby-net-ssh-2.2.1/test/authentication/test_key_manager.rb ruby-net-ssh-2.6.7/test/authentication/test_key_manager.rb
--- ruby-net-ssh-2.2.1/test/authentication/test_key_manager.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/authentication/test_key_manager.rb 2013-06-16 17:57:19.000000000 +0000
@@ -18,7 +18,9 @@
manager.add "/second"
manager.add "/third"
manager.add "/second"
- assert_equal %w(/first /second /third), manager.key_files
+ assert_true manager.key_files.length == 3
+ final_files = manager.key_files.map {|item| item.split('/').last}
+ assert_equal %w(first second third), final_files
end
def test_use_agent_should_be_set_to_false_if_agent_could_not_be_found
@@ -30,9 +32,10 @@
def test_each_identity_should_load_from_key_files
manager.stubs(:agent).returns(nil)
-
- stub_file_private_key "/first", rsa
- stub_file_private_key "/second", dsa
+ first = File.expand_path("/first")
+ second = File.expand_path("/second")
+ stub_file_private_key first, rsa
+ stub_file_private_key second, dsa
identities = []
manager.each_identity { |identity| identities << identity }
@@ -40,9 +43,9 @@
assert_equal 2, identities.length
assert_equal rsa.to_blob, identities.first.to_blob
assert_equal dsa.to_blob, identities.last.to_blob
-
- assert_equal({:from => :file, :file => "/first", :key => rsa}, manager.known_identities[rsa])
- assert_equal({:from => :file, :file => "/second", :key => dsa}, manager.known_identities[dsa])
+
+ assert_equal({:from => :file, :file => first, :key => rsa}, manager.known_identities[rsa])
+ assert_equal({:from => :file, :file => second, :key => dsa}, manager.known_identities[dsa])
end
def test_identities_should_load_from_agent
@@ -59,10 +62,33 @@
assert_equal({:from => :agent}, manager.known_identities[dsa])
end
+ if defined?(OpenSSL::PKey::EC)
+ def test_identities_with_ecdsa_should_load_from_agent
+ manager.stubs(:agent).returns(agent_with_ecdsa_keys)
+
+ identities = []
+ manager.each_identity { |identity| identities << identity }
+ assert_equal 5, identities.length
+
+ assert_equal rsa.to_blob, identities[0].to_blob
+ assert_equal dsa.to_blob, identities[1].to_blob
+ assert_equal ecdsa_sha2_nistp256.to_blob, identities[2].to_blob
+ assert_equal ecdsa_sha2_nistp384.to_blob, identities[3].to_blob
+ assert_equal ecdsa_sha2_nistp521.to_blob, identities[4].to_blob
+
+ assert_equal({:from => :agent}, manager.known_identities[rsa])
+ assert_equal({:from => :agent}, manager.known_identities[dsa])
+ assert_equal({:from => :agent}, manager.known_identities[ecdsa_sha2_nistp256])
+ assert_equal({:from => :agent}, manager.known_identities[ecdsa_sha2_nistp384])
+ assert_equal({:from => :agent}, manager.known_identities[ecdsa_sha2_nistp521])
+ end
+ end
+
def test_only_identities_with_key_files_should_load_from_agent_of_keys_only_set
manager(:keys_only => true).stubs(:agent).returns(agent)
- stub_file_private_key "/first", rsa
+ first = File.expand_path("/first")
+ stub_file_private_key first, rsa
identities = []
manager.each_identity { |identity| identities << identity }
@@ -76,8 +102,10 @@
def test_identities_without_public_key_files_should_not_be_touched_if_identity_loaded_from_agent
manager.stubs(:agent).returns(agent)
- stub_file_public_key "/first", rsa
- stub_file_private_key "/second", dsa, :passphrase => :should_not_be_asked
+ first = File.expand_path("/first")
+ stub_file_public_key first, rsa
+ second = File.expand_path("/second")
+ stub_file_private_key second, dsa, :passphrase => :should_not_be_asked
identities = []
manager.each_identity do |identity|
@@ -98,7 +126,8 @@
def test_sign_with_file_originated_key_should_load_private_key_and_sign_with_it
manager.stubs(:agent).returns(nil)
- stub_file_private_key "/first", rsa(512)
+ first = File.expand_path("/first")
+ stub_file_private_key first, rsa(512)
rsa.expects(:ssh_do_sign).with("hello, world").returns("abcxyz123")
manager.each_identity { |identity| } # preload the known_identities
assert_equal "\0\0\0\assh-rsa\0\0\0\011abcxyz123", manager.sign(rsa, "hello, world")
@@ -132,7 +161,11 @@
Net::SSH::KeyFactory.expects(:load_private_key).with(name, nil, any_of(true, false)).returns(key).at_least_once
end
- key.stubs(:public_key).returns(key)
+ # do not override OpenSSL::PKey::EC#public_key
+ # (it will be called in transport/openssl.rb.)
+ unless defined?(OpenSSL::PKey::EC) && key.public_key.kind_of?(OpenSSL::PKey::EC::Point)
+ key.stubs(:public_key).returns(key)
+ end
end
def stub_file_public_key(name, key)
@@ -151,10 +184,31 @@
@dsa ||= OpenSSL::PKey::DSA.new(512)
end
+ if defined?(OpenSSL::PKey::EC)
+ def ecdsa_sha2_nistp256
+ @ecdsa_sha2_nistp256 ||= OpenSSL::PKey::EC.new("prime256v1").generate_key
+ end
+
+ def ecdsa_sha2_nistp384
+ @ecdsa_sha2_nistp384 ||= OpenSSL::PKey::EC.new("secp384r1").generate_key
+ end
+
+ def ecdsa_sha2_nistp521
+ @ecdsa_sha2_nistp521 ||= OpenSSL::PKey::EC.new("secp521r1").generate_key
+ end
+ end
+
def agent
@agent ||= stub("agent", :identities => [rsa, dsa])
end
+ def agent_with_ecdsa_keys
+ @agent ||= stub("agent", :identities => [rsa, dsa,
+ ecdsa_sha2_nistp256,
+ ecdsa_sha2_nistp384,
+ ecdsa_sha2_nistp521])
+ end
+
def manager(options = {})
@manager ||= Net::SSH::Authentication::KeyManager.new(nil, options)
end
diff -Nru ruby-net-ssh-2.2.1/test/authentication/test_session.rb ruby-net-ssh-2.6.7/test/authentication/test_session.rb
--- ruby-net-ssh-2.2.1/test/authentication/test_session.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/authentication/test_session.rb 2013-06-16 17:57:19.000000000 +0000
@@ -8,7 +8,7 @@
include Net::SSH::Authentication::Constants
def test_constructor_should_set_defaults
- assert_equal %w(publickey hostbased password keyboard-interactive), session.auth_methods
+ assert_equal %w(none publickey hostbased password keyboard-interactive), session.auth_methods
assert_equal session.auth_methods, session.allowed_auth_methods
end
@@ -21,6 +21,7 @@
Net::SSH::Authentication::Methods::Publickey.any_instance.expects(:authenticate).with("next service", "username", "password").raises(Net::SSH::Authentication::DisallowedMethod)
Net::SSH::Authentication::Methods::Hostbased.any_instance.expects(:authenticate).with("next service", "username", "password").returns(true)
+ Net::SSH::Authentication::Methods::None.any_instance.expects(:authenticate).with("next service", "username", "password").returns(false)
assert session.authenticate("next service", "username", "password")
end
@@ -46,7 +47,8 @@
Net::SSH::Authentication::Methods::Hostbased.any_instance.expects(:authenticate).with("next service", "username", "password").returns(false)
Net::SSH::Authentication::Methods::Password.any_instance.expects(:authenticate).with("next service", "username", "password").returns(false)
Net::SSH::Authentication::Methods::KeyboardInteractive.any_instance.expects(:authenticate).with("next service", "username", "password").returns(false)
-
+ Net::SSH::Authentication::Methods::None.any_instance.expects(:authenticate).with("next service", "username", "password").returns(false)
+
assert_equal false, session.authenticate("next service", "username", "password")
end
diff -Nru ruby-net-ssh-2.2.1/test/common.rb ruby-net-ssh-2.6.7/test/common.rb
--- ruby-net-ssh-2.2.1/test/common.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/common.rb 2013-06-16 17:57:19.000000000 +0000
@@ -1,7 +1,8 @@
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
gem "test-unit" # http://rubyforge.org/pipermail/test-unit-tracker/2009-July/000075.html
+gem 'mocha'
require 'test/unit'
-require 'mocha'
+require 'mocha/setup'
require 'net/ssh/buffer'
require 'net/ssh/config'
require 'net/ssh/loggable'
diff -Nru ruby-net-ssh-2.2.1/test/connection/test_channel.rb ruby-net-ssh-2.6.7/test/connection/test_channel.rb
--- ruby-net-ssh-2.2.1/test/connection/test_channel.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/connection/test_channel.rb 2013-06-16 17:57:19.000000000 +0000
@@ -11,7 +11,7 @@
end
def test_constructor_should_set_defaults
- assert_equal 0x10000, channel.local_maximum_packet_size
+ assert_equal 0x8000, channel.local_maximum_packet_size
assert_equal 0x20000, channel.local_maximum_window_size
assert channel.pending_requests.empty?
end
@@ -126,7 +126,7 @@
assert_equal CHANNEL_DATA, packet.type
assert_equal 0, packet[:local_id]
assert_equal "hello wo", packet[:data]
-
+
t.expect do |t2,packet2|
assert_equal CHANNEL_DATA, packet2.type
assert_equal 0, packet2[:local_id]
diff -Nru ruby-net-ssh-2.2.1/test/connection/test_session.rb ruby-net-ssh-2.6.7/test/connection/test_session.rb
--- ruby-net-ssh-2.2.1/test/connection/test_session.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/connection/test_session.rb 2013-06-16 17:57:19.000000000 +0000
@@ -225,7 +225,7 @@
result = nil
session.on_open_channel("auth-agent") { |*args| result = args }
process_times(2)
- assert_equal P(:byte, CHANNEL_OPEN_CONFIRMATION, :long, 14, :long, 0, :long, 0x20000, :long, 0x10000).to_s, socket.write_buffer
+ assert_equal P(:byte, CHANNEL_OPEN_CONFIRMATION, :long, 14, :long, 0, :long, 0x20000, :long, 0x8000).to_s, socket.write_buffer
assert_not_nil(ch = session.channels[0])
assert_equal [session, ch, P(:byte, CHANNEL_OPEN, :string, "auth-agent", :long, 14, :long, 0x20001, :long, 0x10001)], result
assert_equal 0, ch.local_id
@@ -233,7 +233,7 @@
assert_equal 0x20001, ch.remote_maximum_window_size
assert_equal 0x10001, ch.remote_maximum_packet_size
assert_equal 0x20000, ch.local_maximum_window_size
- assert_equal 0x10000, ch.local_maximum_packet_size
+ assert_equal 0x8000, ch.local_maximum_packet_size
assert_equal "auth-agent", ch.type
end
diff -Nru ruby-net-ssh-2.2.1/test/known_hosts/github ruby-net-ssh-2.6.7/test/known_hosts/github
--- ruby-net-ssh-2.2.1/test/known_hosts/github 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/known_hosts/github 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1 @@
+github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
\ No newline at end of file
diff -Nru ruby-net-ssh-2.2.1/test/manual/test_forward.rb ruby-net-ssh-2.6.7/test/manual/test_forward.rb
--- ruby-net-ssh-2.2.1/test/manual/test_forward.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/manual/test_forward.rb 2013-06-16 17:57:19.000000000 +0000
@@ -27,7 +27,7 @@
end
def ssh_start_params
- [localhost ,ENV['USER']] #:verbose => :debug
+ [localhost ,ENV['USER'], {:keys => "~/.ssh/id_rsa", :verbose => :debug}]
end
def find_free_port
@@ -128,7 +128,7 @@
tempfile.delete
yield UNIXServer.open(path)
File.delete(path)
- end
+ end if defined?(UNIXServer)
def test_forward_local_unix_socket_to_remote_port
session = Net::SSH.start(*ssh_start_params)
@@ -157,7 +157,7 @@
assert_not_nil(client_data, "client should have received data")
assert(client_data.match(/item\d/), 'client should have received the string item')
- end
+ end if defined?(UNIXSocket)
def test_loop_should_not_abort_when_server_side_of_forward_is_closed
session = Net::SSH.start(*ssh_start_params)
diff -Nru ruby-net-ssh-2.2.1/test/start/test_transport.rb ruby-net-ssh-2.6.7/test/start/test_transport.rb
--- ruby-net-ssh-2.2.1/test/start/test_transport.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/start/test_transport.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,28 @@
+require 'common'
+require 'net/ssh'
+
+module NetSSH
+ class TestStart < Test::Unit::TestCase
+ attr_reader :transport_session
+ attr_reader :authentication_session
+
+ def setup
+ @transport_session = mock('transport_session')
+ @authentication_session = mock('authentication_session')
+ Net::SSH::Transport::Session.expects(:new => transport_session)
+ Net::SSH::Authentication::Session.expects(:new => authentication_session)
+ end
+
+ def test_close_transport_when_authentication_fails
+ authentication_session.expects(:authenticate => false)
+
+ transport_session.expects(:close).at_least_once
+
+ begin
+ Net::SSH.start('localhost', 'testuser') {}
+ rescue Net::SSH::AuthenticationFailed
+ # Authentication should fail, as it is part of the context
+ end
+ end
+ end
+end
\ No newline at end of file
diff -Nru ruby-net-ssh-2.2.1/test/test_all.rb ruby-net-ssh-2.6.7/test/test_all.rb
--- ruby-net-ssh-2.2.1/test/test_all.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/test_all.rb 2013-06-16 17:57:19.000000000 +0000
@@ -1,3 +1,5 @@
+$: << '.'
+
# $ ruby -Ilib -Itest -rrubygems test/test_all.rb
# $ ruby -Ilib -Itest -rrubygems test/transport/test_server_version.rb
Dir.chdir(File.dirname(__FILE__)) do
diff -Nru ruby-net-ssh-2.2.1/test/test_buffer.rb ruby-net-ssh-2.6.7/test/test_buffer.rb
--- ruby-net-ssh-2.2.1/test/test_buffer.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/test_buffer.rb 2013-06-16 17:57:19.000000000 +0000
@@ -29,6 +29,11 @@
assert_equal "\1\2\3\4\5", buffer.to_s
end
+ def test_from_should_measure_bytesize_of_utf_8_string_correctly
+ buffer = Net::SSH::Buffer.from(:string, "\u2603") # Snowman is 3 bytes
+ assert_equal "\0\0\0\3\u2603", buffer.to_s
+ end
+
def test_read_without_argument_should_read_to_end
buffer = new("hello world")
assert_equal "hello world", buffer.read
@@ -290,7 +295,7 @@
key.pub_key = 0xeeccaa8866442200
buffer.write_key(key)
- assert_equal "start\0\0\0\7ssh-dss\0\0\0\011\0\xff\xee\xdd\xcc\xbb\xaa\x99\x88\0\0\0\010\x77\x66\x55\x44\x33\x22\x11\x00\0\0\0\011\0\xff\xdd\xbb\x99\x77\x55\x33\x11\0\0\0\011\0\xee\xcc\xaa\x88\x66\x44\x22\x00", buffer.to_s
+assert_equal "start\0\0\0\7ssh-dss\0\0\0\011\0\xff\xee\xdd\xcc\xbb\xaa\x99\x88\0\0\0\010\x77\x66\x55\x44\x33\x22\x11\x00\0\0\0\011\0\xff\xdd\xbb\x99\x77\x55\x33\x11\0\0\0\011\0\xee\xcc\xaa\x88\x66\x44\x22\x00", buffer.to_s
end
def test_write_rsa_key_should_write_argument_to_end_of_buffer
@@ -304,6 +309,67 @@
assert_equal "start\0\0\0\7ssh-rsa\0\0\0\011\0\xff\xee\xdd\xcc\xbb\xaa\x99\x88\0\0\0\010\x77\x66\x55\x44\x33\x22\x11\x00", buffer.to_s
end
+ if defined?(OpenSSL::PKey::EC)
+ def test_read_key_blob_should_read_ecdsa_sha2_nistp256_keys
+ random_ecdsa_sha2_nistp256 { |buffer|
+ buffer.read_keyblob("ecdsa-sha2-nistp256")
+ }
+ end
+ def test_read_key_blob_should_read_ecdsa_sha2_nistp384_keys
+ random_ecdsa_sha2_nistp384 { |buffer|
+ buffer.read_keyblob("ecdsa-sha2-nistp384")
+ }
+ end
+ def test_read_key_blob_should_read_ecdsa_sha2_nistp521_keys
+ random_ecdsa_sha2_nistp521 { |buffer|
+ buffer.read_keyblob("ecdsa-sha2-nistp521")
+ }
+ end
+
+ def test_read_key_should_read_ecdsa_sha2_nistp256_key_type_and_keyblob
+ random_ecdsa_sha2_nistp256 do |buffer|
+ b2 = Net::SSH::Buffer.from(:string, "ecdsa-sha2-nistp256", :raw, buffer)
+ b2.read_key
+ end
+ end
+ def test_read_key_should_read_ecdsa_sha2_nistp384_key_type_and_keyblob
+ random_ecdsa_sha2_nistp384 do |buffer|
+ b2 = Net::SSH::Buffer.from(:string, "ecdsa-sha2-nistp384", :raw, buffer)
+ b2.read_key
+ end
+ end
+ def test_read_key_should_read_ecdsa_sha2_nistp521_key_type_and_keyblob
+ random_ecdsa_sha2_nistp521 do |buffer|
+ b2 = Net::SSH::Buffer.from(:string, "ecdsa-sha2-nistp521", :raw, buffer)
+ b2.read_key
+ end
+ end
+
+ def test_write_ecdsa_sha2_nistp256_key_should_write_argument_to_end_of_buffer
+ buffer = new("start")
+ key = OpenSSL::PKey::EC.new("-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIISGj5vAJCWt2KPI8NwaWVDSNLl2vbRxDIOkY+n6O0VVoAoGCCqGSM49\nAwEHoUQDQgAEnKbs0yEogTKT4QRu8T9nb2svl2mEWXb6g224oCpD2o6TYNXNw54H\nmWkdCv+kFCqSlfSi5fqFhrXdfEY6zSzQYQ==\n-----END EC PRIVATE KEY-----\n")
+
+ buffer.write_key(key)
+ assert_equal "start\000\000\000\023ecdsa-sha2-nistp256\000\000\000\bnistp256\000\000\000A\004\234\246\354\323!(\2012\223\341\004n\361?gok/\227i\204Yv\372\203m\270\240*C\332\216\223`\325\315\303\236\a\231i\035\n\377\244\024*\222\225\364\242\345\372\205\206\265\335|F:\315,\320a", buffer.to_s
+ end
+
+ def test_write_ecdsa_sha2_nistp384_key_should_write_argument_to_end_of_buffer
+ buffer = new("start")
+ key = OpenSSL::PKey::EC.new("-----BEGIN EC PRIVATE KEY-----\nMIGkAgEBBDBAfxJpzhsR7O+wMol6BcDgualR8rJBvYegUDYbBUrDnPzDx2/gD1lZ\nnwG1FuD2s9igBwYFK4EEACKhZANiAATsfiU4Kxyvvj1DdvFYsdDnZIT7loRlan9I\n8geCWPPl6x7NFRP+awrnTaarMgieGqxG8IQaIA0SsDOICfbDBkuatRi0S1Et/in4\nZwVEZvO81Ro5YSrjuUDAsytnI6OXS28=\n-----END EC PRIVATE KEY-----\n")
+
+ buffer.write_key(key)
+ assert_equal "start\000\000\000\023ecdsa-sha2-nistp384\000\000\000\bnistp384\000\000\000a\004\354~%8+\034\257\276=Cv\361X\261\320\347d\204\373\226\204ej\177H\362\a\202X\363\345\353\036\315\025\023\376k\n\347M\246\2532\b\236\032\254F\360\204\032 \r\022\2603\210\t\366\303\006K\232\265\030\264KQ-\376)\370g\005Df\363\274\325\0329a*\343\271@\300\263+g#\243\227Ko", buffer.to_s
+ end
+
+ def test_write_ecdsa_sha2_nistp521_key_should_write_argument_to_end_of_buffer
+ buffer = new("start")
+ key = OpenSSL::PKey::EC.new("-----BEGIN EC PRIVATE KEY-----\nMIHbAgEBBEGhnQF/SFo4Vym88HnCfc6BR8WwYqDh9wNTPeqzR8auxIpp0GKQlCG2\nuHzyteJX5/YalV8empYhEzNmNLNn8x7j0aAHBgUrgQQAI6GBiQOBhgAEAYygOgV9\nVI8UyLQ3BDlv+rb3es+ufrIcj++cqcc9QcmRn237NiWRr/1NKy2AKijsEdACtZXo\nxPC0x9Vs9ieC2oR+ANOBubcxPl2giDnBYm8ywAmmlXsP5ByAM17k97CzW5O+Z/uO\nbxGUzzhoXTNcjqpAckhRVKdnh6FL/rKelT0tBYi+\n-----END EC PRIVATE KEY-----\n")
+
+ buffer.write_key(key)
+ assert_equal "start\000\000\000\023ecdsa-sha2-nistp521\000\000\000\bnistp521\000\000\000\205\004\001\214\240:\005}T\217\024\310\2647\0049o\372\266\367z\317\256~\262\034\217\357\234\251\307=A\311\221\237m\3736%\221\257\375M+-\200*(\354\021\320\002\265\225\350\304\360\264\307\325l\366'\202\332\204~\000\323\201\271\2671>]\240\2109\301bo2\300\t\246\225{\017\344\034\2003^\344\367\260\263[\223\276g\373\216o\021\224\3178h]3\\\216\252@rHQT\247g\207\241K\376\262\236\225=-\005\210\276", buffer.to_s
+ end
+ end
+
private
def random_rsa
@@ -330,7 +396,36 @@
assert_equal n4, key.pub_key
end
+ if defined?(OpenSSL::PKey::EC)
+ def random_ecdsa_sha2_nistp256
+ k = OpenSSL::PKey::EC.new("prime256v1").generate_key
+ buffer = Net::SSH::Buffer.from(:string, "nistp256",
+ :string, k.public_key.to_bn.to_s(2))
+ key = yield(buffer)
+ assert_equal "ecdsa-sha2-nistp256", key.ssh_type
+ assert_equal k.public_key, key.public_key
+ end
+
+ def random_ecdsa_sha2_nistp384
+ k = OpenSSL::PKey::EC.new("secp384r1").generate_key
+ buffer = Net::SSH::Buffer.from(:string, "nistp384",
+ :string, k.public_key.to_bn.to_s(2))
+ key = yield(buffer)
+ assert_equal "ecdsa-sha2-nistp384", key.ssh_type
+ assert_equal k.public_key, key.public_key
+ end
+
+ def random_ecdsa_sha2_nistp521
+ k = OpenSSL::PKey::EC.new("secp521r1").generate_key
+ buffer = Net::SSH::Buffer.from(:string, "nistp521",
+ :string, k.public_key.to_bn.to_s(2))
+ key = yield(buffer)
+ assert_equal "ecdsa-sha2-nistp521", key.ssh_type
+ assert_equal k.public_key, key.public_key
+ end
+ end
+
def new(*args)
Net::SSH::Buffer.new(*args)
end
-end
\ No newline at end of file
+end
diff -Nru ruby-net-ssh-2.2.1/test/test_config.rb ruby-net-ssh-2.6.7/test/test_config.rb
--- ruby-net-ssh-2.2.1/test/test_config.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/test_config.rb 2013-06-16 17:57:19.000000000 +0000
@@ -3,8 +3,9 @@
class TestConfig < Test::Unit::TestCase
def test_load_for_non_existant_file_should_return_empty_hash
- File.expects(:readable?).with("/bogus/file").returns(false)
- assert_equal({}, Net::SSH::Config.load("/bogus/file", "host.name"))
+ bogus_file = File.expand_path("/bogus/file")
+ File.expects(:readable?).with(bogus_file).returns(false)
+ assert_equal({}, Net::SSH::Config.load(bogus_file, "host.name"))
end
def test_load_should_expand_path
diff -Nru ruby-net-ssh-2.2.1/test/test_key_factory.rb ruby-net-ssh-2.6.7/test/test_key_factory.rb
--- ruby-net-ssh-2.2.1/test/test_key_factory.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/test_key_factory.rb 2013-06-16 17:57:19.000000000 +0000
@@ -2,53 +2,104 @@
require 'net/ssh/key_factory'
class TestKeyFactory < Test::Unit::TestCase
+ def setup
+ @key_file = File.expand_path("/key-file")
+ end
+
def test_load_unencrypted_private_RSA_key_should_return_key
- File.expects(:read).with("/key-file").returns(rsa_key.export)
- assert_equal rsa_key.to_der, Net::SSH::KeyFactory.load_private_key("/key-file").to_der
+ File.expects(:read).with(@key_file).returns(rsa_key.export)
+ assert_equal rsa_key.to_der, Net::SSH::KeyFactory.load_private_key(@key_file).to_der
end
def test_load_unencrypted_private_DSA_key_should_return_key
- File.expects(:read).with("/key-file").returns(dsa_key.export)
- assert_equal dsa_key.to_der, Net::SSH::KeyFactory.load_private_key("/key-file").to_der
+ File.expects(:read).with(@key_file).returns(dsa_key.export)
+ assert_equal dsa_key.to_der, Net::SSH::KeyFactory.load_private_key(@key_file).to_der
end
def test_load_encrypted_private_RSA_key_should_prompt_for_password_and_return_key
- File.expects(:read).with("/key-file").returns(encrypted(rsa_key, "password"))
- Net::SSH::KeyFactory.expects(:prompt).with("Enter passphrase for /key-file:", false).returns("password")
- assert_equal rsa_key.to_der, Net::SSH::KeyFactory.load_private_key("/key-file").to_der
+ File.expects(:read).with(@key_file).returns(encrypted(rsa_key, "password"))
+ Net::SSH::KeyFactory.expects(:prompt).with("Enter passphrase for #{@key_file}:", false).returns("password")
+ assert_equal rsa_key.to_der, Net::SSH::KeyFactory.load_private_key(@key_file).to_der
end
def test_load_encrypted_private_RSA_key_with_password_should_not_prompt_and_return_key
- File.expects(:read).with("/key-file").returns(encrypted(rsa_key, "password"))
- assert_equal rsa_key.to_der, Net::SSH::KeyFactory.load_private_key("/key-file", "password").to_der
+ File.expects(:read).with(@key_file).returns(encrypted(rsa_key, "password"))
+ assert_equal rsa_key.to_der, Net::SSH::KeyFactory.load_private_key(@key_file, "password").to_der
end
def test_load_encrypted_private_DSA_key_should_prompt_for_password_and_return_key
- File.expects(:read).with("/key-file").returns(encrypted(dsa_key, "password"))
- Net::SSH::KeyFactory.expects(:prompt).with("Enter passphrase for /key-file:", false).returns("password")
- assert_equal dsa_key.to_der, Net::SSH::KeyFactory.load_private_key("/key-file").to_der
+ File.expects(:read).with(@key_file).returns(encrypted(dsa_key, "password"))
+ Net::SSH::KeyFactory.expects(:prompt).with("Enter passphrase for #{@key_file}:", false).returns("password")
+ assert_equal dsa_key.to_der, Net::SSH::KeyFactory.load_private_key(@key_file).to_der
end
def test_load_encrypted_private_DSA_key_with_password_should_not_prompt_and_return_key
- File.expects(:read).with("/key-file").returns(encrypted(dsa_key, "password"))
- assert_equal dsa_key.to_der, Net::SSH::KeyFactory.load_private_key("/key-file", "password").to_der
+ File.expects(:read).with(@key_file).returns(encrypted(dsa_key, "password"))
+ assert_equal dsa_key.to_der, Net::SSH::KeyFactory.load_private_key(@key_file, "password").to_der
end
def test_load_encrypted_private_key_should_give_three_tries_for_the_password_and_then_raise_exception
- File.expects(:read).with("/key-file").returns(encrypted(rsa_key, "password"))
- Net::SSH::KeyFactory.expects(:prompt).times(3).with("Enter passphrase for /key-file:", false).returns("passwod","passphrase","passwd")
- assert_raises(OpenSSL::PKey::RSAError) { Net::SSH::KeyFactory.load_private_key("/key-file") }
+ File.expects(:read).with(@key_file).returns(encrypted(rsa_key, "password"))
+ Net::SSH::KeyFactory.expects(:prompt).times(3).with("Enter passphrase for #{@key_file}:", false).returns("passwod","passphrase","passwd")
+ if OpenSSL::PKey.respond_to?(:read)
+ error_class = ArgumentError
+ else
+ error_class = OpenSSL::PKey::RSAError
+ end
+ assert_raises(error_class) { Net::SSH::KeyFactory.load_private_key(@key_file) }
end
def test_load_encrypted_private_key_should_raise_exception_without_asking_passphrase
- File.expects(:read).with("/key-file").returns(encrypted(rsa_key, "password"))
+ File.expects(:read).with(@key_file).returns(encrypted(rsa_key, "password"))
Net::SSH::KeyFactory.expects(:prompt).never
- assert_raises(OpenSSL::PKey::RSAError) { Net::SSH::KeyFactory.load_private_key("/key-file", nil, false) }
+ if OpenSSL::PKey.respond_to?(:read)
+ error_class = ArgumentError
+ else
+ error_class = OpenSSL::PKey::RSAError
+ end
+ assert_raises(error_class) { Net::SSH::KeyFactory.load_private_key(@key_file, nil, false) }
end
def test_load_public_rsa_key_should_return_key
- File.expects(:read).with("/key-file").returns(public(rsa_key))
- assert_equal rsa_key.to_blob, Net::SSH::KeyFactory.load_public_key("/key-file").to_blob
+ File.expects(:read).with(@key_file).returns(public(rsa_key))
+ assert_equal rsa_key.to_blob, Net::SSH::KeyFactory.load_public_key(@key_file).to_blob
+ end
+
+ if defined?(OpenSSL::PKey::EC)
+ def test_load_unencrypted_private_ecdsa_sha2_nistp256_key_should_return_key
+ File.expects(:read).with("/key-file").returns(ecdsa_sha2_nistp256_key.to_pem)
+ assert_equal ecdsa_sha2_nistp256_key.to_der, Net::SSH::KeyFactory.load_private_key("/key-file").to_der
+ end
+ def test_load_unencrypted_private_ecdsa_sha2_nistp384_key_should_return_key
+ File.expects(:read).with("/key-file").returns(ecdsa_sha2_nistp384_key.to_pem)
+ assert_equal ecdsa_sha2_nistp384_key.to_der, Net::SSH::KeyFactory.load_private_key("/key-file").to_der
+ end
+ def test_load_unencrypted_private_ecdsa_sha2_nistp521_key_should_return_key
+ File.expects(:read).with("/key-file").returns(ecdsa_sha2_nistp521_key.to_pem)
+ assert_equal ecdsa_sha2_nistp521_key.to_der, Net::SSH::KeyFactory.load_private_key("/key-file").to_der
+ end
+
+ def test_load_public_ecdsa_sha2_nistp256_key_should_return_key
+ File.expects(:read).with("/key-file").returns(public(ecdsa_sha2_nistp256_key))
+ assert_equal ecdsa_sha2_nistp256_key.to_blob, Net::SSH::KeyFactory.load_public_key("/key-file").to_blob
+ end
+ def test_load_public_ecdsa_sha2_nistp384_key_should_return_key
+ File.expects(:read).with("/key-file").returns(public(ecdsa_sha2_nistp384_key))
+ assert_equal ecdsa_sha2_nistp384_key.to_blob, Net::SSH::KeyFactory.load_public_key("/key-file").to_blob
+ end
+ def test_load_public_ecdsa_sha2_nistp521_key_should_return_key
+ File.expects(:read).with("/key-file").returns(public(ecdsa_sha2_nistp521_key))
+ assert_equal ecdsa_sha2_nistp521_key.to_blob, Net::SSH::KeyFactory.load_public_key("/key-file").to_blob
+ end
+ end
+
+ def test_load_anonymous_private_key_should_return_key_or_raise_exception
+ File.expects(:read).with(@key_file).returns(anonymous_private_key)
+ if OpenSSL::PKey.respond_to?(:read)
+ assert_equal OpenSSL::PKey::RSA.new(anonymous_private_key).to_der, Net::SSH::KeyFactory.load_private_key(@key_file).to_der
+ else
+ assert_raises(OpenSSL::PKey::PKeyError) { Net::SSH::KeyFactory.load_private_key(@key_file) }
+ end
end
private
@@ -63,6 +114,53 @@
@dsa_key ||= OpenSSL::PKey::DSA.new("0\201\367\002\001\000\002A\000\203\316/\037u\272&J\265\003l3\315d\324h\372{\t8\252#\331_\026\006\035\270\266\255\343\353Z\302\276\335\336\306\220\375\202L\244\244J\206>\346\b\315\211\302L\246x\247u\a\376\366\345\302\016#\002\025\000\244\274\302\221Og\275/\302+\356\346\360\024\373wI\2573\361\002@\027\215\270r*\f\213\350C\245\021:\350 \006\\\376\345\022`\210b\262\3643\023XLKS\320\370\002\276\347A\nU\204\276\324\256`=\026\240\330\306J\316V\213\024\e\030\215\355\006\037q\337\356ln\002@\017\257\034\f\260\333'S\271#\237\230E\321\312\027\021\226\331\251Vj\220\305\316\036\v\266+\000\230\270\177B\003?t\a\305]e\344\261\334\023\253\323\251\223M\2175)a(\004\"lI8\312\303\307\a\002\024_\aznW\345\343\203V\326\246ua\203\376\201o\350\302\002")
end
+ if defined?(OpenSSL::PKey::EC)
+ def ecdsa_sha2_nistp256_key
+ @ecdsa_sha2_nistp256_key ||= OpenSSL::PKey::EC.new("-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINv6pPVLlkqvT1v5MJlWgaSWGwqupISG4U79bUXQDNCaoAoGCCqGSM49\nAwEHoUQDQgAElqubvi/GkSme+bwtncU1NiE0dWQ0EO07VufUQg8lUJ5+Fi6f96qa\n95T1zwOMQhY1h8PP9rQIZr4S48vN/ZnQLw==\n-----END EC PRIVATE KEY-----\n")
+ end
+
+ def ecdsa_sha2_nistp384_key
+ @ecdsa_sha2_nistp384_key ||= OpenSSL::PKey::EC.new("-----BEGIN EC PRIVATE KEY-----\nMIGkAgEBBDBxwkmydCn4mP4KMhlMpeBvIroQolWKVNoRPXpG7brFgK+Yiikqw8wd\nIZW5OlL4y3mgBwYFK4EEACKhZANiAARkoIR1oABi+aQJbKcmvzeYSKURQOyXM0HU\nR4T68v4hd/lJE4fFQRczj3wAaECe9u3CWI/oDlow4Vr0vab82ZGjIoblxblKQWYl\nyzENgzl226waGg1bLBo8Auilyf1B5yI=\n-----END EC PRIVATE KEY-----\n")
+ end
+
+ def ecdsa_sha2_nistp521_key
+ @ecdsa_sha2_nistp521_key ||= OpenSSL::PKey::EC.new("-----BEGIN EC PRIVATE KEY-----\nMIHbAgEBBEHQ2i7kjEGQHQB4pUQW9a2eCLWR2S5Go8U3CDyfbRCrYEp/pTSgI8uu\nMXyR3bf3SjqFQgZ6MZk5lkyrissJuwmvZKAHBgUrgQQAI6GBiQOBhgAEAN14FACK\nbs/KTqw4rxijeozGTVJTh1hNzBl2XaIhM4Fv8o3fE/pvogymyFu53GCng6gC4dmx\n/hycF41iIM29xVKPAeBnRNl6MdFBjuthOmE8eCRezgk1Bak8aBDUrzNT8OQssscw\npvQK4nc6ga/wTDaQGy5kV8tCOHNs2wKH+p2LpWTJ\n-----END EC PRIVATE KEY-----\n")
+ end
+ end
+
+ def anonymous_private_key
+ @anonymous_key = <<-EOF
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC3id5gZ6bglJth
+yli8JNaRxhsqKwwPlReEI/mplzz5IP6gWQ92LogXbdBXtHf9ZpA53BeLmtcNBEY0
+Ygd7sPBhlHABS5D5///zltSSX2+L5GCEiC6dpfGsySjqymWF+SZ2PaqfZbkWLmCD
+9u4ysueaHf7xbF6txGprNp69efttWxdy+vU5tno7HVxemMZQUalpShFrdAYKKXEo
+cV7MtbkQjzubS14gaWGpWCXIl9uNKQeHpLKtre1Qn5Ft/zVpCHmhLQcYDuB1LAj9
+7eoev4rIiOE2sfdkvKDlmFxvzq3myYH4o27WwAg9OZ5SBusn2zesKkRCBBEZ55rl
+uVknOGHXAgMBAAECggEAZE0U2OxsNxkfXS6+lXswQ5PW7pF90towcsdSPgrniGIu
+pKRnHbfKKbuaewOl+zZcpTIRL/rbgUKPtzrHSiJlC36aQyrvvJ/ZWV5ZJvC+vd19
+nY/qob65NyrrkHwxRSjmiwGiR9/IaUXI+vUsMUqx5Ph1hawqhZ3sZlEAKR4LeDO8
+M+OguG77jLaqj5/SNfi+GwyUDe85de4VfEG4S9HrMQk2Cp66rx0BqDnCLacyFQaI
+R0VczMXTU52q0uETmgUr8G9A1SaRc5ZWKAfZwxJTvqdIImWC9E+CY7wm+mZD4FE6
+iVzVC0ngcdEd596kTDdU2BPVMluWzLkfqIrTt/5CeQKBgQDzgRzCPNxFtai6RAIi
+ekBSHqrDnrbeTaw32GVq5ACk1Zfk2I0svctz1iQ9qJ2SRINpygQhcyJKQ4r/LXi1
+7Av9H/d6QV4T2AZzS4WcqBkxxRXFUfARtnKChzuCzNt9tNz4EZiv75RyQmztGZjV
+i94+ZvCyqup5be4Svf4MBxin9QKBgQDA9P4nHzFWZakTMei78LGb/4Auc+r0rZp7
+8xg8Z92tvrDeJjMdesdhiFrPP1qiSYHnQ81MSWpn6BycBsHZqitejQmYnYput/s4
+qG+m7SrkN8WL6rijYsbB+U14VDjMlBlOgcEgjlSNU2oeS+68u+uVI/fgyXcXn4Jq
+33TSWSgfGwKBgA2tRdE/G9wqfOShZ0FKfoxePpcoNfs8f5zPYbrkPYkEmjh3VU6b
+Bm9mKrjv3JHXmU3608qRLe7f5lG42xvUu0OnZP4P59nTe2FEb6fB5VBfUn63wHUu
+OzZLpDMPkJB59SNV0a6oFT1pr7aNhoEQDxaQL5rJcMwLOaEB3OAOEft1AoGASz7+
+4Zi7b7rDPVYIMUpCqNfxT6wqovIUPWPmPqAuhXPIm0kAQ+2+VN2MtCc7m+/Ydawu
+IiK7GPweNAY6kDxZH00WweolstmSYVzl9Y2lXUwWgGKvUB/T7I7g1Bzb7YOPftsA
+ykZW2Kn/xwLLfdQ2oXleT82g4Jh2jmDHuMPF7qMCgYEA6QF45PvOgnrJessgmwO/
+dEmkLl07PQYJPGZLaZteuWrvfMrn+AiW5aAdHzhzNaOtNy5B3T7zGUHtgxXegqgd
+/QdCVCJgnZUO/zdAxkr22dDn+WEXkL4wgBVStQvvnQp9C2NJcoOExvex5PLzKWQg
+WEKt5v3QsUEgVrzkM4K9UbI=
+-----END PRIVATE KEY-----
+ EOF
+ end
+
def encrypted(key, password)
key.export(OpenSSL::Cipher::Cipher.new("des-ede3-cbc"), password)
end
diff -Nru ruby-net-ssh-2.2.1/test/test_known_hosts.rb ruby-net-ssh-2.6.7/test/test_known_hosts.rb
--- ruby-net-ssh-2.2.1/test/test_known_hosts.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/test_known_hosts.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,13 @@
+require 'common'
+
+class TestKnownHosts < Test::Unit::TestCase
+
+ def test_key_for_when_all_hosts_are_recognized
+ source = File.join(File.dirname(__FILE__),"known_hosts/github")
+ kh = Net::SSH::KnownHosts.new(source)
+ keys = kh.keys_for("github.com")
+ assert_equal(1, keys.count)
+ assert_equal("ssh-rsa", keys[0].ssh_type)
+ end
+
+end
\ No newline at end of file
diff -Nru ruby-net-ssh-2.2.1/test/transport/hmac/test_ripemd160.rb ruby-net-ssh-2.6.7/test/transport/hmac/test_ripemd160.rb
--- ruby-net-ssh-2.2.1/test/transport/hmac/test_ripemd160.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/hmac/test_ripemd160.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,34 @@
+require 'common'
+require 'net/ssh/transport/hmac/ripemd160'
+
+module Transport; module HMAC
+
+ class TestRipemd160 < Test::Unit::TestCase
+ def test_expected_digest_class
+ assert_equal OpenSSL::Digest::RIPEMD160, subject.digest_class
+ assert_equal OpenSSL::Digest::RIPEMD160, subject.new.digest_class
+ end
+
+ def test_expected_key_length
+ assert_equal 20, subject.key_length
+ assert_equal 20, subject.new.key_length
+ end
+
+ def test_expected_mac_length
+ assert_equal 20, subject.mac_length
+ assert_equal 20, subject.new.mac_length
+ end
+
+ def test_expected_digest
+ hmac = subject.new("1234567890123456")
+ assert_equal "\xE4\x10\t\xB3\xD8,\x14\xA0k\x10\xB5\x0F?\x0E\x96q\x02\x16;E", hmac.digest("hello world")
+ end
+
+ private
+
+ def subject
+ Net::SSH::Transport::HMAC::RIPEMD160
+ end
+ end
+
+end; end
diff -Nru ruby-net-ssh-2.2.1/test/transport/hmac/test_sha2_256.rb ruby-net-ssh-2.6.7/test/transport/hmac/test_sha2_256.rb
--- ruby-net-ssh-2.2.1/test/transport/hmac/test_sha2_256.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/hmac/test_sha2_256.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,35 @@
+require 'common'
+require 'net/ssh/transport/hmac/sha2_256'
+
+module Transport; module HMAC
+
+ class TestSHA2_256 < Test::Unit::TestCase
+ def test_expected_digest_class
+ assert_equal OpenSSL::Digest::SHA256, subject.digest_class
+ assert_equal OpenSSL::Digest::SHA256, subject.new.digest_class
+ end
+
+ def test_expected_key_length
+ assert_equal 32, subject.key_length
+ assert_equal 32, subject.new.key_length
+ end
+
+ def test_expected_mac_length
+ assert_equal 32, subject.mac_length
+ assert_equal 32, subject.new.mac_length
+ end
+
+ def test_expected_digest
+ hmac = subject.new("1234567890123456")
+ assert_equal "\x16^>\x9FhO}\xB1>(\xBAF\xFBW\xB8\xF2\xFA\x824+\xC0\x94\x95\xC2\r\xE6\x88/\xEF\t\xF5%", hmac.digest("hello world")
+
+ end
+
+ private
+
+ def subject
+ Net::SSH::Transport::HMAC::SHA2_256
+ end
+ end
+
+end; end
diff -Nru ruby-net-ssh-2.2.1/test/transport/hmac/test_sha2_256_96.rb ruby-net-ssh-2.6.7/test/transport/hmac/test_sha2_256_96.rb
--- ruby-net-ssh-2.2.1/test/transport/hmac/test_sha2_256_96.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/hmac/test_sha2_256_96.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,25 @@
+require 'common'
+require 'transport/hmac/test_sha2_256'
+require 'net/ssh/transport/hmac/sha2_256_96'
+
+module Transport; module HMAC
+
+ class TestSHA2_256_96 < TestSHA2_256
+ def test_expected_mac_length
+ assert_equal 12, subject.mac_length
+ assert_equal 12, subject.new.mac_length
+ end
+
+ def test_expected_digest
+ hmac = subject.new("1234567890123456")
+ assert_equal "\x16^>\x9FhO}\xB1>(\xBAF", hmac.digest("hello world")
+ end
+
+ private
+
+ def subject
+ Net::SSH::Transport::HMAC::SHA2_256_96
+ end
+ end
+
+end; end
diff -Nru ruby-net-ssh-2.2.1/test/transport/hmac/test_sha2_512.rb ruby-net-ssh-2.6.7/test/transport/hmac/test_sha2_512.rb
--- ruby-net-ssh-2.2.1/test/transport/hmac/test_sha2_512.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/hmac/test_sha2_512.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,35 @@
+require 'common'
+require 'net/ssh/transport/hmac/sha2_512'
+
+module Transport; module HMAC
+
+ class TestSHA2_512 < Test::Unit::TestCase
+ def test_expected_digest_class
+ assert_equal OpenSSL::Digest::SHA512, subject.digest_class
+ assert_equal OpenSSL::Digest::SHA512, subject.new.digest_class
+ end
+
+ def test_expected_key_length
+ assert_equal 64, subject.key_length
+ assert_equal 64, subject.new.key_length
+ end
+
+ def test_expected_mac_length
+ assert_equal 64, subject.mac_length
+ assert_equal 64, subject.new.mac_length
+ end
+
+ def test_expected_digest
+ hmac = subject.new("1234567890123456")
+ assert_equal "^\xB6\"\xED\x8B\xC4\xDE\xD4\xCF\xD0\r\x18\xA0<\xF4\xB5\x01Efz\xA80i\xFC\x18\xC1\x9A+\xDD\xFE<\xA2\xFDE1Ac\xF4\xADU\r\xFB^0\x90= \x837z\xCC\xD5p4a4\x83\xC6\x04m\xAA\xC1\xC0m", hmac.digest("hello world")
+
+ end
+
+ private
+
+ def subject
+ Net::SSH::Transport::HMAC::SHA2_512
+ end
+ end
+
+end; end
diff -Nru ruby-net-ssh-2.2.1/test/transport/hmac/test_sha2_512_96.rb ruby-net-ssh-2.6.7/test/transport/hmac/test_sha2_512_96.rb
--- ruby-net-ssh-2.2.1/test/transport/hmac/test_sha2_512_96.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/hmac/test_sha2_512_96.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,25 @@
+require 'common'
+require 'transport/hmac/test_sha2_512'
+require 'net/ssh/transport/hmac/sha2_512_96'
+
+module Transport; module HMAC
+
+ class TestSHA2_512_96 < TestSHA2_512
+ def test_expected_mac_length
+ assert_equal 12, subject.mac_length
+ assert_equal 12, subject.new.mac_length
+ end
+
+ def test_expected_digest
+ hmac = subject.new("1234567890123456")
+ assert_equal "^\xB6\"\xED\x8B\xC4\xDE\xD4\xCF\xD0\r\x18", hmac.digest("hello world")
+ end
+
+ private
+
+ def subject
+ Net::SSH::Transport::HMAC::SHA2_512_96
+ end
+ end
+
+end; end
diff -Nru ruby-net-ssh-2.2.1/test/transport/kex/test_diffie_hellman_group14_sha1.rb ruby-net-ssh-2.6.7/test/transport/kex/test_diffie_hellman_group14_sha1.rb
--- ruby-net-ssh-2.2.1/test/transport/kex/test_diffie_hellman_group14_sha1.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/kex/test_diffie_hellman_group14_sha1.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,13 @@
+require 'common'
+require 'net/ssh/transport/kex/diffie_hellman_group14_sha1'
+require 'transport/kex/test_diffie_hellman_group1_sha1'
+require 'ostruct'
+
+module Transport; module Kex
+
+ class TestDiffieHellmanGroup14SHA1 < TestDiffieHellmanGroup1SHA1
+ def subject
+ Net::SSH::Transport::Kex::DiffieHellmanGroup14SHA1
+ end
+ end
+end; end
diff -Nru ruby-net-ssh-2.2.1/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb ruby-net-ssh-2.6.7/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb
--- ruby-net-ssh-2.2.1/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb 2013-06-16 17:57:19.000000000 +0000
@@ -18,7 +18,7 @@
def test_exchange_with_fewer_than_maximum_bits_uses_need_bits
dh_options :need_bytes => 500
- need_bits(4000)
+ need_bits(8001)
assert_nothing_raised { exchange! }
end
@@ -89,4 +89,4 @@
end
end
-end; end
\ No newline at end of file
+end; end
diff -Nru ruby-net-ssh-2.2.1/test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb ruby-net-ssh-2.6.7/test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb
--- ruby-net-ssh-2.2.1/test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,33 @@
+require 'common'
+require 'net/ssh/transport/kex/diffie_hellman_group_exchange_sha1'
+
+module Transport; module Kex
+
+ class TestDiffieHellmanGroupExchangeSHA256 < TestDiffieHellmanGroupExchangeSHA1
+ private
+
+ def subject
+ Net::SSH::Transport::Kex::DiffieHellmanGroupExchangeSHA256
+ end
+
+ def session_id
+ @session_id ||= begin
+ buffer = Net::SSH::Buffer.from(:string, packet_data[:client_version_string],
+ :string, packet_data[:server_version_string],
+ :string, packet_data[:client_algorithm_packet],
+ :string, packet_data[:server_algorithm_packet],
+ :string, Net::SSH::Buffer.from(:key, server_key),
+ :long, 1024,
+ :long, 1024,
+ :long, 8192,
+ :bignum, dh.dh.p,
+ :bignum, dh.dh.g,
+ :bignum, dh.dh.pub_key,
+ :bignum, server_dh_pubkey,
+ :bignum, shared_secret)
+ OpenSSL::Digest::SHA256.digest(buffer.to_s)
+ end
+ end
+ end
+
+end; end
diff -Nru ruby-net-ssh-2.2.1/test/transport/kex/test_ecdh_sha2_nistp256.rb ruby-net-ssh-2.6.7/test/transport/kex/test_ecdh_sha2_nistp256.rb
--- ruby-net-ssh-2.2.1/test/transport/kex/test_ecdh_sha2_nistp256.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/kex/test_ecdh_sha2_nistp256.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,161 @@
+require 'openssl'
+
+unless defined?(OpenSSL::PKey::EC)
+ puts "Skipping tests for ecdh-sha2-nistp256 key exchange"
+else
+ require 'common'
+ require 'transport/kex/test_diffie_hellman_group1_sha1'
+ require 'net/ssh/transport/kex/ecdh_sha2_nistp256'
+ require 'ostruct'
+
+ module Transport; module Kex
+
+ class TestEcdhSHA2NistP256 < Test::Unit::TestCase
+ include Net::SSH::Transport::Constants
+
+ def setup
+ @ecdh = @algorithms = @connection = @server_key =
+ @packet_data = @shared_secret = nil
+ end
+
+ def test_exchange_keys_should_return_expected_results_when_successful
+ result = exchange!
+ assert_equal session_id, result[:session_id]
+ assert_equal server_host_key.to_blob, result[:server_key].to_blob
+ assert_equal shared_secret, result[:shared_secret]
+ assert_equal digester, result[:hashing_algorithm]
+ end
+
+ def test_exchange_keys_with_unverifiable_host_should_raise_exception
+ connection.verifier { false }
+ assert_raises(Net::SSH::Exception) { exchange! }
+ end
+
+ def test_exchange_keys_with_signature_key_type_mismatch_should_raise_exception
+ assert_raises(Net::SSH::Exception) { exchange! :key_type => "ssh-dss" }
+ end
+
+ def test_exchange_keys_with_host_key_type_mismatch_should_raise_exception
+ algorithms :host_key => "ssh-dss"
+ assert_raises(Net::SSH::Exception) { exchange! :key_type => "ssh-dss" }
+ end
+
+ def test_exchange_keys_when_server_signature_could_not_be_verified_should_raise_exception
+ @signature = "1234567890"
+ assert_raises(Net::SSH::Exception) { exchange! }
+ end
+
+ def test_exchange_keys_should_pass_expected_parameters_to_host_key_verifier
+ verified = false
+ connection.verifier do |data|
+ verified = true
+ assert_equal server_host_key.to_blob, data[:key].to_blob
+
+ blob = b(:key, data[:key]).to_s
+ fingerprint = OpenSSL::Digest::MD5.hexdigest(blob).scan(/../).join(":")
+
+ assert_equal blob, data[:key_blob]
+ assert_equal fingerprint, data[:fingerprint]
+ assert_equal connection, data[:session]
+
+ true
+ end
+
+ assert_nothing_raised { exchange! }
+ assert verified
+ end
+
+ private
+
+ def digester
+ OpenSSL::Digest::SHA256
+ end
+
+ def subject
+ Net::SSH::Transport::Kex::EcdhSHA2NistP256
+ end
+
+ def ecparam
+ "prime256v1"
+ end
+
+ def key_type
+ "ecdsa-sha2-nistp256"
+ end
+
+ def exchange!(options={})
+ connection.expect do |t, buffer|
+ assert_equal KEXECDH_INIT, buffer.type
+ assert_equal ecdh.ecdh.public_key.to_bn.to_s(2), buffer.read_string
+ t.return(KEXECDH_REPLY,
+ :string, b(:key, server_host_key),
+ :string, server_ecdh_pubkey.to_bn.to_s(2),
+ :string, b(:string, options[:key_type] || key_type,
+ :string, signature))
+ connection.expect do |t2, buffer2|
+ assert_equal NEWKEYS, buffer2.type
+ t2.return(NEWKEYS)
+ end
+ end
+ ecdh.exchange_keys
+ end
+
+ def ecdh
+ @ecdh ||= subject.new(algorithms, connection, packet_data)
+ end
+
+ def algorithms(options={})
+ @algorithms ||= OpenStruct.new(:host_key => options[:server_host_key] || "ecdsa-sha2-nistp256")
+ end
+
+ def connection
+ @connection ||= MockTransport.new
+ end
+
+ def server_key
+ @server_key ||= OpenSSL::PKey::EC.new(ecparam).generate_key
+ end
+
+ def server_host_key
+ @server_host_key ||= OpenSSL::PKey::EC.new("prime256v1").generate_key
+ end
+
+ def packet_data
+ @packet_data ||= { :client_version_string => "client version string",
+ :server_version_string => "server version string",
+ :server_algorithm_packet => "server algorithm packet",
+ :client_algorithm_packet => "client algorithm packet" }
+ end
+
+ def server_ecdh_pubkey
+ @server_ecdh_pubkey ||= server_key.public_key
+ end
+
+ def shared_secret
+ @shared_secret ||= OpenSSL::BN.new(ecdh.ecdh.dh_compute_key(server_ecdh_pubkey), 2)
+ end
+
+ def session_id
+ @session_id ||= begin
+ buffer = Net::SSH::Buffer.from(:string, packet_data[:client_version_string],
+ :string, packet_data[:server_version_string],
+ :string, packet_data[:client_algorithm_packet],
+ :string, packet_data[:server_algorithm_packet],
+ :string, Net::SSH::Buffer.from(:key, server_host_key),
+ :string, ecdh.ecdh.public_key.to_bn.to_s(2),
+ :string, server_ecdh_pubkey.to_bn.to_s(2),
+ :bignum, shared_secret)
+ digester.digest(buffer.to_s)
+ end
+ end
+
+ def signature
+ @signature ||= server_host_key.ssh_do_sign(session_id)
+ end
+
+ def b(*args)
+ Net::SSH::Buffer.from(*args)
+ end
+ end
+ end; end;
+end
diff -Nru ruby-net-ssh-2.2.1/test/transport/kex/test_ecdh_sha2_nistp384.rb ruby-net-ssh-2.6.7/test/transport/kex/test_ecdh_sha2_nistp384.rb
--- ruby-net-ssh-2.2.1/test/transport/kex/test_ecdh_sha2_nistp384.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/kex/test_ecdh_sha2_nistp384.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,37 @@
+require 'openssl'
+
+unless defined?(OpenSSL::PKey::EC)
+ puts "Skipping tests for ecdh-sha2-nistp384 key exchange"
+else
+ module Transport; module Kex
+ class TestEcdhSHA2NistP384 < TestEcdhSHA2NistP256
+
+ def setup
+ @ecdh = @algorithms = @connection = @server_key =
+ @packet_data = @shared_secret = nil
+ end
+
+ def test_exchange_keys_should_return_expected_results_when_successful
+ result = exchange!
+ assert_equal session_id, result[:session_id]
+ assert_equal server_host_key.to_blob, result[:server_key].to_blob
+ assert_equal shared_secret, result[:shared_secret]
+ assert_equal digester, result[:hashing_algorithm]
+ end
+
+ private
+
+ def digester
+ OpenSSL::Digest::SHA384
+ end
+
+ def subject
+ Net::SSH::Transport::Kex::EcdhSHA2NistP384
+ end
+
+ def ecparam
+ "secp384r1"
+ end
+ end
+ end; end
+ end
diff -Nru ruby-net-ssh-2.2.1/test/transport/kex/test_ecdh_sha2_nistp521.rb ruby-net-ssh-2.6.7/test/transport/kex/test_ecdh_sha2_nistp521.rb
--- ruby-net-ssh-2.2.1/test/transport/kex/test_ecdh_sha2_nistp521.rb 1970-01-01 00:00:00.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/kex/test_ecdh_sha2_nistp521.rb 2013-06-16 17:57:19.000000000 +0000
@@ -0,0 +1,37 @@
+require 'openssl'
+
+unless defined?(OpenSSL::PKey::EC)
+ puts "Skipping tests for ecdh-sha2-nistp521 key exchange"
+else
+ module Transport; module Kex
+ class TestEcdhSHA2NistP521 < TestEcdhSHA2NistP256
+
+ def setup
+ @ecdh = @algorithms = @connection = @server_key =
+ @packet_data = @shared_secret = nil
+ end
+
+ def test_exchange_keys_should_return_expected_results_when_successful
+ result = exchange!
+ assert_equal session_id, result[:session_id]
+ assert_equal server_host_key.to_blob, result[:server_key].to_blob
+ assert_equal shared_secret, result[:shared_secret]
+ assert_equal digester, result[:hashing_algorithm]
+ end
+
+ private
+
+ def digester
+ OpenSSL::Digest::SHA512
+ end
+
+ def subject
+ Net::SSH::Transport::Kex::EcdhSHA2NistP521
+ end
+
+ def ecparam
+ "secp521r1"
+ end
+ end
+ end; end
+end
diff -Nru ruby-net-ssh-2.2.1/test/transport/test_algorithms.rb ruby-net-ssh-2.6.7/test/transport/test_algorithms.rb
--- ruby-net-ssh-2.2.1/test/transport/test_algorithms.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/test_algorithms.rb 2013-06-16 17:57:19.000000000 +0000
@@ -17,10 +17,19 @@
end
def test_constructor_should_build_default_list_of_preferred_algorithms
- assert_equal %w(ssh-rsa ssh-dss), algorithms[:host_key]
- assert_equal %w(diffie-hellman-group-exchange-sha1 diffie-hellman-group1-sha1), algorithms[:kex]
- assert_equal %w(aes128-cbc 3des-cbc blowfish-cbc cast128-cbc aes192-cbc aes256-cbc rijndael-cbc@lysator.liu.se idea-cbc none arcfour128 arcfour256), algorithms[:encryption]
- assert_equal %w(hmac-sha1 hmac-md5 hmac-sha1-96 hmac-md5-96 none), algorithms[:hmac]
+ if defined?(OpenSSL::PKey::EC)
+ assert_equal %w(ssh-rsa ssh-dss ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521), algorithms[:host_key]
+ assert_equal %w(diffie-hellman-group-exchange-sha1 diffie-hellman-group1-sha1 diffie-hellman-group14-sha1 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521), algorithms[:kex]
+ else
+ assert_equal %w(ssh-rsa ssh-dss), algorithms[:host_key]
+ assert_equal %w(diffie-hellman-group-exchange-sha1 diffie-hellman-group1-sha1 diffie-hellman-group14-sha1 diffie-hellman-group-exchange-sha256), algorithms[:kex]
+ end
+ assert_equal %w(aes128-cbc 3des-cbc blowfish-cbc cast128-cbc aes192-cbc aes256-cbc rijndael-cbc@lysator.liu.se idea-cbc none arcfour128 arcfour256 arcfour aes128-ctr aes192-ctr aes256-ctr camellia128-cbc camellia192-cbc camellia256-cbc camellia128-cbc@openssh.org camellia192-cbc@openssh.org camellia256-cbc@openssh.org camellia128-ctr camellia192-ctr camellia256-ctr camellia128-ctr@openssh.org camellia192-ctr@openssh.org camellia256-ctr@openssh.org cast128-ctr blowfish-ctr 3des-ctr), algorithms[:encryption]
+ if defined?(OpenSSL::Digest::SHA256)
+ assert_equal %w(hmac-sha1 hmac-md5 hmac-sha1-96 hmac-md5-96 hmac-ripemd160 hmac-ripemd160@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha2-256-96 hmac-sha2-512-96 none), algorithms[:hmac]
+ else
+ assert_equal %w(hmac-sha1 hmac-md5 hmac-sha1-96 hmac-md5-96 hmac-ripemd160 hmac-ripemd160@openssh.com none), algorithms[:hmac]
+ end
assert_equal %w(none zlib@openssh.com zlib), algorithms[:compression]
assert_equal %w(), algorithms[:language]
end
@@ -33,12 +42,20 @@
end
def test_constructor_with_preferred_host_key_type_should_put_preferred_host_key_type_first
- assert_equal %w(ssh-dss ssh-rsa), algorithms(:host_key => "ssh-dss")[:host_key]
+ if defined?(OpenSSL::PKey::EC)
+ assert_equal %w(ssh-dss ssh-rsa ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521), algorithms(:host_key => "ssh-dss")[:host_key]
+ else
+ assert_equal %w(ssh-dss ssh-rsa), algorithms(:host_key => "ssh-dss")[:host_key]
+ end
end
def test_constructor_with_known_hosts_reporting_known_host_key_should_use_that_host_key_type
Net::SSH::KnownHosts.expects(:search_for).with("net.ssh.test,127.0.0.1", {}).returns([stub("key", :ssh_type => "ssh-dss")])
- assert_equal %w(ssh-dss ssh-rsa), algorithms[:host_key]
+ if defined?(OpenSSL::PKey::EC)
+ assert_equal %w(ssh-dss ssh-rsa ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521), algorithms[:host_key]
+ else
+ assert_equal %w(ssh-dss ssh-rsa), algorithms[:host_key]
+ end
end
def test_constructor_with_unrecognized_host_key_type_should_raise_exception
@@ -46,7 +63,11 @@
end
def test_constructor_with_preferred_kex_should_put_preferred_kex_first
- assert_equal %w(diffie-hellman-group1-sha1 diffie-hellman-group-exchange-sha1), algorithms(:kex => "diffie-hellman-group1-sha1")[:kex]
+ if defined?(OpenSSL::PKey::EC)
+ assert_equal %w(diffie-hellman-group1-sha1 diffie-hellman-group-exchange-sha1 diffie-hellman-group14-sha1 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521), algorithms(:kex => "diffie-hellman-group1-sha1")[:kex]
+ else
+ assert_equal %w(diffie-hellman-group1-sha1 diffie-hellman-group-exchange-sha1 diffie-hellman-group14-sha1 diffie-hellman-group-exchange-sha256), algorithms(:kex => "diffie-hellman-group1-sha1")[:kex]
+ end
end
def test_constructor_with_unrecognized_kex_should_raise_exception
@@ -54,11 +75,11 @@
end
def test_constructor_with_preferred_encryption_should_put_preferred_encryption_first
- assert_equal %w(aes256-cbc aes128-cbc 3des-cbc blowfish-cbc cast128-cbc aes192-cbc rijndael-cbc@lysator.liu.se idea-cbc none arcfour128 arcfour256), algorithms(:encryption => "aes256-cbc")[:encryption]
+ assert_equal %w(aes256-cbc aes128-cbc 3des-cbc blowfish-cbc cast128-cbc aes192-cbc rijndael-cbc@lysator.liu.se idea-cbc none arcfour128 arcfour256 arcfour aes128-ctr aes192-ctr aes256-ctr camellia128-cbc camellia192-cbc camellia256-cbc camellia128-cbc@openssh.org camellia192-cbc@openssh.org camellia256-cbc@openssh.org camellia128-ctr camellia192-ctr camellia256-ctr camellia128-ctr@openssh.org camellia192-ctr@openssh.org camellia256-ctr@openssh.org cast128-ctr blowfish-ctr 3des-ctr), algorithms(:encryption => "aes256-cbc")[:encryption]
end
def test_constructor_with_multiple_preferred_encryption_should_put_all_preferred_encryption_first
- assert_equal %w(aes256-cbc 3des-cbc idea-cbc aes128-cbc blowfish-cbc cast128-cbc aes192-cbc rijndael-cbc@lysator.liu.se none arcfour128 arcfour256), algorithms(:encryption => %w(aes256-cbc 3des-cbc idea-cbc))[:encryption]
+ assert_equal %w(aes256-cbc 3des-cbc idea-cbc aes128-cbc blowfish-cbc cast128-cbc aes192-cbc rijndael-cbc@lysator.liu.se none arcfour128 arcfour256 arcfour aes128-ctr aes192-ctr aes256-ctr camellia128-cbc camellia192-cbc camellia256-cbc camellia128-cbc@openssh.org camellia192-cbc@openssh.org camellia256-cbc@openssh.org camellia128-ctr camellia192-ctr camellia256-ctr camellia128-ctr@openssh.org camellia192-ctr@openssh.org camellia256-ctr@openssh.org cast128-ctr blowfish-ctr 3des-ctr), algorithms(:encryption => %w(aes256-cbc 3des-cbc idea-cbc))[:encryption]
end
def test_constructor_with_unrecognized_encryption_should_raise_exception
@@ -66,11 +87,11 @@
end
def test_constructor_with_preferred_hmac_should_put_preferred_hmac_first
- assert_equal %w(hmac-md5-96 hmac-sha1 hmac-md5 hmac-sha1-96 none), algorithms(:hmac => "hmac-md5-96")[:hmac]
+ assert_equal %w(hmac-md5-96 hmac-sha1 hmac-md5 hmac-sha1-96 hmac-ripemd160 hmac-ripemd160@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha2-256-96 hmac-sha2-512-96 none), algorithms(:hmac => "hmac-md5-96")[:hmac]
end
def test_constructor_with_multiple_preferred_hmac_should_put_all_preferred_hmac_first
- assert_equal %w(hmac-md5-96 hmac-sha1-96 hmac-sha1 hmac-md5 none), algorithms(:hmac => %w(hmac-md5-96 hmac-sha1-96))[:hmac]
+ assert_equal %w(hmac-md5-96 hmac-sha1-96 hmac-sha1 hmac-md5 hmac-ripemd160 hmac-ripemd160@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha2-256-96 hmac-sha2-512-96 none), algorithms(:hmac => %w(hmac-md5-96 hmac-sha1-96))[:hmac]
end
def test_constructor_with_unrecognized_hmac_should_raise_exception
@@ -216,15 +237,17 @@
end
def install_mock_algorithm_lookups(options={})
+ params = { :shared => shared_secret.to_ssh, :hash => session_id, :digester => hashing_algorithm }
Net::SSH::Transport::CipherFactory.expects(:get).
- with(options[:client_cipher] || "aes128-cbc", :iv => key("A"), :key => key("C"), :shared => shared_secret.to_ssh, :hash => session_id, :digester => hashing_algorithm, :encrypt => true).
+ with(options[:client_cipher] || "aes128-cbc", params.merge(:iv => key("A"), :key => key("C"), :encrypt => true)).
returns(:client_cipher)
+
Net::SSH::Transport::CipherFactory.expects(:get).
- with(options[:server_cipher] || "aes128-cbc", :iv => key("B"), :key => key("D"), :shared => shared_secret.to_ssh, :hash => session_id, :digester => hashing_algorithm, :decrypt => true).
+ with(options[:server_cipher] || "aes128-cbc", params.merge(:iv => key("B"), :key => key("D"), :decrypt => true)).
returns(:server_cipher)
- Net::SSH::Transport::HMAC.expects(:get).with(options[:client_hmac] || "hmac-sha1", key("E")).returns(:client_hmac)
- Net::SSH::Transport::HMAC.expects(:get).with(options[:server_hmac] || "hmac-sha1", key("F")).returns(:server_hmac)
+ Net::SSH::Transport::HMAC.expects(:get).with(options[:client_hmac] || "hmac-sha1", key("E"), params).returns(:client_hmac)
+ Net::SSH::Transport::HMAC.expects(:get).with(options[:server_hmac] || "hmac-sha1", key("F"), params).returns(:server_hmac)
end
def shared_secret
@@ -250,7 +273,7 @@
def kexinit(options={})
@kexinit ||= P(:byte, KEXINIT,
:long, rand(0xFFFFFFFF), :long, rand(0xFFFFFFFF), :long, rand(0xFFFFFFFF), :long, rand(0xFFFFFFFF),
- :string, options[:kex] || "diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1",
+ :string, options[:kex] || "diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha256",
:string, options[:host_key] || "ssh-rsa,ssh-dss",
:string, options[:encryption_client] || "aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,idea-cbc",
:string, options[:encryption_server] || "aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,idea-cbc",
@@ -266,12 +289,17 @@
def assert_kexinit(buffer, options={})
assert_equal KEXINIT, buffer.type
assert_equal 16, buffer.read(16).length
- assert_equal options[:kex] || "diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1", buffer.read_string
- assert_equal options[:host_key] || "ssh-rsa,ssh-dss", buffer.read_string
- assert_equal options[:encryption_client] || "aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,idea-cbc,none,arcfour128,arcfour256", buffer.read_string
- assert_equal options[:encryption_server] || "aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,idea-cbc,none,arcfour128,arcfour256", buffer.read_string
- assert_equal options[:hmac_client] || "hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96,none", buffer.read_string
- assert_equal options[:hmac_server] || "hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96,none", buffer.read_string
+ if defined?(OpenSSL::PKey::EC)
+ assert_equal options[:kex] || "diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521", buffer.read_string
+ assert_equal options[:host_key] || "ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521", buffer.read_string
+ else
+ assert_equal options[:kex] || "diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256", buffer.read_string
+ assert_equal options[:host_key] || "ssh-rsa,ssh-dss", buffer.read_string
+ end
+ assert_equal options[:encryption_client] || "aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,idea-cbc,none,arcfour128,arcfour256,arcfour,aes128-ctr,aes192-ctr,aes256-ctr,camellia128-cbc,camellia192-cbc,camellia256-cbc,camellia128-cbc@openssh.org,camellia192-cbc@openssh.org,camellia256-cbc@openssh.org,camellia128-ctr,camellia192-ctr,camellia256-ctr,camellia128-ctr@openssh.org,camellia192-ctr@openssh.org,camellia256-ctr@openssh.org,cast128-ctr,blowfish-ctr,3des-ctr", buffer.read_string
+ assert_equal options[:encryption_server] || "aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,idea-cbc,none,arcfour128,arcfour256,arcfour,aes128-ctr,aes192-ctr,aes256-ctr,camellia128-cbc,camellia192-cbc,camellia256-cbc,camellia128-cbc@openssh.org,camellia192-cbc@openssh.org,camellia256-cbc@openssh.org,camellia128-ctr,camellia192-ctr,camellia256-ctr,camellia128-ctr@openssh.org,camellia192-ctr@openssh.org,camellia256-ctr@openssh.org,cast128-ctr,blowfish-ctr,3des-ctr", buffer.read_string
+ assert_equal options[:hmac_client] || "hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha2-256-96,hmac-sha2-512-96,none", buffer.read_string
+ assert_equal options[:hmac_server] || "hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha2-256-96,hmac-sha2-512-96,none", buffer.read_string
assert_equal options[:compression_client] || "none,zlib@openssh.com,zlib", buffer.read_string
assert_equal options[:compression_server] || "none,zlib@openssh.com,zlib", buffer.read_string
assert_equal options[:language_client] || "", buffer.read_string
diff -Nru ruby-net-ssh-2.2.1/test/transport/test_cipher_factory.rb ruby-net-ssh-2.6.7/test/transport/test_cipher_factory.rb
--- ruby-net-ssh-2.2.1/test/transport/test_cipher_factory.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/test_cipher_factory.rb 2013-06-16 17:57:19.000000000 +0000
@@ -35,18 +35,22 @@
assert_equal [24,8], factory.get_lengths("3des-cbc")
end
- def test_lengths_for_aes192_cbc
- assert_equal [24,16], factory.get_lengths("aes192-cbc")
- end
-
def test_lengths_for_aes128_cbc
assert_equal [16,16], factory.get_lengths("aes128-cbc")
end
+ def test_lengths_for_aes192_cbc
+ assert_equal [24,16], factory.get_lengths("aes192-cbc")
+ end
+
def test_lengths_for_aes256_cbc
assert_equal [32,16], factory.get_lengths("aes256-cbc")
end
+ def test_lengths_for_arcfour
+ assert_equal [16,8], factory.get_lengths("arcfour")
+ end
+
def test_lengths_for_arcfour128
assert_equal [16,8], factory.get_lengths("arcfour128")
end
@@ -58,26 +62,86 @@
def test_lengths_for_arcfour512
assert_equal [64,8], factory.get_lengths("arcfour512")
end
-
- BLOWFISH = "\210\021\200\315\240_\026$\352\204g\233\244\242x\332e\370\001\327\224Nv@9_\323\037\252kb\037\036\237\375]\343/y\037\237\312Q\f7]\347Y\005\275%\377\0010$G\272\250B\265Nd\375\342\372\025r6}+Y\213y\n\237\267\\\374^\346BdJ$\353\220Ik\023<\236&H\277=\225"
+
+ if_supported?("camellia128-cbc@openssh.org") do
+ def test_lengths_for_camellia128_cbc_openssh_org
+ assert_equal [16,16], factory.get_lengths("camellia128-cbc@openssh.org")
+ end
+ end
+
+ if_supported?("camellia192-cbc@openssh.org") do
+ def test_lengths_for_camellia192_cbc_openssh_org
+ assert_equal [24,16], factory.get_lengths("camellia192-cbc@openssh.org")
+ end
+ end
+
+ if_supported?("camellia256-cbc@openssh.org") do
+ def test_lengths_for_camellia256_cbc_openssh_org
+ assert_equal [32,16], factory.get_lengths("camellia256-cbc@openssh.org")
+ end
+ end
+
+ def test_lengths_for_3des_ctr
+ assert_equal [24,8], factory.get_lengths("3des-ctr")
+ end
+
+ def test_lengths_for_aes128_ctr
+ assert_equal [16,16], factory.get_lengths("aes128-ctr")
+ end
+
+ def test_lengths_for_aes192_ctr
+ assert_equal [24,16], factory.get_lengths("aes192-ctr")
+ end
+
+ def test_lengths_for_aes256_ctr
+ assert_equal [32,16], factory.get_lengths("aes256-ctr")
+ end
+
+ def test_lengths_for_blowfish_ctr
+ assert_equal [16,8], factory.get_lengths("blowfish-ctr")
+ end
+
+ def test_lengths_for_cast128_ctr
+ assert_equal [16,8], factory.get_lengths("cast128-ctr")
+ end
+
+ if_supported?("camellia128-ctr@openssh.org") do
+ def test_lengths_for_camellia128_ctr_openssh_org
+ assert_equal [16,16], factory.get_lengths("camellia128-ctr@openssh.org")
+ end
+ end
+
+ if_supported?("camellia192-ctr@openssh.org") do
+ def test_lengths_for_camellia192_ctr_openssh_org
+ assert_equal [24,16], factory.get_lengths("camellia192-ctr@openssh.org")
+ end
+ end
+
+ if_supported?("camellia256-ctr@openssh.org") do
+ def test_lengths_for_camellia256_ctr_openssh_org
+ assert_equal [32,16], factory.get_lengths("camellia256-ctr@openssh.org")
+ end
+ end
+
+ BLOWFISH_CBC = "\210\021\200\315\240_\026$\352\204g\233\244\242x\332e\370\001\327\224Nv@9_\323\037\252kb\037\036\237\375]\343/y\037\237\312Q\f7]\347Y\005\275%\377\0010$G\272\250B\265Nd\375\342\372\025r6}+Y\213y\n\237\267\\\374^\346BdJ$\353\220Ik\023<\236&H\277=\225"
def test_blowfish_cbc_for_encryption
- assert_equal BLOWFISH, encrypt("blowfish-cbc")
+ assert_equal BLOWFISH_CBC, encrypt("blowfish-cbc")
end
def test_blowfish_cbc_for_decryption
- assert_equal TEXT, decrypt("blowfish-cbc", BLOWFISH)
+ assert_equal TEXT, decrypt("blowfish-cbc", BLOWFISH_CBC)
end
if_supported?("idea-cbc") do
- IDEA = "W\234\017G\231\b\357\370H\b\256U]\343M\031k\233]~\023C\363\263\177\262-\261\341$\022\376mv\217\322\b\2763\270H\306\035\343z\313\312\3531\351\t\201\302U\022\360\300\354ul7$z\320O]\360g\024\305\005`V\005\335A\351\312\270c\320D\232\eQH1\340\265\2118\031g*\303v"
+ IDEA_CBC = "W\234\017G\231\b\357\370H\b\256U]\343M\031k\233]~\023C\363\263\177\262-\261\341$\022\376mv\217\322\b\2763\270H\306\035\343z\313\312\3531\351\t\201\302U\022\360\300\354ul7$z\320O]\360g\024\305\005`V\005\335A\351\312\270c\320D\232\eQH1\340\265\2118\031g*\303v"
def test_idea_cbc_for_encryption
- assert_equal IDEA, encrypt("idea-cbc")
+ assert_equal IDEA_CBC, encrypt("idea-cbc")
end
def test_idea_cbc_for_decryption
- assert_equal TEXT, decrypt("idea-cbc", IDEA)
+ assert_equal TEXT, decrypt("idea-cbc", IDEA_CBC)
end
end
@@ -91,54 +155,64 @@
assert_equal TEXT, decrypt("rijndael-cbc@lysator.liu.se", RIJNDAEL)
end
- CAST128 = "qW\302\331\333P\223t[9 ~(sg\322\271\227\272\022I\223\373p\255>k\326\314\260\2003\236C_W\211\227\373\205>\351\334\322\227\223\e\236\202Ii\032!P\214\035:\017\360h7D\371v\210\264\317\236a\262w1\2772\023\036\331\227\240:\f/X\351\324I\t[x\350\323E\2301\016m"
+ CAST128_CBC = "qW\302\331\333P\223t[9 ~(sg\322\271\227\272\022I\223\373p\255>k\326\314\260\2003\236C_W\211\227\373\205>\351\334\322\227\223\e\236\202Ii\032!P\214\035:\017\360h7D\371v\210\264\317\236a\262w1\2772\023\036\331\227\240:\f/X\351\324I\t[x\350\323E\2301\016m"
def test_cast128_cbc_for_encryption
- assert_equal CAST128, encrypt("cast128-cbc")
+ assert_equal CAST128_CBC, encrypt("cast128-cbc")
end
def test_cast128_cbc_for_decryption
- assert_equal TEXT, decrypt("cast128-cbc", CAST128)
+ assert_equal TEXT, decrypt("cast128-cbc", CAST128_CBC)
end
- TRIPLE_DES = "\322\252\216D\303Q\375gg\367A{\177\313\3436\272\353%\223K?\257\206|\r&\353/%\340\336 \203E8rY\206\234\004\274\267\031\233T/{\"\227/B!i?[qGaw\306T\206\223\213n \212\032\244%]@\355\250\334\312\265E\251\017\361\270\357\230\274KP&^\031r+r%\370"
+ TRIPLE_DES_CBC = "\322\252\216D\303Q\375gg\367A{\177\313\3436\272\353%\223K?\257\206|\r&\353/%\340\336 \203E8rY\206\234\004\274\267\031\233T/{\"\227/B!i?[qGaw\306T\206\223\213n \212\032\244%]@\355\250\334\312\265E\251\017\361\270\357\230\274KP&^\031r+r%\370"
def test_3des_cbc_for_encryption
- assert_equal TRIPLE_DES, encrypt("3des-cbc")
+ assert_equal TRIPLE_DES_CBC, encrypt("3des-cbc")
end
def test_3des_cbc_for_decryption
- assert_equal TEXT, decrypt("3des-cbc", TRIPLE_DES)
+ assert_equal TEXT, decrypt("3des-cbc", TRIPLE_DES_CBC)
end
- AES128 = "k\026\350B\366-k\224\313\3277}B\035\004\200\035\r\233\024$\205\261\231Q\2214r\245\250\360\315\237\266hg\262C&+\321\346Pf\267v\376I\215P\327\345-\232&HK\375\326_\030<\a\276\212\303g\342C\242O\233\260\006\001a&V\345`\\T\e\236.\207\223l\233ri^\v\252\363\245"
+ AES128_CBC = "k\026\350B\366-k\224\313\3277}B\035\004\200\035\r\233\024$\205\261\231Q\2214r\245\250\360\315\237\266hg\262C&+\321\346Pf\267v\376I\215P\327\345-\232&HK\375\326_\030<\a\276\212\303g\342C\242O\233\260\006\001a&V\345`\\T\e\236.\207\223l\233ri^\v\252\363\245"
def test_aes128_cbc_for_encryption
- assert_equal AES128, encrypt("aes128-cbc")
+ assert_equal AES128_CBC, encrypt("aes128-cbc")
end
def test_aes128_cbc_for_decryption
- assert_equal TEXT, decrypt("aes128-cbc", AES128)
+ assert_equal TEXT, decrypt("aes128-cbc", AES128_CBC)
end
- AES192 = "\256\017)x\270\213\336\303L\003f\235'jQ\3231k9\225\267\242\364C4\370\224\201\302~\217I\202\374\2167='\272\037\225\223\177Y\r\212\376(\275\n\3553\377\177\252C\254\236\016MA\274Z@H\331<\rL\317\205\323[\305X8\376\237=\374\352bH9\244\0231\353\204\352p\226\326~J\242"
+ AES192_CBC = "\256\017)x\270\213\336\303L\003f\235'jQ\3231k9\225\267\242\364C4\370\224\201\302~\217I\202\374\2167='\272\037\225\223\177Y\r\212\376(\275\n\3553\377\177\252C\254\236\016MA\274Z@H\331<\rL\317\205\323[\305X8\376\237=\374\352bH9\244\0231\353\204\352p\226\326~J\242"
def test_aes192_cbc_for_encryption
- assert_equal AES192, encrypt("aes192-cbc")
+ assert_equal AES192_CBC, encrypt("aes192-cbc")
end
def test_aes192_cbc_for_decryption
- assert_equal TEXT, decrypt("aes192-cbc", AES192)
+ assert_equal TEXT, decrypt("aes192-cbc", AES192_CBC)
end
- AES256 = "$\253\271\255\005Z\354\336&\312\324\221\233\307Mj\315\360\310Fk\241EfN\037\231\213\361{'\310\204\347I\343\271\005\240`\325;\034\346uM>#\241\231C`\374\261\vo\226;Z\302:\b\250\366T\330\\#V\330\340\226\363\374!\bm\266\232\207!\232\347\340\t\307\370\356z\236\343=v\210\206y"
+ AES256_CBC = "$\253\271\255\005Z\354\336&\312\324\221\233\307Mj\315\360\310Fk\241EfN\037\231\213\361{'\310\204\347I\343\271\005\240`\325;\034\346uM>#\241\231C`\374\261\vo\226;Z\302:\b\250\366T\330\\#V\330\340\226\363\374!\bm\266\232\207!\232\347\340\t\307\370\356z\236\343=v\210\206y"
def test_aes256_cbc_for_encryption
- assert_equal AES256, encrypt("aes256-cbc")
+ assert_equal AES256_CBC, encrypt("aes256-cbc")
end
def test_aes256_cbc_for_decryption
- assert_equal TEXT, decrypt("aes256-cbc", AES256)
+ assert_equal TEXT, decrypt("aes256-cbc", AES256_CBC)
+ end
+
+ ARCFOUR = "\xC1.\x1AdH\xD0+%\xF1CrG\x1C\xCC\xF6\xACho\xB0\x95\\\xBC\x02P\xF9\xAF\n\xBB<\x13\xF3\xCF\xEB\n\b(iO\xFB'\t^?\xA6\xE5a\xE2\x17\f\x97\xCAs\x9E\xFC\xF2\x88\xC93\v\x84\xCA\x82\x0E\x1D\x11\xEA\xE1\x82\x8E\xB3*\xC5\xFB\x8Cmgs\xB0\xFA\xF5\x9C\\\xE2\xB0\x95\x1F>LT"
+
+ def test_arcfour_for_encryption
+ assert_equal ARCFOUR, encrypt("arcfour")
+ end
+
+ def test_arcfour_for_decryption
+ assert_equal TEXT, decrypt("arcfour", ARCFOUR)
end
ARCFOUR128 = "\n\x90\xED*\xD4\xBE\xCBg5\xA5\a\xEC]\x97\xB7L\x06)6\x12FL\x90@\xF4Sqxqh\r\x11\x1Aq \xC8\xE6v\xC6\x12\xD9 "123", :hash => "^&*", :digester => OpenSSL::Digest::SHA1 })
assert_instance_of Net::SSH::Transport::HMAC::MAP[name], hmac
assert_equal key, hmac.key
end
@@ -31,4 +31,4 @@
end
end
-end
\ No newline at end of file
+end
diff -Nru ruby-net-ssh-2.2.1/test/transport/test_packet_stream.rb ruby-net-ssh-2.6.7/test/transport/test_packet_stream.rb
--- ruby-net-ssh-2.2.1/test/transport/test_packet_stream.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/test_packet_stream.rb 2013-06-16 17:57:19.000000000 +0000
@@ -165,23 +165,39 @@
assert_equal 24, stream.write_buffer.length
end
+ def test_enqueue_utf_8_packet_should_ensure_packet_length_is_in_bytes_and_multiple_of_block_length
+ packet = Net::SSH::Buffer.from(:string, "\u2603") # Snowman is 3 bytes
+ stream.enqueue_packet(packet)
+ # When bytesize is measured wrong using length, the result is off by 2.
+ # With length instead of bytesize, you get 26 length buffer.
+ assert_equal 0, stream.write_buffer.length % 8
+ end
+
PACKETS = {
"3des-cbc" => {
"hmac-md5" => {
- false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, #[\343\200Sb\377\265\322\003=S\255N\2654",
- :standard => "\317\222v\316\234<\310\377\310\034\346\351\020:\025{\372PDS\246\344\312J\364\301\n\262\r<\037\231Mu\031\240\255\026\362\200A\305\027\341\261\331x\353\0372\3643h`\177\202",
+ false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, \000\032w\312\t\306\374\271\345p\215\224\373\363\v\261",
+ :standard => "\317\222v\316\234<\310\377\310\034\346\351\020:\025{\372PDS\246\344\312J\364\301\n\262\r<\037\231Mu\031\240\255\026\362\200\354=g\361\271[E\265\217\316\314\b\202\235\226\334",
},
"hmac-md5-96" => {
- false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, #[\343\200Sb\377\265\322\003=S",
- :standard => "\317\222v\316\234<\310\377\310\034\346\351\020:\025{\372PDS\246\344\312J\364\301\n\262\r<\037\231Mu\031\240\255\026\362\200A\305\027\341\261\331x\353\0372\3643",
+ false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, \000\032w\312\t\306\374\271\345p\215\224",
+ :standard => "\317\222v\316\234<\310\377\310\034\346\351\020:\025{\372PDS\246\344\312J\364\301\n\262\r<\037\231Mu\031\240\255\026\362\200\354=g\361\271[E\265\217\316\314\b",
},
"hmac-sha1" => {
- false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, \235J\004f\262\3730t\376\273\323n\260\275\202\223\214\370D\204",
- :standard => "\317\222v\316\234<\310\377\310\034\346\351\020:\025{\372PDS\246\344\312J\364\301\n\262\r<\037\231Mu\031\240\255\026\362\200\345\a{|\0367\355\2735\310'\n\342\250\246\030*1\353\330",
+ false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, \004\a\200\n\004\202z\270\236\261\330m\275\005\f\202g\260g\376",
+ :standard => "\317\222v\316\234<\310\377\310\034\346\351\020:\025{\372PDS\246\344\312J\364\301\n\262\r<\037\231Mu\031\240\255\026\362\200\2117U\266\3444(\235\034\023\377\376\335\301\253rI\215W\311",
},
"hmac-sha1-96" => {
- false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, \235J\004f\262\3730t\376\273\323n",
- :standard => "\317\222v\316\234<\310\377\310\034\346\351\020:\025{\372PDS\246\344\312J\364\301\n\262\r<\037\231Mu\031\240\255\026\362\200\345\a{|\0367\355\2735\310'\n",
+ false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, \004\a\200\n\004\202z\270\236\261\330m",
+ :standard => "\317\222v\316\234<\310\377\310\034\346\351\020:\025{\372PDS\246\344\312J\364\301\n\262\r<\037\231Mu\031\240\255\026\362\200\2117U\266\3444(\235\034\023\377\376",
+ },
+ "hmac-ripemd160" => {
+ false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "\317\222v\316\234<\310\377\310\034\346\351\020:\025{\372PDS\246\344\312J\364\301\n\262\r<\037\231Mu\031\240\255\026\362\200)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "\317\222v\316\234<\310\377\310\034\346\351\020:\025{\372PDS\246\344\312J\364\301\n\262\r<\037\231Mu\031\240\255\026\362\200)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
},
"none" => {
false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, ",
@@ -190,20 +206,28 @@
},
"aes128-cbc" => {
"hmac-md5" => {
- false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NY#[\343\200Sb\377\265\322\003=S\255N\2654",
- :standard => "\273\367\324\032\3762\334\026\r\246\342\022\016\325\024\270.\273\005\314\036\312\211\261\037A\361\362:W\316\352K\204\216b\2124>A\265g\331\177\233dK\251\337\227`9L\324[bPd\253XY\205\241\310",
+ false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NY\000\032w\312\t\306\374\271\345p\215\224\373\363\v\261",
+ :standard => "\273\367\324\032\3762\334\026\r\246\342\022\016\325\024\270.\273\005\314\036\312\211\261\037A\361\362:W\316\352K\204\216b\2124>A\265g\331\177\233dK\251-\345\b\025\242#\336P8\343\361\263\\\241\326\311",
},
"hmac-md5-96" => {
- false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NY#[\343\200Sb\377\265\322\003=S",
- :standard => "\273\367\324\032\3762\334\026\r\246\342\022\016\325\024\270.\273\005\314\036\312\211\261\037A\361\362:W\316\352K\204\216b\2124>A\265g\331\177\233dK\251\337\227`9L\324[bPd\253X",
+ false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NY\000\032w\312\t\306\374\271\345p\215\224",
+ :standard => "\273\367\324\032\3762\334\026\r\246\342\022\016\325\024\270.\273\005\314\036\312\211\261\037A\361\362:W\316\352K\204\216b\2124>A\265g\331\177\233dK\251-\345\b\025\242#\336P8\343\361\263",
},
"hmac-sha1" => {
- false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NY\235J\004f\262\3730t\376\273\323n\260\275\202\223\214\370D\204",
- :standard => "\273\367\324\032\3762\334\026\r\246\342\022\016\325\024\270.\273\005\314\036\312\211\261\037A\361\362:W\316\352K\204\216b\2124>A\265g\331\177\233dK\251\314\r\224%\316I\370t\251\372]\031\322pH%\267\337r\247",
+ false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NY\004\a\200\n\004\202z\270\236\261\330m\275\005\f\202g\260g\376",
+ :standard => "\273\367\324\032\3762\334\026\r\246\342\022\016\325\024\270.\273\005\314\036\312\211\261\037A\361\362:W\316\352K\204\216b\2124>A\265g\331\177\233dK\251yC\272\314@\301\n\346$\223\367\r\026\366\375(i'\212\351",
},
"hmac-sha1-96" => {
- false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NY\235J\004f\262\3730t\376\273\323n",
- :standard => "\273\367\324\032\3762\334\026\r\246\342\022\016\325\024\270.\273\005\314\036\312\211\261\037A\361\362:W\316\352K\204\216b\2124>A\265g\331\177\233dK\251\314\r\224%\316I\370t\251\372]\031",
+ false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NY\004\a\200\n\004\202z\270\236\261\330m",
+ :standard => "\273\367\324\032\3762\334\026\r\246\342\022\016\325\024\270.\273\005\314\036\312\211\261\037A\361\362:W\316\352K\204\216b\2124>A\265g\331\177\233dK\251yC\272\314@\301\n\346$\223\367\r",
+ },
+ "hmac-ripemd160" => {
+ false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NYF\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "\273\367\324\032\3762\334\026\r\246\342\022\016\325\024\270.\273\005\314\036\312\211\261\037A\361\362:W\316\352K\204\216b\2124>A\265g\331\177\233dK\251\3044\024\343q\356\023\032\262\201\e9\213d\265>^{\300\320",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NYF\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "\273\367\324\032\3762\334\026\r\246\342\022\016\325\024\270.\273\005\314\036\312\211\261\037A\361\362:W\316\352K\204\216b\2124>A\265g\331\177\233dK\251\3044\024\343q\356\023\032\262\201\e9\213d\265>^{\300\320",
},
"none" => {
false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NY",
@@ -212,20 +236,28 @@
},
"aes192-cbc" => {
"hmac-md5" => {
- false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\003#[\343\200Sb\377\265\322\003=S\255N\2654",
- :standard => "se\347\230\026\311\212\250yH\241\302n\364:\276\270M=H1\317\222^\362\237D\225N\354:\343\205M\006[\313$U/yZ\330\235\032\307\320D\337\227`9L\324[bPd\253XY\205\241\310",
+ false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\003\000\032w\312\t\306\374\271\345p\215\224\373\363\v\261",
+ :standard => "se\347\230\026\311\212\250yH\241\302n\364:\276\270M=H1\317\222^\362\237D\225N\354:\343\205M\006[\313$U/yZ\330\235\032\307\320D-\345\b\025\242#\336P8\343\361\263\\\241\326\311",
},
"hmac-md5-96" => {
- false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\003#[\343\200Sb\377\265\322\003=S",
- :standard => "se\347\230\026\311\212\250yH\241\302n\364:\276\270M=H1\317\222^\362\237D\225N\354:\343\205M\006[\313$U/yZ\330\235\032\307\320D\337\227`9L\324[bPd\253X",
+ false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\003\000\032w\312\t\306\374\271\345p\215\224",
+ :standard => "se\347\230\026\311\212\250yH\241\302n\364:\276\270M=H1\317\222^\362\237D\225N\354:\343\205M\006[\313$U/yZ\330\235\032\307\320D-\345\b\025\242#\336P8\343\361\263",
},
"hmac-sha1" => {
- false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\003\235J\004f\262\3730t\376\273\323n\260\275\202\223\214\370D\204",
- :standard => "se\347\230\026\311\212\250yH\241\302n\364:\276\270M=H1\317\222^\362\237D\225N\354:\343\205M\006[\313$U/yZ\330\235\032\307\320D\314\r\224%\316I\370t\251\372]\031\322pH%\267\337r\247",
+ false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\003\004\a\200\n\004\202z\270\236\261\330m\275\005\f\202g\260g\376",
+ :standard => "se\347\230\026\311\212\250yH\241\302n\364:\276\270M=H1\317\222^\362\237D\225N\354:\343\205M\006[\313$U/yZ\330\235\032\307\320DyC\272\314@\301\n\346$\223\367\r\026\366\375(i'\212\351",
},
"hmac-sha1-96" => {
- false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\003\235J\004f\262\3730t\376\273\323n",
- :standard => "se\347\230\026\311\212\250yH\241\302n\364:\276\270M=H1\317\222^\362\237D\225N\354:\343\205M\006[\313$U/yZ\330\235\032\307\320D\314\r\224%\316I\370t\251\372]\031",
+ false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\003\004\a\200\n\004\202z\270\236\261\330m",
+ :standard => "se\347\230\026\311\212\250yH\241\302n\364:\276\270M=H1\317\222^\362\237D\225N\354:\343\205M\006[\313$U/yZ\330\235\032\307\320DyC\272\314@\301\n\346$\223\367\r",
+ },
+ "hmac-ripemd160" => {
+ false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\003F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "se\347\230\026\311\212\250yH\241\302n\364:\276\270M=H1\317\222^\362\237D\225N\354:\343\205M\006[\313$U/yZ\330\235\032\307\320D\3044\024\343q\356\023\032\262\201\e9\213d\265>^{\300\320",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\003F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "se\347\230\026\311\212\250yH\241\302n\364:\276\270M=H1\317\222^\362\237D\225N\354:\343\205M\006[\313$U/yZ\330\235\032\307\320D\3044\024\343q\356\023\032\262\201\e9\213d\265>^{\300\320",
},
"none" => {
false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\003",
@@ -234,20 +266,28 @@
},
"aes256-cbc" => {
"hmac-md5" => {
- false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340#[\343\200Sb\377\265\322\003=S\255N\2654",
- :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\337\227`9L\324[bPd\253XY\205\241\310",
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340\000\032w\312\t\306\374\271\345p\215\224\373\363\v\261",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365-\345\b\025\242#\336P8\343\361\263\\\241\326\311",
},
"hmac-md5-96" => {
- false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340#[\343\200Sb\377\265\322\003=S",
- :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\337\227`9L\324[bPd\253X",
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340\000\032w\312\t\306\374\271\345p\215\224",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365-\345\b\025\242#\336P8\343\361\263",
},
"hmac-sha1" => {
- false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340\235J\004f\262\3730t\376\273\323n\260\275\202\223\214\370D\204",
- :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\314\r\224%\316I\370t\251\372]\031\322pH%\267\337r\247",
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340\004\a\200\n\004\202z\270\236\261\330m\275\005\f\202g\260g\376",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365yC\272\314@\301\n\346$\223\367\r\026\366\375(i'\212\351",
},
"hmac-sha1-96" => {
- false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340\235J\004f\262\3730t\376\273\323n",
- :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\314\r\224%\316I\370t\251\372]\031",
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340\004\a\200\n\004\202z\270\236\261\330m",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365yC\272\314@\301\n\346$\223\367\r",
+ },
+ "hmac-ripemd160" => {
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\3044\024\343q\356\023\032\262\201\e9\213d\265>^{\300\320",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\3044\024\343q\356\023\032\262\201\e9\213d\265>^{\300\320",
},
"none" => {
false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340",
@@ -256,20 +296,28 @@
},
"blowfish-cbc" => {
"hmac-md5" => {
- false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)#[\343\200Sb\377\265\322\003=S\255N\2654",
- :standard => "U\257\231e\347\274\bh\016X\232h\334\v\005\316e1G$-\367##\256$rW\000\210\335_\360\f\000\205#\370\201\006A\305\027\341\261\331x\353\0372\3643h`\177\202",
+ false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)\000\032w\312\t\306\374\271\345p\215\224\373\363\v\261",
+ :standard => "U\257\231e\347\274\bh\016X\232h\334\v\005\316e1G$-\367##\256$rW\000\210\335_\360\f\000\205#\370\201\006\354=g\361\271[E\265\217\316\314\b\202\235\226\334",
},
"hmac-md5-96" => {
- false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)#[\343\200Sb\377\265\322\003=S",
- :standard => "U\257\231e\347\274\bh\016X\232h\334\v\005\316e1G$-\367##\256$rW\000\210\335_\360\f\000\205#\370\201\006A\305\027\341\261\331x\353\0372\3643",
+ false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)\000\032w\312\t\306\374\271\345p\215\224",
+ :standard => "U\257\231e\347\274\bh\016X\232h\334\v\005\316e1G$-\367##\256$rW\000\210\335_\360\f\000\205#\370\201\006\354=g\361\271[E\265\217\316\314\b",
},
"hmac-sha1" => {
- false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)\235J\004f\262\3730t\376\273\323n\260\275\202\223\214\370D\204",
- :standard => "U\257\231e\347\274\bh\016X\232h\334\v\005\316e1G$-\367##\256$rW\000\210\335_\360\f\000\205#\370\201\006\345\a{|\0367\355\2735\310'\n\342\250\246\030*1\353\330",
+ false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)\004\a\200\n\004\202z\270\236\261\330m\275\005\f\202g\260g\376",
+ :standard => "U\257\231e\347\274\bh\016X\232h\334\v\005\316e1G$-\367##\256$rW\000\210\335_\360\f\000\205#\370\201\006\2117U\266\3444(\235\034\023\377\376\335\301\253rI\215W\311",
},
"hmac-sha1-96" => {
- false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)\235J\004f\262\3730t\376\273\323n",
- :standard => "U\257\231e\347\274\bh\016X\232h\334\v\005\316e1G$-\367##\256$rW\000\210\335_\360\f\000\205#\370\201\006\345\a{|\0367\355\2735\310'\n",
+ false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)\004\a\200\n\004\202z\270\236\261\330m",
+ :standard => "U\257\231e\347\274\bh\016X\232h\334\v\005\316e1G$-\367##\256$rW\000\210\335_\360\f\000\205#\370\201\006\2117U\266\3444(\235\034\023\377\376",
+ },
+ "hmac-ripemd160" => {
+ false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "U\257\231e\347\274\bh\016X\232h\334\v\005\316e1G$-\367##\256$rW\000\210\335_\360\f\000\205#\370\201\006)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "U\257\231e\347\274\bh\016X\232h\334\v\005\316e1G$-\367##\256$rW\000\210\335_\360\f\000\205#\370\201\006)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
},
"none" => {
false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)",
@@ -278,20 +326,28 @@
},
"cast128-cbc" => {
"hmac-md5" => {
- false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\376#[\343\200Sb\377\265\322\003=S\255N\2654",
- :standard => "\375i\253\004\311E\2011)\220$\251A\245\f(\371\263\314\242\353\260\272\367\276\"\031\224$\244\311W\307Oe\224\0017\336\325A\305\027\341\261\331x\353\0372\3643h`\177\202",
+ false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\376\000\032w\312\t\306\374\271\345p\215\224\373\363\v\261",
+ :standard => "\375i\253\004\311E\2011)\220$\251A\245\f(\371\263\314\242\353\260\272\367\276\"\031\224$\244\311W\307Oe\224\0017\336\325\354=g\361\271[E\265\217\316\314\b\202\235\226\334",
},
"hmac-md5-96" => {
- false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\376#[\343\200Sb\377\265\322\003=S",
- :standard => "\375i\253\004\311E\2011)\220$\251A\245\f(\371\263\314\242\353\260\272\367\276\"\031\224$\244\311W\307Oe\224\0017\336\325A\305\027\341\261\331x\353\0372\3643",
+ false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\376\000\032w\312\t\306\374\271\345p\215\224",
+ :standard => "\375i\253\004\311E\2011)\220$\251A\245\f(\371\263\314\242\353\260\272\367\276\"\031\224$\244\311W\307Oe\224\0017\336\325\354=g\361\271[E\265\217\316\314\b",
},
"hmac-sha1" => {
- false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\376\235J\004f\262\3730t\376\273\323n\260\275\202\223\214\370D\204",
- :standard => "\375i\253\004\311E\2011)\220$\251A\245\f(\371\263\314\242\353\260\272\367\276\"\031\224$\244\311W\307Oe\224\0017\336\325\345\a{|\0367\355\2735\310'\n\342\250\246\030*1\353\330",
+ false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\376\004\a\200\n\004\202z\270\236\261\330m\275\005\f\202g\260g\376",
+ :standard => "\375i\253\004\311E\2011)\220$\251A\245\f(\371\263\314\242\353\260\272\367\276\"\031\224$\244\311W\307Oe\224\0017\336\325\2117U\266\3444(\235\034\023\377\376\335\301\253rI\215W\311",
},
"hmac-sha1-96" => {
- false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\376\235J\004f\262\3730t\376\273\323n",
- :standard => "\375i\253\004\311E\2011)\220$\251A\245\f(\371\263\314\242\353\260\272\367\276\"\031\224$\244\311W\307Oe\224\0017\336\325\345\a{|\0367\355\2735\310'\n",
+ false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\376\004\a\200\n\004\202z\270\236\261\330m",
+ :standard => "\375i\253\004\311E\2011)\220$\251A\245\f(\371\263\314\242\353\260\272\367\276\"\031\224$\244\311W\307Oe\224\0017\336\325\2117U\266\3444(\235\034\023\377\376",
+ },
+ "hmac-ripemd160" => {
+ false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\376F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "\375i\253\004\311E\2011)\220$\251A\245\f(\371\263\314\242\353\260\272\367\276\"\031\224$\244\311W\307Oe\224\0017\336\325)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\376F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "\375i\253\004\311E\2011)\220$\251A\245\f(\371\263\314\242\353\260\272\367\276\"\031\224$\244\311W\307Oe\224\0017\336\325)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
},
"none" => {
false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\376",
@@ -300,42 +356,688 @@
},
"idea-cbc" => {
"hmac-md5" => {
- false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 H#[\343\200Sb\377\265\322\003=S\255N\2654",
- :standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317A\305\027\341\261\331x\353\0372\3643h`\177\202",
+ false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 H\000\032w\312\t\306\374\271\345p\215\224\373\363\v\261",
+ :standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317\354=g\361\271[E\265\217\316\314\b\202\235\226\334",
},
"hmac-md5-96" => {
- false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 H#[\343\200Sb\377\265\322\003=S",
- :standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317A\305\027\341\261\331x\353\0372\3643",
+ false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 H\000\032w\312\t\306\374\271\345p\215\224",
+ :standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317\354=g\361\271[E\265\217\316\314\b",
},
"hmac-sha1" => {
- false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 H\235J\004f\262\3730t\376\273\323n\260\275\202\223\214\370D\204",
- :standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317\345\a{|\0367\355\2735\310'\n\342\250\246\030*1\353\330",
+ false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 H\004\a\200\n\004\202z\270\236\261\330m\275\005\f\202g\260g\376",
+ :standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317\2117U\266\3444(\235\034\023\377\376\335\301\253rI\215W\311",
},
"hmac-sha1-96" => {
- false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 H\235J\004f\262\3730t\376\273\323n",
- :standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317\345\a{|\0367\355\2735\310'\n",
+ false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 H\004\a\200\n\004\202z\270\236\261\330m",
+ :standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317\2117U\266\3444(\235\034\023\377\376",
+ },
+ "hmac-ripemd160" => {
+ false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 HF\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 HF\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
},
"none" => {
false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 H",
:standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317",
},
},
- "none" => {
+ "arcfour128" => {
+ "hmac-md5" => {
+ false => "e_\204\037\366\363>\024\263q\025\334\354AO.\026t\231nvD\030\226\234\263\257\335:\001\300\255\000\032w\312\t\306\374\271\345p\215\224\373\363\v\261",
+ :standard => "e_\204'\367\217\243v\322\025|\330ios\004[P\270\306\272\017\037\344\214\253\354\272m\261\217/jW'V\277\341U\224\354=g\361\271[E\265\217\316\314\b\202\235\226\334",
+ },
+ "hmac-md5-96" => {
+ false => "e_\204\037\366\363>\024\263q\025\334\354AO.\026t\231nvD\030\226\234\263\257\335:\001\300\255\000\032w\312\t\306\374\271\345p\215\224",
+ :standard => "e_\204'\367\217\243v\322\025|\330ios\004[P\270\306\272\017\037\344\214\253\354\272m\261\217/jW'V\277\341U\224\354=g\361\271[E\265\217\316\314\b",
+ },
+ "hmac-sha1" => {
+ false => "e_\204\037\366\363>\024\263q\025\334\354AO.\026t\231nvD\030\226\234\263\257\335:\001\300\255\004\a\200\n\004\202z\270\236\261\330m\275\005\f\202g\260g\376",
+ :standard => "e_\204'\367\217\243v\322\025|\330ios\004[P\270\306\272\017\037\344\214\253\354\272m\261\217/jW'V\277\341U\224\2117U\266\3444(\235\034\023\377\376\335\301\253rI\215W\311",
+ },
+ "hmac-sha1-96" => {
+ false => "e_\204\037\366\363>\024\263q\025\334\354AO.\026t\231nvD\030\226\234\263\257\335:\001\300\255\004\a\200\n\004\202z\270\236\261\330m",
+ :standard => "e_\204'\367\217\243v\322\025|\330ios\004[P\270\306\272\017\037\344\214\253\354\272m\261\217/jW'V\277\341U\224\2117U\266\3444(\235\034\023\377\376",
+ },
+ "hmac-ripemd160" => {
+ false => "e_\204\037\366\363>\024\263q\025\334\354AO.\026t\231nvD\030\226\234\263\257\335:\001\300\255F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "e_\204'\367\217\243v\322\025|\330ios\004[P\270\306\272\017\037\344\214\253\354\272m\261\217/jW'V\277\341U\224)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "e_\204\037\366\363>\024\263q\025\334\354AO.\026t\231nvD\030\226\234\263\257\335:\001\300\255F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "e_\204'\367\217\243v\322\025|\330ios\004[P\270\306\272\017\037\344\214\253\354\272m\261\217/jW'V\277\341U\224)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
+ },
+ "none" => {
+ false => "e_\204\037\366\363>\024\263q\025\334\354AO.\026t\231nvD\030\226\234\263\257\335:\001\300\255",
+ :standard => "e_\204'\367\217\243v\322\025|\330ios\004[P\270\306\272\017\037\344\214\253\354\272m\261\217/jW'V\277\341U\224",
+ },
+ },
+ "arcfour256" => {
+ "hmac-md5" => {
+ false => "B\374\256V\035b\337\215\305h\031bE\271\312\361\017T+\302\024x\3016\315g%\032\331\004fr\000\032w\312\t\306\374\271\345p\215\224\373\363\v\261",
+ :standard => "B\374\256n\034\036B\357\244\fpf\300\227\366\333Bp\nj\3303\306D\335\177f}\216\264)\360\325jU^M\357$\221\354=g\361\271[E\265\217\316\314\b\202\235\226\334",
+ },
+ "hmac-md5-96" => {
+ false => "B\374\256V\035b\337\215\305h\031bE\271\312\361\017T+\302\024x\3016\315g%\032\331\004fr\000\032w\312\t\306\374\271\345p\215\224",
+ :standard => "B\374\256n\034\036B\357\244\fpf\300\227\366\333Bp\nj\3303\306D\335\177f}\216\264)\360\325jU^M\357$\221\354=g\361\271[E\265\217\316\314\b",
+ },
+ "hmac-sha1" => {
+ false => "B\374\256V\035b\337\215\305h\031bE\271\312\361\017T+\302\024x\3016\315g%\032\331\004fr\004\a\200\n\004\202z\270\236\261\330m\275\005\f\202g\260g\376",
+ :standard => "B\374\256n\034\036B\357\244\fpf\300\227\366\333Bp\nj\3303\306D\335\177f}\216\264)\360\325jU^M\357$\221\2117U\266\3444(\235\034\023\377\376\335\301\253rI\215W\311",
+ },
+ "hmac-sha1-96" => {
+ false => "B\374\256V\035b\337\215\305h\031bE\271\312\361\017T+\302\024x\3016\315g%\032\331\004fr\004\a\200\n\004\202z\270\236\261\330m",
+ :standard => "B\374\256n\034\036B\357\244\fpf\300\227\366\333Bp\nj\3303\306D\335\177f}\216\264)\360\325jU^M\357$\221\2117U\266\3444(\235\034\023\377\376",
+ },
+ "hmac-ripemd160" => {
+ false => "B\374\256V\035b\337\215\305h\031bE\271\312\361\017T+\302\024x\3016\315g%\032\331\004frF\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "B\374\256n\034\036B\357\244\fpf\300\227\366\333Bp\nj\3303\306D\335\177f}\216\264)\360\325jU^M\357$\221)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "B\374\256V\035b\337\215\305h\031bE\271\312\361\017T+\302\024x\3016\315g%\032\331\004frF\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "B\374\256n\034\036B\357\244\fpf\300\227\366\333Bp\nj\3303\306D\335\177f}\216\264)\360\325jU^M\357$\221)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
+ },
+ "none" => {
+ false => "B\374\256V\035b\337\215\305h\031bE\271\312\361\017T+\302\024x\3016\315g%\032\331\004fr",
+ :standard => "B\374\256n\034\036B\357\244\fpf\300\227\366\333Bp\nj\3303\306D\335\177f}\216\264)\360\325jU^M\357$\221",
+ },
+ },
+ "arcfour512" => {
+ "hmac-md5" => {
+ false => "\n{\275\177Yw\307\f\277\221\247'\0318\237\223cR\340\361\356\017\357\235\342\374\005wL\267\330D\000\032w\312\t\306\374\271\345p\215\224\373\363\v\261",
+ :standard => "\n{\275GX\vZn\336\365\316#\234\026\243\271.v\301Y\"D\350\357\362\344F\020\e\a\227\306\366\025:\246\2349\233\313\354=g\361\271[E\265\217\316\314\b\202\235\226\334",
+ },
+ "hmac-md5-96" => {
+ false => "\n{\275\177Yw\307\f\277\221\247'\0318\237\223cR\340\361\356\017\357\235\342\374\005wL\267\330D\000\032w\312\t\306\374\271\345p\215\224",
+ :standard => "\n{\275GX\vZn\336\365\316#\234\026\243\271.v\301Y\"D\350\357\362\344F\020\e\a\227\306\366\025:\246\2349\233\313\354=g\361\271[E\265\217\316\314\b",
+ },
+ "hmac-sha1" => {
+ false => "\n{\275\177Yw\307\f\277\221\247'\0318\237\223cR\340\361\356\017\357\235\342\374\005wL\267\330D\004\a\200\n\004\202z\270\236\261\330m\275\005\f\202g\260g\376",
+ :standard => "\n{\275GX\vZn\336\365\316#\234\026\243\271.v\301Y\"D\350\357\362\344F\020\e\a\227\306\366\025:\246\2349\233\313\2117U\266\3444(\235\034\023\377\376\335\301\253rI\215W\311",
+ },
+ "hmac-sha1-96" => {
+ false => "\n{\275\177Yw\307\f\277\221\247'\0318\237\223cR\340\361\356\017\357\235\342\374\005wL\267\330D\004\a\200\n\004\202z\270\236\261\330m",
+ :standard => "\n{\275GX\vZn\336\365\316#\234\026\243\271.v\301Y\"D\350\357\362\344F\020\e\a\227\306\366\025:\246\2349\233\313\2117U\266\3444(\235\034\023\377\376",
+ },
+ "hmac-ripemd160" => {
+ false => "\n{\275\177Yw\307\f\277\221\247'\0318\237\223cR\340\361\356\017\357\235\342\374\005wL\267\330DF\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "\n{\275GX\vZn\336\365\316#\234\026\243\271.v\301Y\"D\350\357\362\344F\020\e\a\227\306\366\025:\246\2349\233\313)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\n{\275\177Yw\307\f\277\221\247'\0318\237\223cR\340\361\356\017\357\235\342\374\005wL\267\330DF\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "\n{\275GX\vZn\336\365\316#\234\026\243\271.v\301Y\"D\350\357\362\344F\020\e\a\227\306\366\025:\246\2349\233\313)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
+ },
+ "none" => {
+ false => "\n{\275\177Yw\307\f\277\221\247'\0318\237\223cR\340\361\356\017\357\235\342\374\005wL\267\330D",
+ :standard => "\n{\275GX\vZn\336\365\316#\234\026\243\271.v\301Y\"D\350\357\362\344F\020\e\a\227\306\366\025:\246\2349\233\313",
+ },
+ },
+ "camellia128-cbc@openssh.org" => {
+ "hmac-md5" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3\\\xA1\xD6\xC9",
+ },
+ "hmac-md5-96" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3",
+ },
+ "hmac-sha1" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r\x16\xF6\xFD(i'\x8A\xE9",
+ },
+ "hmac-sha1-96" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r",
+ },
+ "hmac-ripemd160" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9DF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9DF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "none" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13",
+ },
+ },
+ "camellia192-cbc@openssh.org" => {
+ "hmac-md5" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3\\\xA1\xD6\xC9",
+ },
+ "hmac-md5-96" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3",
+ },
+ "hmac-sha1" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r\x16\xF6\xFD(i'\x8A\xE9",
+ },
+ "hmac-sha1-96" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r",
+ },
+ "hmac-ripemd160" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83EF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83EF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "none" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12",
+ },
+ },
+ "camellia256-cbc@openssh.org" => {
+ "hmac-md5" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFi-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3\\\xA1\xD6\xC9",
+ },
+ "hmac-md5-96" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFi-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3",
+ },
+ "hmac-sha1" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFiyC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r\x16\xF6\xFD(i'\x8A\xE9",
+ },
+ "hmac-sha1-96" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFiyC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r",
+ },
+ "hmac-ripemd160" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|F\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFi\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|F\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFi\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "none" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFi",
+ },
+ },
+ "camellia128-cbc" => {
+ "hmac-md5" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3\\\xA1\xD6\xC9",
+ },
+ "hmac-md5-96" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3",
+ },
+ "hmac-sha1" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r\x16\xF6\xFD(i'\x8A\xE9",
+ },
+ "hmac-sha1-96" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r",
+ },
+ "hmac-ripemd160" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9DF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9DF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "none" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13",
+ },
+ },
+ "camellia192-cbc" => {
+ "hmac-md5" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3\\\xA1\xD6\xC9",
+ },
+ "hmac-md5-96" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3",
+ },
+ "hmac-sha1" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r\x16\xF6\xFD(i'\x8A\xE9",
+ },
+ "hmac-sha1-96" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r",
+ },
+ "hmac-ripemd160" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83EF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83EF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "none" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12",
+ },
+ },
+ "camellia256-cbc" => {
+ "hmac-md5" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFi-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3\\\xA1\xD6\xC9",
+ },
+ "hmac-md5-96" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFi-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3",
+ },
+ "hmac-sha1" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFiyC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r\x16\xF6\xFD(i'\x8A\xE9",
+ },
+ "hmac-sha1-96" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFiyC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r",
+ },
+ "hmac-ripemd160" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|F\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFi\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|F\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFi\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "none" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFi",
+ },
+ },
+ "3des-ctr" => {
+ "hmac-md5" => {
+ false => "\xED#\x86\xD5\xE1mP\v\f\xB9\xC1\xE6\xFD\xA0~,\xD3\x13\x12\x8Cp\xD4F\x92\xCB\xB6R>\xFA]\x9B\xB1\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\xED#\x86\xED\xE0\x11\xCDim\xDD\xA8\xE2x\x8EB\x06\x9E73$\xBC\x9FA\xE0\xDB\xAE\x11Y\xAD\xED\xD43\x86N\x89\xFE\x14V\x91B\xEC=g\xF1\xB9[E\xB5\x8F\xCE\xCC\b\x82\x9D\x96\xDC",
+ },
+ "hmac-md5-96" => {
+ false => "\xED#\x86\xD5\xE1mP\v\f\xB9\xC1\xE6\xFD\xA0~,\xD3\x13\x12\x8Cp\xD4F\x92\xCB\xB6R>\xFA]\x9B\xB1\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\xED#\x86\xED\xE0\x11\xCDim\xDD\xA8\xE2x\x8EB\x06\x9E73$\xBC\x9FA\xE0\xDB\xAE\x11Y\xAD\xED\xD43\x86N\x89\xFE\x14V\x91B\xEC=g\xF1\xB9[E\xB5\x8F\xCE\xCC\b",
+ },
+ "hmac-sha1" => {
+ false => "\xED#\x86\xD5\xE1mP\v\f\xB9\xC1\xE6\xFD\xA0~,\xD3\x13\x12\x8Cp\xD4F\x92\xCB\xB6R>\xFA]\x9B\xB1\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\xED#\x86\xED\xE0\x11\xCDim\xDD\xA8\xE2x\x8EB\x06\x9E73$\xBC\x9FA\xE0\xDB\xAE\x11Y\xAD\xED\xD43\x86N\x89\xFE\x14V\x91B\x897U\xB6\xE44(\x9D\x1C\x13\xFF\xFE\xDD\xC1\xABrI\x8DW\xC9",
+ },
+ "hmac-sha1-96" => {
+ false => "\xED#\x86\xD5\xE1mP\v\f\xB9\xC1\xE6\xFD\xA0~,\xD3\x13\x12\x8Cp\xD4F\x92\xCB\xB6R>\xFA]\x9B\xB1\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\xED#\x86\xED\xE0\x11\xCDim\xDD\xA8\xE2x\x8EB\x06\x9E73$\xBC\x9FA\xE0\xDB\xAE\x11Y\xAD\xED\xD43\x86N\x89\xFE\x14V\x91B\x897U\xB6\xE44(\x9D\x1C\x13\xFF\xFE",
+ },
+ "hmac-ripemd160" => {
+ false => "\xED#\x86\xD5\xE1mP\v\f\xB9\xC1\xE6\xFD\xA0~,\xD3\x13\x12\x8Cp\xD4F\x92\xCB\xB6R>\xFA]\x9B\xB1F\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xED#\x86\xED\xE0\x11\xCDim\xDD\xA8\xE2x\x8EB\x06\x9E73$\xBC\x9FA\xE0\xDB\xAE\x11Y\xAD\xED\xD43\x86N\x89\xFE\x14V\x91B)U\xBD\x03U\xDB\x95\x91Y)\xCF\xAE\xA0\xA6\x000\xE9\x1A\xF3Y",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\xED#\x86\xD5\xE1mP\v\f\xB9\xC1\xE6\xFD\xA0~,\xD3\x13\x12\x8Cp\xD4F\x92\xCB\xB6R>\xFA]\x9B\xB1F\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xED#\x86\xED\xE0\x11\xCDim\xDD\xA8\xE2x\x8EB\x06\x9E73$\xBC\x9FA\xE0\xDB\xAE\x11Y\xAD\xED\xD43\x86N\x89\xFE\x14V\x91B)U\xBD\x03U\xDB\x95\x91Y)\xCF\xAE\xA0\xA6\x000\xE9\x1A\xF3Y",
+ },
+ "none" => {
+ false => "\xED#\x86\xD5\xE1mP\v\f\xB9\xC1\xE6\xFD\xA0~,\xD3\x13\x12\x8Cp\xD4F\x92\xCB\xB6R>\xFA]\x9B\xB1",
+ :standard => "\xED#\x86\xED\xE0\x11\xCDim\xDD\xA8\xE2x\x8EB\x06\x9E73$\xBC\x9FA\xE0\xDB\xAE\x11Y\xAD\xED\xD43\x86N\x89\xFE\x14V\x91B",
+ },
+ },
+ "blowfish-ctr" => {
+ "hmac-md5" => {
+ false => "\xF7gk6\xB8\xACK\x1D\xC4Ls\xB0{\x0F\xC7\xC4M\xC5>\xF6G8\xD4\xBCu\x152FoJ\xB0\xC0\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\xF7gk\x0E\xB9\xD0\xD6\x7F\xA5(\x1A\xB4\xFE!\xFB\xEE\x00\xE1\x1F^\x8Bs\xD3\xCEe\rq!8\xFA\xFFB\r\xE9\xFC\xF6\xCA\xBC\x03\xA9\xEC=g\xF1\xB9[E\xB5\x8F\xCE\xCC\b\x82\x9D\x96\xDC",
+ },
+ "hmac-md5-96" => {
+ false => "\xF7gk6\xB8\xACK\x1D\xC4Ls\xB0{\x0F\xC7\xC4M\xC5>\xF6G8\xD4\xBCu\x152FoJ\xB0\xC0\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\xF7gk\x0E\xB9\xD0\xD6\x7F\xA5(\x1A\xB4\xFE!\xFB\xEE\x00\xE1\x1F^\x8Bs\xD3\xCEe\rq!8\xFA\xFFB\r\xE9\xFC\xF6\xCA\xBC\x03\xA9\xEC=g\xF1\xB9[E\xB5\x8F\xCE\xCC\b",
+ },
+ "hmac-sha1" => {
+ false => "\xF7gk6\xB8\xACK\x1D\xC4Ls\xB0{\x0F\xC7\xC4M\xC5>\xF6G8\xD4\xBCu\x152FoJ\xB0\xC0\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\xF7gk\x0E\xB9\xD0\xD6\x7F\xA5(\x1A\xB4\xFE!\xFB\xEE\x00\xE1\x1F^\x8Bs\xD3\xCEe\rq!8\xFA\xFFB\r\xE9\xFC\xF6\xCA\xBC\x03\xA9\x897U\xB6\xE44(\x9D\x1C\x13\xFF\xFE\xDD\xC1\xABrI\x8DW\xC9",
+ },
+ "hmac-sha1-96" => {
+ false => "\xF7gk6\xB8\xACK\x1D\xC4Ls\xB0{\x0F\xC7\xC4M\xC5>\xF6G8\xD4\xBCu\x152FoJ\xB0\xC0\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\xF7gk\x0E\xB9\xD0\xD6\x7F\xA5(\x1A\xB4\xFE!\xFB\xEE\x00\xE1\x1F^\x8Bs\xD3\xCEe\rq!8\xFA\xFFB\r\xE9\xFC\xF6\xCA\xBC\x03\xA9\x897U\xB6\xE44(\x9D\x1C\x13\xFF\xFE",
+ },
+ "hmac-ripemd160" => {
+ false => "\xF7gk6\xB8\xACK\x1D\xC4Ls\xB0{\x0F\xC7\xC4M\xC5>\xF6G8\xD4\xBCu\x152FoJ\xB0\xC0F\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xF7gk\x0E\xB9\xD0\xD6\x7F\xA5(\x1A\xB4\xFE!\xFB\xEE\x00\xE1\x1F^\x8Bs\xD3\xCEe\rq!8\xFA\xFFB\r\xE9\xFC\xF6\xCA\xBC\x03\xA9)U\xBD\x03U\xDB\x95\x91Y)\xCF\xAE\xA0\xA6\x000\xE9\x1A\xF3Y",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\xF7gk6\xB8\xACK\x1D\xC4Ls\xB0{\x0F\xC7\xC4M\xC5>\xF6G8\xD4\xBCu\x152FoJ\xB0\xC0F\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xF7gk\x0E\xB9\xD0\xD6\x7F\xA5(\x1A\xB4\xFE!\xFB\xEE\x00\xE1\x1F^\x8Bs\xD3\xCEe\rq!8\xFA\xFFB\r\xE9\xFC\xF6\xCA\xBC\x03\xA9)U\xBD\x03U\xDB\x95\x91Y)\xCF\xAE\xA0\xA6\x000\xE9\x1A\xF3Y",
+ },
+ "none" => {
+ false => "\xF7gk6\xB8\xACK\x1D\xC4Ls\xB0{\x0F\xC7\xC4M\xC5>\xF6G8\xD4\xBCu\x152FoJ\xB0\xC0",
+ :standard => "\xF7gk\x0E\xB9\xD0\xD6\x7F\xA5(\x1A\xB4\xFE!\xFB\xEE\x00\xE1\x1F^\x8Bs\xD3\xCEe\rq!8\xFA\xFFB\r\xE9\xFC\xF6\xCA\xBC\x03\xA9",
+ },
+ },
+ "aes128-ctr" => {
"hmac-md5" => {
- false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\212#[\343\200Sb\377\265\322\003=S\255N\2654",
- :standard => "\000\000\000$\tx\234bad``\340LIM*MO\317\314K\ar\030\000\000\000\000\377\377\b\030CgWO\260\212^A\305\027\341\261\331x\353\0372\3643h`\177\202",
+ false => "\xD6\x98\xC1n+6\xCA`s2\x06\xAA\x80\xFA\xF3\xF6\xCA\xF9\xC8[BB\xDC\x9F\xDC$\x88*\xA7\x00\x8E\xFD\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\xD6\x98\xC1^2JW\x02\x12Vo\xAE\x05\xD4\xCF\xDC\x87\xDD\xE9\xF3\x8E\t\xDB\xED\xCC<\xCBM\xF0\xB0\xC1\x7F\xD7\x17\x931\xBC~\r\xF2\x87\xB89\x9B\x8B\xB3\x8E\x15-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3\\\xA1\xD6\xC9",
},
"hmac-md5-96" => {
- false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\212#[\343\200Sb\377\265\322\003=S",
- :standard => "\000\000\000$\tx\234bad``\340LIM*MO\317\314K\ar\030\000\000\000\000\377\377\b\030CgWO\260\212^A\305\027\341\261\331x\353\0372\3643",
+ false => "\xD6\x98\xC1n+6\xCA`s2\x06\xAA\x80\xFA\xF3\xF6\xCA\xF9\xC8[BB\xDC\x9F\xDC$\x88*\xA7\x00\x8E\xFD\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\xD6\x98\xC1^2JW\x02\x12Vo\xAE\x05\xD4\xCF\xDC\x87\xDD\xE9\xF3\x8E\t\xDB\xED\xCC<\xCBM\xF0\xB0\xC1\x7F\xD7\x17\x931\xBC~\r\xF2\x87\xB89\x9B\x8B\xB3\x8E\x15-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3",
},
"hmac-sha1" => {
- false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\212\235J\004f\262\3730t\376\273\323n\260\275\202\223\214\370D\204",
- :standard => "\000\000\000$\tx\234bad``\340LIM*MO\317\314K\ar\030\000\000\000\000\377\377\b\030CgWO\260\212^\345\a{|\0367\355\2735\310'\n\342\250\246\030*1\353\330",
+ false => "\xD6\x98\xC1n+6\xCA`s2\x06\xAA\x80\xFA\xF3\xF6\xCA\xF9\xC8[BB\xDC\x9F\xDC$\x88*\xA7\x00\x8E\xFD\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\xD6\x98\xC1^2JW\x02\x12Vo\xAE\x05\xD4\xCF\xDC\x87\xDD\xE9\xF3\x8E\t\xDB\xED\xCC<\xCBM\xF0\xB0\xC1\x7F\xD7\x17\x931\xBC~\r\xF2\x87\xB89\x9B\x8B\xB3\x8E\x15yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r\x16\xF6\xFD(i'\x8A\xE9",
},
"hmac-sha1-96" => {
- false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\212\235J\004f\262\3730t\376\273\323n",
- :standard => "\000\000\000$\tx\234bad``\340LIM*MO\317\314K\ar\030\000\000\000\000\377\377\b\030CgWO\260\212^\345\a{|\0367\355\2735\310'\n",
+ false => "\xD6\x98\xC1n+6\xCA`s2\x06\xAA\x80\xFA\xF3\xF6\xCA\xF9\xC8[BB\xDC\x9F\xDC$\x88*\xA7\x00\x8E\xFD\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\xD6\x98\xC1^2JW\x02\x12Vo\xAE\x05\xD4\xCF\xDC\x87\xDD\xE9\xF3\x8E\t\xDB\xED\xCC<\xCBM\xF0\xB0\xC1\x7F\xD7\x17\x931\xBC~\r\xF2\x87\xB89\x9B\x8B\xB3\x8E\x15yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r",
+ },
+ "hmac-ripemd160" => {
+ false => "\xD6\x98\xC1n+6\xCA`s2\x06\xAA\x80\xFA\xF3\xF6\xCA\xF9\xC8[BB\xDC\x9F\xDC$\x88*\xA7\x00\x8E\xFDF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xD6\x98\xC1^2JW\x02\x12Vo\xAE\x05\xD4\xCF\xDC\x87\xDD\xE9\xF3\x8E\t\xDB\xED\xCC<\xCBM\xF0\xB0\xC1\x7F\xD7\x17\x931\xBC~\r\xF2\x87\xB89\x9B\x8B\xB3\x8E\x15\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\xD6\x98\xC1n+6\xCA`s2\x06\xAA\x80\xFA\xF3\xF6\xCA\xF9\xC8[BB\xDC\x9F\xDC$\x88*\xA7\x00\x8E\xFDF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xD6\x98\xC1^2JW\x02\x12Vo\xAE\x05\xD4\xCF\xDC\x87\xDD\xE9\xF3\x8E\t\xDB\xED\xCC<\xCBM\xF0\xB0\xC1\x7F\xD7\x17\x931\xBC~\r\xF2\x87\xB89\x9B\x8B\xB3\x8E\x15\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "none" => {
+ false => "\xD6\x98\xC1n+6\xCA`s2\x06\xAA\x80\xFA\xF3\xF6\xCA\xF9\xC8[BB\xDC\x9F\xDC$\x88*\xA7\x00\x8E\xFD",
+ :standard => "\xD6\x98\xC1^2JW\x02\x12Vo\xAE\x05\xD4\xCF\xDC\x87\xDD\xE9\xF3\x8E\t\xDB\xED\xCC<\xCBM\xF0\xB0\xC1\x7F\xD7\x17\x931\xBC~\r\xF2\x87\xB89\x9B\x8B\xB3\x8E\x15",
+ },
+ },
+ "aes192-ctr" => {
+ "hmac-md5" => {
+ false => "\xA8\x02\xB4-\xFBYo4F\"\xCF\xB8\x92\xF08\xAC\xE8\xECk\xECO\xE7\xF8\x01\xF8\xB0\x9E\x05\xFB\xA7\xA7\x91\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\xA8\x02\xB4\x1D\xE2%\xF2V'F\xA6\xBC\x17\xDE\x04\x86\xA5\xC8JD\x83\xAC\xFFs\xE8\xA8\xDDb\xAC\x17\xE8\x13\x92V\x9E\x00!\x1F\xD4\x00\x92T\x15\xDE\xA4\xCA\xE9\xC1-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3\\\xA1\xD6\xC9",
+ },
+ "hmac-md5-96" => {
+ false => "\xA8\x02\xB4-\xFBYo4F\"\xCF\xB8\x92\xF08\xAC\xE8\xECk\xECO\xE7\xF8\x01\xF8\xB0\x9E\x05\xFB\xA7\xA7\x91\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\xA8\x02\xB4\x1D\xE2%\xF2V'F\xA6\xBC\x17\xDE\x04\x86\xA5\xC8JD\x83\xAC\xFFs\xE8\xA8\xDDb\xAC\x17\xE8\x13\x92V\x9E\x00!\x1F\xD4\x00\x92T\x15\xDE\xA4\xCA\xE9\xC1-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3",
+ },
+ "hmac-sha1" => {
+ false => "\xA8\x02\xB4-\xFBYo4F\"\xCF\xB8\x92\xF08\xAC\xE8\xECk\xECO\xE7\xF8\x01\xF8\xB0\x9E\x05\xFB\xA7\xA7\x91\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\xA8\x02\xB4\x1D\xE2%\xF2V'F\xA6\xBC\x17\xDE\x04\x86\xA5\xC8JD\x83\xAC\xFFs\xE8\xA8\xDDb\xAC\x17\xE8\x13\x92V\x9E\x00!\x1F\xD4\x00\x92T\x15\xDE\xA4\xCA\xE9\xC1yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r\x16\xF6\xFD(i'\x8A\xE9",
+ },
+ "hmac-sha1-96" => {
+ false => "\xA8\x02\xB4-\xFBYo4F\"\xCF\xB8\x92\xF08\xAC\xE8\xECk\xECO\xE7\xF8\x01\xF8\xB0\x9E\x05\xFB\xA7\xA7\x91\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\xA8\x02\xB4\x1D\xE2%\xF2V'F\xA6\xBC\x17\xDE\x04\x86\xA5\xC8JD\x83\xAC\xFFs\xE8\xA8\xDDb\xAC\x17\xE8\x13\x92V\x9E\x00!\x1F\xD4\x00\x92T\x15\xDE\xA4\xCA\xE9\xC1yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r",
+ },
+ "hmac-ripemd160" => {
+ false => "\xA8\x02\xB4-\xFBYo4F\"\xCF\xB8\x92\xF08\xAC\xE8\xECk\xECO\xE7\xF8\x01\xF8\xB0\x9E\x05\xFB\xA7\xA7\x91F\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xA8\x02\xB4\x1D\xE2%\xF2V'F\xA6\xBC\x17\xDE\x04\x86\xA5\xC8JD\x83\xAC\xFFs\xE8\xA8\xDDb\xAC\x17\xE8\x13\x92V\x9E\x00!\x1F\xD4\x00\x92T\x15\xDE\xA4\xCA\xE9\xC1\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\xA8\x02\xB4-\xFBYo4F\"\xCF\xB8\x92\xF08\xAC\xE8\xECk\xECO\xE7\xF8\x01\xF8\xB0\x9E\x05\xFB\xA7\xA7\x91F\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xA8\x02\xB4\x1D\xE2%\xF2V'F\xA6\xBC\x17\xDE\x04\x86\xA5\xC8JD\x83\xAC\xFFs\xE8\xA8\xDDb\xAC\x17\xE8\x13\x92V\x9E\x00!\x1F\xD4\x00\x92T\x15\xDE\xA4\xCA\xE9\xC1\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "none" => {
+ false => "\xA8\x02\xB4-\xFBYo4F\"\xCF\xB8\x92\xF08\xAC\xE8\xECk\xECO\xE7\xF8\x01\xF8\xB0\x9E\x05\xFB\xA7\xA7\x91",
+ :standard => "\xA8\x02\xB4\x1D\xE2%\xF2V'F\xA6\xBC\x17\xDE\x04\x86\xA5\xC8JD\x83\xAC\xFFs\xE8\xA8\xDDb\xAC\x17\xE8\x13\x92V\x9E\x00!\x1F\xD4\x00\x92T\x15\xDE\xA4\xCA\xE9\xC1",
+ },
+ },
+ "aes256-ctr" => {
+ "hmac-md5" => {
+ false => "M\x1DcA\r]\\\x95?&\xE3D[\xCC1\x9B\xE0\xAF\x96\xA8\x86Y\xBD\x16\xE5xR%u\xC9(\r\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "M\x1Dcq\x14!\xC1\xF7^B\x8A@\xDE\xE2\r\xB1\xAD\x8B\xB7\x00J\x12\xBAd\xF5`\x11B\"yg\x8F\x9F\xAB\xC8 d\xB4\xE7^w\xC4\x89\a\x17\x15\x82\n-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3\\\xA1\xD6\xC9",
+ },
+ "hmac-md5-96" => {
+ false => "M\x1DcA\r]\\\x95?&\xE3D[\xCC1\x9B\xE0\xAF\x96\xA8\x86Y\xBD\x16\xE5xR%u\xC9(\r\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "M\x1Dcq\x14!\xC1\xF7^B\x8A@\xDE\xE2\r\xB1\xAD\x8B\xB7\x00J\x12\xBAd\xF5`\x11B\"yg\x8F\x9F\xAB\xC8 d\xB4\xE7^w\xC4\x89\a\x17\x15\x82\n-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3",
+ },
+ "hmac-sha1" => {
+ false => "M\x1DcA\r]\\\x95?&\xE3D[\xCC1\x9B\xE0\xAF\x96\xA8\x86Y\xBD\x16\xE5xR%u\xC9(\r\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "M\x1Dcq\x14!\xC1\xF7^B\x8A@\xDE\xE2\r\xB1\xAD\x8B\xB7\x00J\x12\xBAd\xF5`\x11B\"yg\x8F\x9F\xAB\xC8 d\xB4\xE7^w\xC4\x89\a\x17\x15\x82\nyC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r\x16\xF6\xFD(i'\x8A\xE9",
+ },
+ "hmac-sha1-96" => {
+ false => "M\x1DcA\r]\\\x95?&\xE3D[\xCC1\x9B\xE0\xAF\x96\xA8\x86Y\xBD\x16\xE5xR%u\xC9(\r\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "M\x1Dcq\x14!\xC1\xF7^B\x8A@\xDE\xE2\r\xB1\xAD\x8B\xB7\x00J\x12\xBAd\xF5`\x11B\"yg\x8F\x9F\xAB\xC8 d\xB4\xE7^w\xC4\x89\a\x17\x15\x82\nyC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r",
+ },
+ "hmac-ripemd160" => {
+ false => "M\x1DcA\r]\\\x95?&\xE3D[\xCC1\x9B\xE0\xAF\x96\xA8\x86Y\xBD\x16\xE5xR%u\xC9(\rF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "M\x1Dcq\x14!\xC1\xF7^B\x8A@\xDE\xE2\r\xB1\xAD\x8B\xB7\x00J\x12\xBAd\xF5`\x11B\"yg\x8F\x9F\xAB\xC8 d\xB4\xE7^w\xC4\x89\a\x17\x15\x82\n\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "M\x1DcA\r]\\\x95?&\xE3D[\xCC1\x9B\xE0\xAF\x96\xA8\x86Y\xBD\x16\xE5xR%u\xC9(\rF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "M\x1Dcq\x14!\xC1\xF7^B\x8A@\xDE\xE2\r\xB1\xAD\x8B\xB7\x00J\x12\xBAd\xF5`\x11B\"yg\x8F\x9F\xAB\xC8 d\xB4\xE7^w\xC4\x89\a\x17\x15\x82\n\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "none" => {
+ false => "M\x1DcA\r]\\\x95?&\xE3D[\xCC1\x9B\xE0\xAF\x96\xA8\x86Y\xBD\x16\xE5xR%u\xC9(\r",
+ :standard => "M\x1Dcq\x14!\xC1\xF7^B\x8A@\xDE\xE2\r\xB1\xAD\x8B\xB7\x00J\x12\xBAd\xF5`\x11B\"yg\x8F\x9F\xAB\xC8 d\xB4\xE7^w\xC4\x89\a\x17\x15\x82\n",
+ },
+ },
+ "cast128-ctr" => {
+ "hmac-md5" => {
+ false => "\x10\xA0cJ6W\xC9\xC7\x02\xF8\xCD\xE31\xF9\xE7n\x0Fj\x7F\x99\x8A\f\x84\x80\x80\xE8p\x9C\x14\x83\x1C\xC7\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\x10\xA0cr7+T\xA5c\x9C\xA4\xE7\xB4\xD7\xDBDBN^1FG\x83\xF2\x90\xF03\xFBC3SE\xF7x;q\x89\xA80\xEA\xEC=g\xF1\xB9[E\xB5\x8F\xCE\xCC\b\x82\x9D\x96\xDC",
+ },
+ "hmac-md5-96" => {
+ false => "\x10\xA0cJ6W\xC9\xC7\x02\xF8\xCD\xE31\xF9\xE7n\x0Fj\x7F\x99\x8A\f\x84\x80\x80\xE8p\x9C\x14\x83\x1C\xC7\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\x10\xA0cr7+T\xA5c\x9C\xA4\xE7\xB4\xD7\xDBDBN^1FG\x83\xF2\x90\xF03\xFBC3SE\xF7x;q\x89\xA80\xEA\xEC=g\xF1\xB9[E\xB5\x8F\xCE\xCC\b",
+ },
+ "hmac-sha1" => {
+ false => "\x10\xA0cJ6W\xC9\xC7\x02\xF8\xCD\xE31\xF9\xE7n\x0Fj\x7F\x99\x8A\f\x84\x80\x80\xE8p\x9C\x14\x83\x1C\xC7\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\x10\xA0cr7+T\xA5c\x9C\xA4\xE7\xB4\xD7\xDBDBN^1FG\x83\xF2\x90\xF03\xFBC3SE\xF7x;q\x89\xA80\xEA\x897U\xB6\xE44(\x9D\x1C\x13\xFF\xFE\xDD\xC1\xABrI\x8DW\xC9",
+ },
+ "hmac-sha1-96" => {
+ false => "\x10\xA0cJ6W\xC9\xC7\x02\xF8\xCD\xE31\xF9\xE7n\x0Fj\x7F\x99\x8A\f\x84\x80\x80\xE8p\x9C\x14\x83\x1C\xC7\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\x10\xA0cr7+T\xA5c\x9C\xA4\xE7\xB4\xD7\xDBDBN^1FG\x83\xF2\x90\xF03\xFBC3SE\xF7x;q\x89\xA80\xEA\x897U\xB6\xE44(\x9D\x1C\x13\xFF\xFE",
+ },
+ "hmac-ripemd160" => {
+ false => "\x10\xA0cJ6W\xC9\xC7\x02\xF8\xCD\xE31\xF9\xE7n\x0Fj\x7F\x99\x8A\f\x84\x80\x80\xE8p\x9C\x14\x83\x1C\xC7F\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\x10\xA0cr7+T\xA5c\x9C\xA4\xE7\xB4\xD7\xDBDBN^1FG\x83\xF2\x90\xF03\xFBC3SE\xF7x;q\x89\xA80\xEA)U\xBD\x03U\xDB\x95\x91Y)\xCF\xAE\xA0\xA6\x000\xE9\x1A\xF3Y",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\x10\xA0cJ6W\xC9\xC7\x02\xF8\xCD\xE31\xF9\xE7n\x0Fj\x7F\x99\x8A\f\x84\x80\x80\xE8p\x9C\x14\x83\x1C\xC7F\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\x10\xA0cr7+T\xA5c\x9C\xA4\xE7\xB4\xD7\xDBDBN^1FG\x83\xF2\x90\xF03\xFBC3SE\xF7x;q\x89\xA80\xEA)U\xBD\x03U\xDB\x95\x91Y)\xCF\xAE\xA0\xA6\x000\xE9\x1A\xF3Y",
+ },
+ "none" => {
+ false => "\x10\xA0cJ6W\xC9\xC7\x02\xF8\xCD\xE31\xF9\xE7n\x0Fj\x7F\x99\x8A\f\x84\x80\x80\xE8p\x9C\x14\x83\x1C\xC7",
+ :standard => "\x10\xA0cr7+T\xA5c\x9C\xA4\xE7\xB4\xD7\xDBDBN^1FG\x83\xF2\x90\xF03\xFBC3SE\xF7x;q\x89\xA80\xEA",
+ },
+ },
+ "camellia128-ctr@openssh.org" => {
+ "hmac-md5" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3\\\xA1\xD6\xC9",
+ },
+ "hmac-md5-96" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3",
+ },
+ "hmac-sha1" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r\x16\xF6\xFD(i'\x8A\xE9",
+ },
+ "hmac-sha1-96" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r",
+ },
+ "hmac-ripemd160" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "none" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9",
+ },
+ },
+ "camellia192-ctr@openssh.org" => {
+ "hmac-md5" => {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBEF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBEF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3^{\xC0\xD0",
+ },
+ "none" => {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ "hmac-md5" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3\\\xA1\xD6\xC9",
+ },
+ "hmac-md5-96" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3",
+ },
+ "hmac-sha1" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r\x16\xF6\xFD(i'\x8A\xE9",
+ },
+ "hmac-sha1-96" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r",
+ },
+ "hmac-ripemd160" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xECF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xECF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "none" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93",
+ },
+ },
+ "camellia128-ctr" => {
+ "hmac-md5" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3\\\xA1\xD6\xC9",
+ },
+ "hmac-md5-96" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3",
+ },
+ "hmac-sha1" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r\x16\xF6\xFD(i'\x8A\xE9",
+ },
+ "hmac-sha1-96" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r",
+ },
+ "hmac-ripemd160" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "none" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9",
+ },
+ },
+ "camellia192-ctr" => {
+ "hmac-md5" => {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBEF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBEF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3^{\xC0\xD0",
+ },
+ "none" => {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ "hmac-md5" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94\xFB\xF3\v\xB1",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3\\\xA1\xD6\xC9",
+ },
+ "hmac-md5-96" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC\x00\x1Aw\xCA\t\xC6\xFC\xB9\xE5p\x8D\x94",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93-\xE5\b\x15\xA2#\xDEP8\xE3\xF1\xB3",
+ },
+ "hmac-sha1" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m\xBD\x05\f\x82g\xB0g\xFE",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r\x16\xF6\xFD(i'\x8A\xE9",
+ },
+ "hmac-sha1-96" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC\x04\a\x80\n\x04\x82z\xB8\x9E\xB1\xD8m",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93yC\xBA\xCC@\xC1\n\xE6$\x93\xF7\r",
+ },
+ "hmac-ripemd160" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xECF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xECF\xC3\xC7\x87\xA5\x86\xD5~\xCD(\xF8\xD9\xCB\xC5\vHI\xCAL\x8E",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93\xC44\x14\xE3q\xEE\x13\x1A\xB2\x81\e9\x8Bd\xB5>^{\xC0\xD0",
+ },
+ "none" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93",
+ },
+ },
+ "none" => {
+ "hmac-md5" => {
+ false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\212\000\032w\312\t\306\374\271\345p\215\224\373\363\v\261",
+ :standard => "\000\000\000$\tx\234bad``\340LIM*MO\317\314K\ar\030\000\000\000\000\377\377\b\030CgWO\260\212^\354=g\361\271[E\265\217\316\314\b\202\235\226\334",
+ },
+ "hmac-md5-96" => {
+ false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\212\000\032w\312\t\306\374\271\345p\215\224",
+ :standard => "\000\000\000$\tx\234bad``\340LIM*MO\317\314K\ar\030\000\000\000\000\377\377\b\030CgWO\260\212^\354=g\361\271[E\265\217\316\314\b",
+ },
+ "hmac-sha1-96" => {
+ false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\212\004\a\200\n\004\202z\270\236\261\330m",
+ :standard => "\000\000\000$\tx\234bad``\340LIM*MO\317\314K\ar\030\000\000\000\000\377\377\b\030CgWO\260\212^\2117U\266\3444(\235\034\023\377\376",
+ },
+ "hmac-sha1" => {
+ false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\212\004\a\200\n\004\202z\270\236\261\330m\275\005\f\202g\260g\376",
+ :standard => "\000\000\000$\tx\234bad``\340LIM*MO\317\314K\ar\030\000\000\000\000\377\377\b\030CgWO\260\212^\2117U\266\3444(\235\034\023\377\376\335\301\253rI\215W\311",
+ },
+ "hmac-ripemd160" => {
+ false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\212F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "\000\000\000$\tx\234bad``\340LIM*MO\317\314K\ar\030\000\000\000\000\377\377\b\030CgWO\260\212^)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\212F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "\000\000\000$\tx\234bad``\340LIM*MO\317\314K\ar\030\000\000\000\000\377\377\b\030CgWO\260\212^)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
},
"none" => {
false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\212",
@@ -344,40 +1046,641 @@
},
"rijndael-cbc@lysator.liu.se" => {
"hmac-md5" => {
- false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340#[\343\200Sb\377\265\322\003=S\255N\2654",
- :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\337\227`9L\324[bPd\253XY\205\241\310",
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340\000\032w\312\t\306\374\271\345p\215\224\373\363\v\261",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365-\345\b\025\242#\336P8\343\361\263\\\241\326\311",
},
"hmac-md5-96" => {
- false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340#[\343\200Sb\377\265\322\003=S",
- :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\337\227`9L\324[bPd\253X",
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340\000\032w\312\t\306\374\271\345p\215\224",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365-\345\b\025\242#\336P8\343\361\263",
},
"hmac-sha1" => {
- false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340\235J\004f\262\3730t\376\273\323n\260\275\202\223\214\370D\204",
- :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\314\r\224%\316I\370t\251\372]\031\322pH%\267\337r\247",
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340\004\a\200\n\004\202z\270\236\261\330m\275\005\f\202g\260g\376",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365yC\272\314@\301\n\346$\223\367\r\026\366\375(i'\212\351",
},
"hmac-sha1-96" => {
- false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340\235J\004f\262\3730t\376\273\323n",
- :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\314\r\224%\316I\370t\251\372]\031",
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340\004\a\200\n\004\202z\270\236\261\330m",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365yC\272\314@\301\n\346$\223\367\r",
+ },
+ "hmac-ripemd160" => {
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\3044\024\343q\356\023\032\262\201\e9\213d\265>^{\300\320",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\3044\024\343q\356\023\032\262\201\e9\213d\265>^{\300\320",
},
"none" => {
false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340",
:standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365",
},
},
+ "arcfour" => {
+ "hmac-md5" => {
+ false => "O\"\200JH\004\200\020Y\323\334\334\273B^\226DL\370\205V\350[>\257\361\223\270\262%\331`\000\032w\312\t\306\374\271\345p\215\224\373\363\v\261",
+ :standard => "O\"\200rIx\035r8\267\265\330>lb\274\th\331-\232\243\\L\277\351\320\337\345\225\226\342>b\350\215\253\n\002\017\354=g\361\271[E\265\217\316\314\b\202\235\226\334",
+ },
+ "hmac-md5-96" => {
+ false => "O\"\200JH\004\200\020Y\323\334\334\273B^\226DL\370\205V\350[>\257\361\223\270\262%\331`\000\032w\312\t\306\374\271\345p\215\224",
+ :standard => "O\"\200rIx\035r8\267\265\330>lb\274\th\331-\232\243\\L\277\351\320\337\345\225\226\342>b\350\215\253\n\002\017\354=g\361\271[E\265\217\316\314\b",
+ },
+ "hmac-sha1" => {
+ false => "O\"\200JH\004\200\020Y\323\334\334\273B^\226DL\370\205V\350[>\257\361\223\270\262%\331`\004\a\200\n\004\202z\270\236\261\330m\275\005\f\202g\260g\376",
+ :standard => "O\"\200rIx\035r8\267\265\330>lb\274\th\331-\232\243\\L\277\351\320\337\345\225\226\342>b\350\215\253\n\002\017\2117U\266\3444(\235\034\023\377\376\335\301\253rI\215W\311",
+ },
+ "hmac-sha1-96" => {
+ false => "O\"\200JH\004\200\020Y\323\334\334\273B^\226DL\370\205V\350[>\257\361\223\270\262%\331`\004\a\200\n\004\202z\270\236\261\330m",
+ :standard => "O\"\200rIx\035r8\267\265\330>lb\274\th\331-\232\243\\L\277\351\320\337\345\225\226\342>b\350\215\253\n\002\017\2117U\266\3444(\235\034\023\377\376",
+ },
+ "hmac-ripemd160" => {
+ false => "O\"\200JH\004\200\020Y\323\334\334\273B^\226DL\370\205V\350[>\257\361\223\270\262%\331`F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "O\"\200rIx\035r8\267\265\330>lb\274\th\331-\232\243\\L\277\351\320\337\345\225\226\342>b\350\215\253\n\002\017)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
+ },
+ "hmac-ripemd160@openssh.com" => {
+ false => "O\"\200JH\004\200\020Y\323\334\334\273B^\226DL\370\205V\350[>\257\361\223\270\262%\331`F\303\307\207\245\206\325~\315(\370\331\313\305\vHI\312L\216",
+ :standard => "O\"\200rIx\035r8\267\265\330>lb\274\th\331-\232\243\\L\277\351\320\337\345\225\226\342>b\350\215\253\n\002\017)U\275\003U\333\225\221Y)\317\256\240\246\0000\351\032\363Y",
+ },
+ "none" => {
+ false => "O\"\200JH\004\200\020Y\323\334\334\273B^\226DL\370\205V\350[>\257\361\223\270\262%\331`",
+ :standard => "O\"\200rIx\035r8\267\265\330>lb\274\th\331-\232\243\\L\277\351\320\337\345\225\226\342>b\350\215\253\n\002\017",
+ },
+ },
}
+ if defined?(OpenSSL::Digest::SHA256)
+ sha2_packets = {
+ "3des-cbc" => {
+ "hmac-sha2-256" => {
+ false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, 7{\320\316\365Wy\"c\036y\260-\275\312~\217\020U\355\001\377\225F\345\206\255\307\023N\350J",
+ :standard => "\317\222v\316\234<\310\377\310\034\346\351\020:\025{\372PDS\246\344\312J\364\301\n\262\r<\037\231Mu\031\240\255\026\362\200\367F\231v\265o\f9$\224\201\e\364+\226H\374\377=\ts\202`\026\e,\347\t\217\206t\307",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, 7{\320\316\365Wy\"c\036y\260",
+ :standard => "\317\222v\316\234<\310\377\310\034\346\351\020:\025{\372PDS\246\344\312J\364\301\n\262\r<\037\231Mu\031\240\255\026\362\200\367F\231v\265o\f9$\224\201\e",
+ },
+ "hmac-sha2-512" => {
+ false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, #/\317\000\340I\274\363_\225U*\327z\201\316c\303\275A\362\330^J\277\3005oI\272\362\352\206\370h\213\262\3109\310v\037\004\022\200]&\365\310\300\220D[\350\036\225\211\353\361\366\237\267\204\325",
+ :standard => "\317\222v\316\234<\310\377\310\034\346\351\020:\025{\372PDS\246\344\312J\364\301\n\262\r<\037\231Mu\031\240\255\026\362\200Q\3112O\223\361\216\235\022\216\0162\256\343\214\320\v\321\366/$\017]2\302\3435\217\324\245\037\301\225p\270\221c\307\302u\213b 4#\202PFI\371\267l\374\311\001\262z(\335|\334\2446\226",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\003\352\031\261k\243\200\204\301\203]!\a\306\217\201\a[^\304\317\322\264\265~\361\017\n\205\272, #/\317\000\340I\274\363_\225U*",
+ :standard => "\317\222v\316\234<\310\377\310\034\346\351\020:\025{\372PDS\246\344\312J\364\301\n\262\r<\037\231Mu\031\240\255\026\362\200Q\3112O\223\361\216\235\022\216\0162",
+ },
+ },
+ "aes128-cbc" => {
+ "hmac-sha2-256" => {
+ false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NY7{\320\316\365Wy\"c\036y\260-\275\312~\217\020U\355\001\377\225F\345\206\255\307\023N\350J",
+ :standard => "\273\367\324\032\3762\334\026\r\246\342\022\016\325\024\270.\273\005\314\036\312\211\261\037A\361\362:W\316\352K\204\216b\2124>A\265g\331\177\233dK\251\373\035\334\340M\032B\307\324\232\211m'\347k\253\371\341\326\254\356\263[\2412\302R\320\274\365\255\003",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NY7{\320\316\365Wy\"c\036y\260",
+ :standard => "\273\367\324\032\3762\334\026\r\246\342\022\016\325\024\270.\273\005\314\036\312\211\261\037A\361\362:W\316\352K\204\216b\2124>A\265g\331\177\233dK\251\373\035\334\340M\032B\307\324\232\211m",
+ },
+ "hmac-sha2-512" => {
+ false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NY#/\317\000\340I\274\363_\225U*\327z\201\316c\303\275A\362\330^J\277\3005oI\272\362\352\206\370h\213\262\3109\310v\037\004\022\200]&\365\310\300\220D[\350\036\225\211\353\361\366\237\267\204\325",
+ :standard => "\273\367\324\032\3762\334\026\r\246\342\022\016\325\024\270.\273\005\314\036\312\211\261\037A\361\362:W\316\352K\204\216b\2124>A\265g\331\177\233dK\251N\005f\275u\230\344xF\354+RSTS\360\235\004\311$cW\357o\"fy\031\321yX\tYK\347\363kd\a\022\307r\177[ \274\0164\222\300 \037\330<\264\001^\246\337\004\365\233\202\310",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\240\016\243k]0\330\253\030\320\334\261(\034E\211\230#\326\374\267\311O\211E(\234\325n\306NY#/\317\000\340I\274\363_\225U*",
+ :standard => "\273\367\324\032\3762\334\026\r\246\342\022\016\325\024\270.\273\005\314\036\312\211\261\037A\361\362:W\316\352K\204\216b\2124>A\265g\331\177\233dK\251N\005f\275u\230\344xF\354+R",
+ },
+ },
+ "aes192-cbc" => {
+ "hmac-sha2-256" => {
+ false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\0037{\320\316\365Wy\"c\036y\260-\275\312~\217\020U\355\001\377\225F\345\206\255\307\023N\350J",
+ :standard => "se\347\230\026\311\212\250yH\241\302n\364:\276\270M=H1\317\222^\362\237D\225N\354:\343\205M\006[\313$U/yZ\330\235\032\307\320D\373\035\334\340M\032B\307\324\232\211m'\347k\253\371\341\326\254\356\263[\2412\302R\320\274\365\255\003",
+ },
+ "hmac-sha2-512" => {
+ false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\003#/\317\000\340I\274\363_\225U*\327z\201\316c\303\275A\362\330^J\277\3005oI\272\362\352\206\370h\213\262\3109\310v\037\004\022\200]&\365\310\300\220D[\350\036\225\211\353\361\366\237\267\204\325",
+ :standard => "se\347\230\026\311\212\250yH\241\302n\364:\276\270M=H1\317\222^\362\237D\225N\354:\343\205M\006[\313$U/yZ\330\235\032\307\320DN\005f\275u\230\344xF\354+RSTS\360\235\004\311$cW\357o\"fy\031\321yX\tYK\347\363kd\a\022\307r\177[ \274\0164\222\300 \037\330<\264\001^\246\337\004\365\233\202\310",
+ },
+ "hmac-sha2-256-96" => {
+ false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\0037{\320\316\365Wy\"c\036y\260",
+ :standard => "se\347\230\026\311\212\250yH\241\302n\364:\276\270M=H1\317\222^\362\237D\225N\354:\343\205M\006[\313$U/yZ\330\235\032\307\320D\373\035\334\340M\032B\307\324\232\211m",
+ },
+ "hmac-sha2-512-96" => {
+ false => "P$\377\302\326\262\276\215\206\343&\257#\315>Mp\232P\345o\215\330\213\t\027\300\360\300\037\267\003#/\317\000\340I\274\363_\225U*",
+ :standard => "se\347\230\026\311\212\250yH\241\302n\364:\276\270M=H1\317\222^\362\237D\225N\354:\343\205M\006[\313$U/yZ\330\235\032\307\320DN\005f\275u\230\344xF\354+R",
+ },
+ },
+ "aes256-cbc" => {
+ "hmac-sha2-256" => {
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\3407{\320\316\365Wy\"c\036y\260-\275\312~\217\020U\355\001\377\225F\345\206\255\307\023N\350J",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\373\035\334\340M\032B\307\324\232\211m'\347k\253\371\341\326\254\356\263[\2412\302R\320\274\365\255\003",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\3407{\320\316\365Wy\"c\036y\260",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\373\035\334\340M\032B\307\324\232\211m",
+ },
+ "hmac-sha2-512" => {
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340#/\317\000\340I\274\363_\225U*\327z\201\316c\303\275A\362\330^J\277\3005oI\272\362\352\206\370h\213\262\3109\310v\037\004\022\200]&\365\310\300\220D[\350\036\225\211\353\361\366\237\267\204\325",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365N\005f\275u\230\344xF\354+RSTS\360\235\004\311$cW\357o\"fy\031\321yX\tYK\347\363kd\a\022\307r\177[ \274\0164\222\300 \037\330<\264\001^\246\337\004\365\233\202\310",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340#/\317\000\340I\274\363_\225U*",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365N\005f\275u\230\344xF\354+R",
+ },
+ },
+ "blowfish-cbc" => {
+ "hmac-sha2-256" => {
+ false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)7{\320\316\365Wy\"c\036y\260-\275\312~\217\020U\355\001\377\225F\345\206\255\307\023N\350J",
+ :standard => "U\257\231e\347\274\bh\016X\232h\334\v\005\316e1G$-\367##\256$rW\000\210\335_\360\f\000\205#\370\201\006\367F\231v\265o\f9$\224\201\e\364+\226H\374\377=\ts\202`\026\e,\347\t\217\206t\307",
+ },
+ "hmac-sha2-256-96" => {
+ false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)7{\320\316\365Wy\"c\036y\260",
+ :standard => "U\257\231e\347\274\bh\016X\232h\334\v\005\316e1G$-\367##\256$rW\000\210\335_\360\f\000\205#\370\201\006\367F\231v\265o\f9$\224\201\e",
+ },
+ "hmac-sha2-512" => {
+ false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)#/\317\000\340I\274\363_\225U*\327z\201\316c\303\275A\362\330^J\277\3005oI\272\362\352\206\370h\213\262\3109\310v\037\004\022\200]&\365\310\300\220D[\350\036\225\211\353\361\366\237\267\204\325",
+ :standard => "U\257\231e\347\274\bh\016X\232h\334\v\005\316e1G$-\367##\256$rW\000\210\335_\360\f\000\205#\370\201\006Q\3112O\223\361\216\235\022\216\0162\256\343\214\320\v\321\366/$\017]2\302\3435\217\324\245\037\301\225p\270\221c\307\302u\213b 4#\202PFI\371\267l\374\311\001\262z(\335|\334\2446\226",
+ },
+ "hmac-sha2-512-96" => {
+ false => "vT\353\203\247\206L\255e\371\001 6B/\234g\332\371\224l\227\257\346\373E\237C2\212u)#/\317\000\340I\274\363_\225U*",
+ :standard => "U\257\231e\347\274\bh\016X\232h\334\v\005\316e1G$-\367##\256$rW\000\210\335_\360\f\000\205#\370\201\006Q\3112O\223\361\216\235\022\216\0162",
+ },
+ },
+ "cast128-cbc" => {
+ "hmac-sha2-256" => {
+ false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\3767{\320\316\365Wy\"c\036y\260-\275\312~\217\020U\355\001\377\225F\345\206\255\307\023N\350J",
+ :standard => "\375i\253\004\311E\2011)\220$\251A\245\f(\371\263\314\242\353\260\272\367\276\"\031\224$\244\311W\307Oe\224\0017\336\325\367F\231v\265o\f9$\224\201\e\364+\226H\374\377=\ts\202`\026\e,\347\t\217\206t\307",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\3767{\320\316\365Wy\"c\036y\260",
+ :standard => "\375i\253\004\311E\2011)\220$\251A\245\f(\371\263\314\242\353\260\272\367\276\"\031\224$\244\311W\307Oe\224\0017\336\325\367F\231v\265o\f9$\224\201\e",
+ },
+ "hmac-sha2-512" => {
+ false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\376#/\317\000\340I\274\363_\225U*\327z\201\316c\303\275A\362\330^J\277\3005oI\272\362\352\206\370h\213\262\3109\310v\037\004\022\200]&\365\310\300\220D[\350\036\225\211\353\361\366\237\267\204\325",
+ :standard => "\375i\253\004\311E\2011)\220$\251A\245\f(\371\263\314\242\353\260\272\367\276\"\031\224$\244\311W\307Oe\224\0017\336\325Q\3112O\223\361\216\235\022\216\0162\256\343\214\320\v\321\366/$\017]2\302\3435\217\324\245\037\301\225p\270\221c\307\302u\213b 4#\202PFI\371\267l\374\311\001\262z(\335|\334\2446\226",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\361\026\313!\31235|w~\n\261\257\277\e\277b\246b\342\333\eE\021N\345\343m\314\272\315\376#/\317\000\340I\274\363_\225U*",
+ :standard => "\375i\253\004\311E\2011)\220$\251A\245\f(\371\263\314\242\353\260\272\367\276\"\031\224$\244\311W\307Oe\224\0017\336\325Q\3112O\223\361\216\235\022\216\0162",
+ },
+ },
+ "idea-cbc" => {
+ "hmac-sha2-256" => {
+ false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 H7{\320\316\365Wy\"c\036y\260-\275\312~\217\020U\355\001\377\225F\345\206\255\307\023N\350J",
+ :standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317\367F\231v\265o\f9$\224\201\e\364+\226H\374\377=\ts\202`\026\e,\347\t\217\206t\307",
+ },
+ "hmac-sha2-512" => {
+ false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 H#/\317\000\340I\274\363_\225U*\327z\201\316c\303\275A\362\330^J\277\3005oI\272\362\352\206\370h\213\262\3109\310v\037\004\022\200]&\365\310\300\220D[\350\036\225\211\353\361\366\237\267\204\325",
+ :standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317Q\3112O\223\361\216\235\022\216\0162\256\343\214\320\v\321\366/$\017]2\302\3435\217\324\245\037\301\225p\270\221c\307\302u\213b 4#\202PFI\371\267l\374\311\001\262z(\335|\334\2446\226",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 H7{\320\316\365Wy\"c\036y\260",
+ :standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317\367F\231v\265o\f9$\224\201\e",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\342\255\202$\273\201\025#\245\2341F\263\005@{\000<\266&s\016\251NH=J\322/\220 H#/\317\000\340I\274\363_\225U*",
+ :standard => "F\3048\360\357\265\215I\021)\a\254/\315%\354M\004\330\006\356\vFr\250K\225\223x\277+Q)\022\327\311K\025\322\317Q\3112O\223\361\216\235\022\216\0162",
+ },
+ },
+ "arcfour128" => {
+ "hmac-sha2-256" => {
+ false => "e_\204\037\366\363>\024\263q\025\334\354AO.\026t\231nvD\030\226\234\263\257\335:\001\300\2557{\320\316\365Wy\"c\036y\260-\275\312~\217\020U\355\001\377\225F\345\206\255\307\023N\350J",
+ :standard => "e_\204'\367\217\243v\322\025|\330ios\004[P\270\306\272\017\037\344\214\253\354\272m\261\217/jW'V\277\341U\224\367F\231v\265o\f9$\224\201\e\364+\226H\374\377=\ts\202`\026\e,\347\t\217\206t\307",
+ },
+ "hmac-sha2-512" => {
+ false => "e_\204\037\366\363>\024\263q\025\334\354AO.\026t\231nvD\030\226\234\263\257\335:\001\300\255#/\317\000\340I\274\363_\225U*\327z\201\316c\303\275A\362\330^J\277\3005oI\272\362\352\206\370h\213\262\3109\310v\037\004\022\200]&\365\310\300\220D[\350\036\225\211\353\361\366\237\267\204\325",
+ :standard => "e_\204'\367\217\243v\322\025|\330ios\004[P\270\306\272\017\037\344\214\253\354\272m\261\217/jW'V\277\341U\224Q\3112O\223\361\216\235\022\216\0162\256\343\214\320\v\321\366/$\017]2\302\3435\217\324\245\037\301\225p\270\221c\307\302u\213b 4#\202PFI\371\267l\374\311\001\262z(\335|\334\2446\226",
+ },
+ "hmac-sha2-256-96" => {
+ false => "e_\204\037\366\363>\024\263q\025\334\354AO.\026t\231nvD\030\226\234\263\257\335:\001\300\2557{\320\316\365Wy\"c\036y\260",
+ :standard => "e_\204'\367\217\243v\322\025|\330ios\004[P\270\306\272\017\037\344\214\253\354\272m\261\217/jW'V\277\341U\224\367F\231v\265o\f9$\224\201\e",
+ },
+ "hmac-sha2-512-96" => {
+ false => "e_\204\037\366\363>\024\263q\025\334\354AO.\026t\231nvD\030\226\234\263\257\335:\001\300\255#/\317\000\340I\274\363_\225U*",
+ :standard => "e_\204'\367\217\243v\322\025|\330ios\004[P\270\306\272\017\037\344\214\253\354\272m\261\217/jW'V\277\341U\224Q\3112O\223\361\216\235\022\216\0162",
+ },
+ },
+ "arcfour256" => {
+ "hmac-sha2-256" => {
+ false => "B\374\256V\035b\337\215\305h\031bE\271\312\361\017T+\302\024x\3016\315g%\032\331\004fr7{\320\316\365Wy\"c\036y\260-\275\312~\217\020U\355\001\377\225F\345\206\255\307\023N\350J",
+ :standard => "B\374\256n\034\036B\357\244\fpf\300\227\366\333Bp\nj\3303\306D\335\177f}\216\264)\360\325jU^M\357$\221\367F\231v\265o\f9$\224\201\e\364+\226H\374\377=\ts\202`\026\e,\347\t\217\206t\307",
+ },
+ "hmac-sha2-512" => {
+ false => "B\374\256V\035b\337\215\305h\031bE\271\312\361\017T+\302\024x\3016\315g%\032\331\004fr#/\317\000\340I\274\363_\225U*\327z\201\316c\303\275A\362\330^J\277\3005oI\272\362\352\206\370h\213\262\3109\310v\037\004\022\200]&\365\310\300\220D[\350\036\225\211\353\361\366\237\267\204\325",
+ :standard => "B\374\256n\034\036B\357\244\fpf\300\227\366\333Bp\nj\3303\306D\335\177f}\216\264)\360\325jU^M\357$\221Q\3112O\223\361\216\235\022\216\0162\256\343\214\320\v\321\366/$\017]2\302\3435\217\324\245\037\301\225p\270\221c\307\302u\213b 4#\202PFI\371\267l\374\311\001\262z(\335|\334\2446\226",
+ },
+ "hmac-sha2-256-96" => {
+ false => "B\374\256V\035b\337\215\305h\031bE\271\312\361\017T+\302\024x\3016\315g%\032\331\004fr7{\320\316\365Wy\"c\036y\260",
+ :standard => "B\374\256n\034\036B\357\244\fpf\300\227\366\333Bp\nj\3303\306D\335\177f}\216\264)\360\325jU^M\357$\221\367F\231v\265o\f9$\224\201\e",
+ },
+ "hmac-sha2-512-96" => {
+ false => "B\374\256V\035b\337\215\305h\031bE\271\312\361\017T+\302\024x\3016\315g%\032\331\004fr#/\317\000\340I\274\363_\225U*",
+ :standard => "B\374\256n\034\036B\357\244\fpf\300\227\366\333Bp\nj\3303\306D\335\177f}\216\264)\360\325jU^M\357$\221Q\3112O\223\361\216\235\022\216\0162",
+ },
+ },
+ "arcfour512" => {
+ "hmac-sha2-256" => {
+ false => "\n{\275\177Yw\307\f\277\221\247'\0318\237\223cR\340\361\356\017\357\235\342\374\005wL\267\330D7{\320\316\365Wy\"c\036y\260-\275\312~\217\020U\355\001\377\225F\345\206\255\307\023N\350J",
+ :standard => "\n{\275GX\vZn\336\365\316#\234\026\243\271.v\301Y\"D\350\357\362\344F\020\e\a\227\306\366\025:\246\2349\233\313\367F\231v\265o\f9$\224\201\e\364+\226H\374\377=\ts\202`\026\e,\347\t\217\206t\307",
+ },
+ "hmac-sha2-512" => {
+ false => "\n{\275\177Yw\307\f\277\221\247'\0318\237\223cR\340\361\356\017\357\235\342\374\005wL\267\330D#/\317\000\340I\274\363_\225U*\327z\201\316c\303\275A\362\330^J\277\3005oI\272\362\352\206\370h\213\262\3109\310v\037\004\022\200]&\365\310\300\220D[\350\036\225\211\353\361\366\237\267\204\325",
+ :standard => "\n{\275GX\vZn\336\365\316#\234\026\243\271.v\301Y\"D\350\357\362\344F\020\e\a\227\306\366\025:\246\2349\233\313Q\3112O\223\361\216\235\022\216\0162\256\343\214\320\v\321\366/$\017]2\302\3435\217\324\245\037\301\225p\270\221c\307\302u\213b 4#\202PFI\371\267l\374\311\001\262z(\335|\334\2446\226",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\n{\275\177Yw\307\f\277\221\247'\0318\237\223cR\340\361\356\017\357\235\342\374\005wL\267\330D7{\320\316\365Wy\"c\036y\260",
+ :standard => "\n{\275GX\vZn\336\365\316#\234\026\243\271.v\301Y\"D\350\357\362\344F\020\e\a\227\306\366\025:\246\2349\233\313\367F\231v\265o\f9$\224\201\e",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\n{\275\177Yw\307\f\277\221\247'\0318\237\223cR\340\361\356\017\357\235\342\374\005wL\267\330D#/\317\000\340I\274\363_\225U*",
+ :standard => "\n{\275GX\vZn\336\365\316#\234\026\243\271.v\301Y\"D\350\357\362\344F\020\e\a\227\306\366\025:\246\2349\233\313Q\3112O\223\361\216\235\022\216\0162",
+ },
+ },
+ "arcfour" => {
+ "hmac-sha2-256" => {
+ false => "O\"\200JH\004\200\020Y\323\334\334\273B^\226DL\370\205V\350[>\257\361\223\270\262%\331`7{\320\316\365Wy\"c\036y\260-\275\312~\217\020U\355\001\377\225F\345\206\255\307\023N\350J",
+ :standard => "O\"\200rIx\035r8\267\265\330>lb\274\th\331-\232\243\\L\277\351\320\337\345\225\226\342>b\350\215\253\n\002\017\367F\231v\265o\f9$\224\201\e\364+\226H\374\377=\ts\202`\026\e,\347\t\217\206t\307",
+ },
+ "hmac-sha2-512" => {
+ false => "O\"\200JH\004\200\020Y\323\334\334\273B^\226DL\370\205V\350[>\257\361\223\270\262%\331`#/\317\000\340I\274\363_\225U*\327z\201\316c\303\275A\362\330^J\277\3005oI\272\362\352\206\370h\213\262\3109\310v\037\004\022\200]&\365\310\300\220D[\350\036\225\211\353\361\366\237\267\204\325",
+ :standard => "O\"\200rIx\035r8\267\265\330>lb\274\th\331-\232\243\\L\277\351\320\337\345\225\226\342>b\350\215\253\n\002\017Q\3112O\223\361\216\235\022\216\0162\256\343\214\320\v\321\366/$\017]2\302\3435\217\324\245\037\301\225p\270\221c\307\302u\213b 4#\202PFI\371\267l\374\311\001\262z(\335|\334\2446\226",
+ },
+ "hmac-sha2-256-96" => {
+ false => "O\"\200JH\004\200\020Y\323\334\334\273B^\226DL\370\205V\350[>\257\361\223\270\262%\331`7{\320\316\365Wy\"c\036y\260",
+ :standard => "O\"\200rIx\035r8\267\265\330>lb\274\th\331-\232\243\\L\277\351\320\337\345\225\226\342>b\350\215\253\n\002\017\367F\231v\265o\f9$\224\201\e",
+ },
+ "hmac-sha2-512-96" => {
+ false => "O\"\200JH\004\200\020Y\323\334\334\273B^\226DL\370\205V\350[>\257\361\223\270\262%\331`#/\317\000\340I\274\363_\225U*",
+ :standard => "O\"\200rIx\035r8\267\265\330>lb\274\th\331-\232\243\\L\277\351\320\337\345\225\226\342>b\350\215\253\n\002\017Q\3112O\223\361\216\235\022\216\0162",
+ },
+ },
+ "camellia128-cbc@openssh.org" => {
+ "hmac-sha2-256" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m'\xE7k\xAB\xF9\xE1\xD6\xAC\xEE\xB3[\xA12\xC2R\xD0\xBC\xF5\xAD\x03",
+ },
+ "hmac-sha2-256-96" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m",
+ },
+ "hmac-sha2-512" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13N\x05f\xBDu\x98\xE4xF\xEC+RSTS\xF0\x9D\x04\xC9$cW\xEFo\"fy\x19\xD1yX\tYK\xE7\xF3kd\a\x12\xC7r\x7F[ \xBC\x0E4\x92\xC0 \x1F\xD8<\xB4\x01^\xA6\xDF\x04\xF5\x9B\x82\xC8",
+ },
+ "hmac-sha2-512-96" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13N\x05f\xBDu\x98\xE4xF\xEC+R",
+ },
+ },
+ "camellia192-cbc@openssh.org" => {
+ "hmac-sha2-256" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m'\xE7k\xAB\xF9\xE1\xD6\xAC\xEE\xB3[\xA12\xC2R\xD0\xBC\xF5\xAD\x03",
+ },
+ "hmac-sha2-256-96" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m",
+ },
+ "hmac-sha2-512" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12N\x05f\xBDu\x98\xE4xF\xEC+RSTS\xF0\x9D\x04\xC9$cW\xEFo\"fy\x19\xD1yX\tYK\xE7\xF3kd\a\x12\xC7r\x7F[ \xBC\x0E4\x92\xC0 \x1F\xD8<\xB4\x01^\xA6\xDF\x04\xF5\x9B\x82\xC8",
+ },
+ "hmac-sha2-512-96" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12N\x05f\xBDu\x98\xE4xF\xEC+R",
+ },
+ },
+ "camellia256-cbc@openssh.org" => {
+ "hmac-sha2-256" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFi\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m'\xE7k\xAB\xF9\xE1\xD6\xAC\xEE\xB3[\xA12\xC2R\xD0\xBC\xF5\xAD\x03",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFi\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m",
+ },
+ "hmac-sha2-512" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFiN\x05f\xBDu\x98\xE4xF\xEC+RSTS\xF0\x9D\x04\xC9$cW\xEFo\"fy\x19\xD1yX\tYK\xE7\xF3kd\a\x12\xC7r\x7F[ \xBC\x0E4\x92\xC0 \x1F\xD8<\xB4\x01^\xA6\xDF\x04\xF5\x9B\x82\xC8",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFiN\x05f\xBDu\x98\xE4xF\xEC+R",
+ },
+ },
+ "camellia128-cbc" => {
+ "hmac-sha2-256" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m'\xE7k\xAB\xF9\xE1\xD6\xAC\xEE\xB3[\xA12\xC2R\xD0\xBC\xF5\xAD\x03",
+ },
+ "hmac-sha2-256-96" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m",
+ },
+ "hmac-sha2-512" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13N\x05f\xBDu\x98\xE4xF\xEC+RSTS\xF0\x9D\x04\xC9$cW\xEFo\"fy\x19\xD1yX\tYK\xE7\xF3kd\a\x12\xC7r\x7F[ \xBC\x0E4\x92\xC0 \x1F\xD8<\xB4\x01^\xA6\xDF\x04\xF5\x9B\x82\xC8",
+ },
+ "hmac-sha2-512-96" => {
+ false => "vO\xD4Mst\xD2 } _\xE3e\xC4\x8A\xAA\xCD\x9E*\xE2\xA5\xC0\xED\xBB\xD5\x99\x12 ^2\xC3\x9D#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\x1Du9\xC7\x12\xA4\x9B\r\b\x19e&\x04e\xCE\rp\xE8=\x87h\xBE2\xE0\xAE\x90\xFF\xB22az\x17\xA4IO7}\xE3h2Q\xB8S\x18+&\xFE\x13N\x05f\xBDu\x98\xE4xF\xEC+R",
+ },
+ },
+ "camellia192-cbc" => {
+ "hmac-sha2-256" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m'\xE7k\xAB\xF9\xE1\xD6\xAC\xEE\xB3[\xA12\xC2R\xD0\xBC\xF5\xAD\x03",
+ },
+ "hmac-sha2-256-96" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m",
+ },
+ "hmac-sha2-512" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12N\x05f\xBDu\x98\xE4xF\xEC+RSTS\xF0\x9D\x04\xC9$cW\xEFo\"fy\x19\xD1yX\tYK\xE7\xF3kd\a\x12\xC7r\x7F[ \xBC\x0E4\x92\xC0 \x1F\xD8<\xB4\x01^\xA6\xDF\x04\xF5\x9B\x82\xC8",
+ },
+ "hmac-sha2-512-96" => {
+ false => "Nnl\x00\xD2\xBA\x89j-(\xDD\xF4\\\x19\xF4\xB7\x16,\x90\xEA,\xE26\x00I\xF9\xB5Z\x060\x83E#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\x8Cm\x02.\x18\xFA\x87\x7F\x18a\xA8\xAC \x82u\xC7]\xE6rs/\xB3\xF5.>Aw\x96\xEF\xADLO\xDE[\x02\x14k\xCEn\x06\xF6\xBD^\"4';\x12N\x05f\xBDu\x98\xE4xF\xEC+R",
+ },
+ },
+ "camellia256-cbc" => {
+ "hmac-sha2-256" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFi\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m'\xE7k\xAB\xF9\xE1\xD6\xAC\xEE\xB3[\xA12\xC2R\xD0\xBC\xF5\xAD\x03",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFi\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m",
+ },
+ "hmac-sha2-512" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFiN\x05f\xBDu\x98\xE4xF\xEC+RSTS\xF0\x9D\x04\xC9$cW\xEFo\"fy\x19\xD1yX\tYK\xE7\xF3kd\a\x12\xC7r\x7F[ \xBC\x0E4\x92\xC0 \x1F\xD8<\xB4\x01^\xA6\xDF\x04\xF5\x9B\x82\xC8",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\xE9\xAB&\x85*\x8B\x9C\xFF\xC9\xD2\x91\xE7\e\xE7P]\xD7\t\xA0\x99\a\xCD\x83K\x161\xA4\xBD\xCE\x82y|#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\x9D\x87\e\x99\x80mG\ex-\xA1\xEFA\xBB\xBD+!\xF9s\xC1\xBA_\xA8\xE0\x82\xBEX\xA6\xE8\x85\x1E\xBA\xAFY\x0E\xAC\xCB\xE1\xBF\xD1\xFD\xC3X\x8A\xF1qFiN\x05f\xBDu\x98\xE4xF\xEC+R",
+ },
+ },
+ "3des-ctr" => {
+ "hmac-sha2-256" => {
+ false => "\xED#\x86\xD5\xE1mP\v\f\xB9\xC1\xE6\xFD\xA0~,\xD3\x13\x12\x8Cp\xD4F\x92\xCB\xB6R>\xFA]\x9B\xB17{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\xED#\x86\xED\xE0\x11\xCDim\xDD\xA8\xE2x\x8EB\x06\x9E73$\xBC\x9FA\xE0\xDB\xAE\x11Y\xAD\xED\xD43\x86N\x89\xFE\x14V\x91B\xF7F\x99v\xB5o\f9$\x94\x81\e\xF4+\x96H\xFC\xFF=\ts\x82`\x16\e,\xE7\t\x8F\x86t\xC7",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\xED#\x86\xD5\xE1mP\v\f\xB9\xC1\xE6\xFD\xA0~,\xD3\x13\x12\x8Cp\xD4F\x92\xCB\xB6R>\xFA]\x9B\xB17{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\xED#\x86\xED\xE0\x11\xCDim\xDD\xA8\xE2x\x8EB\x06\x9E73$\xBC\x9FA\xE0\xDB\xAE\x11Y\xAD\xED\xD43\x86N\x89\xFE\x14V\x91B\xF7F\x99v\xB5o\f9$\x94\x81\e",
+ },
+ "hmac-sha2-512" => {
+ false => "\xED#\x86\xD5\xE1mP\v\f\xB9\xC1\xE6\xFD\xA0~,\xD3\x13\x12\x8Cp\xD4F\x92\xCB\xB6R>\xFA]\x9B\xB1#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\xED#\x86\xED\xE0\x11\xCDim\xDD\xA8\xE2x\x8EB\x06\x9E73$\xBC\x9FA\xE0\xDB\xAE\x11Y\xAD\xED\xD43\x86N\x89\xFE\x14V\x91BQ\xC92O\x93\xF1\x8E\x9D\x12\x8E\x0E2\xAE\xE3\x8C\xD0\v\xD1\xF6/$\x0F]2\xC2\xE35\x8F\xD4\xA5\x1F\xC1\x95p\xB8\x91c\xC7\xC2u\x8Bb 4#\x82PFI\xF9\xB7l\xFC\xC9\x01\xB2z(\xDD|\xDC\xA46\x96",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\xED#\x86\xD5\xE1mP\v\f\xB9\xC1\xE6\xFD\xA0~,\xD3\x13\x12\x8Cp\xD4F\x92\xCB\xB6R>\xFA]\x9B\xB1#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\xED#\x86\xED\xE0\x11\xCDim\xDD\xA8\xE2x\x8EB\x06\x9E73$\xBC\x9FA\xE0\xDB\xAE\x11Y\xAD\xED\xD43\x86N\x89\xFE\x14V\x91BQ\xC92O\x93\xF1\x8E\x9D\x12\x8E\x0E2",
+ },
+ },
+ "blowfish-ctr" => {
+ "hmac-sha2-256" => {
+ false => "\xF7gk6\xB8\xACK\x1D\xC4Ls\xB0{\x0F\xC7\xC4M\xC5>\xF6G8\xD4\xBCu\x152FoJ\xB0\xC07{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\xF7gk\x0E\xB9\xD0\xD6\x7F\xA5(\x1A\xB4\xFE!\xFB\xEE\x00\xE1\x1F^\x8Bs\xD3\xCEe\rq!8\xFA\xFFB\r\xE9\xFC\xF6\xCA\xBC\x03\xA9\xF7F\x99v\xB5o\f9$\x94\x81\e\xF4+\x96H\xFC\xFF=\ts\x82`\x16\e,\xE7\t\x8F\x86t\xC7",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\xF7gk6\xB8\xACK\x1D\xC4Ls\xB0{\x0F\xC7\xC4M\xC5>\xF6G8\xD4\xBCu\x152FoJ\xB0\xC07{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\xF7gk\x0E\xB9\xD0\xD6\x7F\xA5(\x1A\xB4\xFE!\xFB\xEE\x00\xE1\x1F^\x8Bs\xD3\xCEe\rq!8\xFA\xFFB\r\xE9\xFC\xF6\xCA\xBC\x03\xA9\xF7F\x99v\xB5o\f9$\x94\x81\e",
+ },
+ "hmac-sha2-512" => {
+ false => "\xF7gk6\xB8\xACK\x1D\xC4Ls\xB0{\x0F\xC7\xC4M\xC5>\xF6G8\xD4\xBCu\x152FoJ\xB0\xC0#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\xF7gk\x0E\xB9\xD0\xD6\x7F\xA5(\x1A\xB4\xFE!\xFB\xEE\x00\xE1\x1F^\x8Bs\xD3\xCEe\rq!8\xFA\xFFB\r\xE9\xFC\xF6\xCA\xBC\x03\xA9Q\xC92O\x93\xF1\x8E\x9D\x12\x8E\x0E2\xAE\xE3\x8C\xD0\v\xD1\xF6/$\x0F]2\xC2\xE35\x8F\xD4\xA5\x1F\xC1\x95p\xB8\x91c\xC7\xC2u\x8Bb 4#\x82PFI\xF9\xB7l\xFC\xC9\x01\xB2z(\xDD|\xDC\xA46\x96",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\xF7gk6\xB8\xACK\x1D\xC4Ls\xB0{\x0F\xC7\xC4M\xC5>\xF6G8\xD4\xBCu\x152FoJ\xB0\xC0#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\xF7gk\x0E\xB9\xD0\xD6\x7F\xA5(\x1A\xB4\xFE!\xFB\xEE\x00\xE1\x1F^\x8Bs\xD3\xCEe\rq!8\xFA\xFFB\r\xE9\xFC\xF6\xCA\xBC\x03\xA9Q\xC92O\x93\xF1\x8E\x9D\x12\x8E\x0E2",
+ },
+ },
+ "aes128-ctr" => {
+ "hmac-sha2-256" => {
+ false => "\xD6\x98\xC1n+6\xCA`s2\x06\xAA\x80\xFA\xF3\xF6\xCA\xF9\xC8[BB\xDC\x9F\xDC$\x88*\xA7\x00\x8E\xFD7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\xD6\x98\xC1^2JW\x02\x12Vo\xAE\x05\xD4\xCF\xDC\x87\xDD\xE9\xF3\x8E\t\xDB\xED\xCC<\xCBM\xF0\xB0\xC1\x7F\xD7\x17\x931\xBC~\r\xF2\x87\xB89\x9B\x8B\xB3\x8E\x15\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m'\xE7k\xAB\xF9\xE1\xD6\xAC\xEE\xB3[\xA12\xC2R\xD0\xBC\xF5\xAD\x03",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\xD6\x98\xC1n+6\xCA`s2\x06\xAA\x80\xFA\xF3\xF6\xCA\xF9\xC8[BB\xDC\x9F\xDC$\x88*\xA7\x00\x8E\xFD7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\xD6\x98\xC1^2JW\x02\x12Vo\xAE\x05\xD4\xCF\xDC\x87\xDD\xE9\xF3\x8E\t\xDB\xED\xCC<\xCBM\xF0\xB0\xC1\x7F\xD7\x17\x931\xBC~\r\xF2\x87\xB89\x9B\x8B\xB3\x8E\x15\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m",
+ },
+ "hmac-sha2-512" => {
+ false => "\xD6\x98\xC1n+6\xCA`s2\x06\xAA\x80\xFA\xF3\xF6\xCA\xF9\xC8[BB\xDC\x9F\xDC$\x88*\xA7\x00\x8E\xFD#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\xD6\x98\xC1^2JW\x02\x12Vo\xAE\x05\xD4\xCF\xDC\x87\xDD\xE9\xF3\x8E\t\xDB\xED\xCC<\xCBM\xF0\xB0\xC1\x7F\xD7\x17\x931\xBC~\r\xF2\x87\xB89\x9B\x8B\xB3\x8E\x15N\x05f\xBDu\x98\xE4xF\xEC+RSTS\xF0\x9D\x04\xC9$cW\xEFo\"fy\x19\xD1yX\tYK\xE7\xF3kd\a\x12\xC7r\x7F[ \xBC\x0E4\x92\xC0 \x1F\xD8<\xB4\x01^\xA6\xDF\x04\xF5\x9B\x82\xC8",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\xD6\x98\xC1n+6\xCA`s2\x06\xAA\x80\xFA\xF3\xF6\xCA\xF9\xC8[BB\xDC\x9F\xDC$\x88*\xA7\x00\x8E\xFD#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\xD6\x98\xC1^2JW\x02\x12Vo\xAE\x05\xD4\xCF\xDC\x87\xDD\xE9\xF3\x8E\t\xDB\xED\xCC<\xCBM\xF0\xB0\xC1\x7F\xD7\x17\x931\xBC~\r\xF2\x87\xB89\x9B\x8B\xB3\x8E\x15N\x05f\xBDu\x98\xE4xF\xEC+R",
+ },
+ },
+ "aes192-ctr" => {
+ "hmac-sha2-256" => {
+ false => "\xA8\x02\xB4-\xFBYo4F\"\xCF\xB8\x92\xF08\xAC\xE8\xECk\xECO\xE7\xF8\x01\xF8\xB0\x9E\x05\xFB\xA7\xA7\x917{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\xA8\x02\xB4\x1D\xE2%\xF2V'F\xA6\xBC\x17\xDE\x04\x86\xA5\xC8JD\x83\xAC\xFFs\xE8\xA8\xDDb\xAC\x17\xE8\x13\x92V\x9E\x00!\x1F\xD4\x00\x92T\x15\xDE\xA4\xCA\xE9\xC1\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m'\xE7k\xAB\xF9\xE1\xD6\xAC\xEE\xB3[\xA12\xC2R\xD0\xBC\xF5\xAD\x03",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\xA8\x02\xB4-\xFBYo4F\"\xCF\xB8\x92\xF08\xAC\xE8\xECk\xECO\xE7\xF8\x01\xF8\xB0\x9E\x05\xFB\xA7\xA7\x917{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\xA8\x02\xB4\x1D\xE2%\xF2V'F\xA6\xBC\x17\xDE\x04\x86\xA5\xC8JD\x83\xAC\xFFs\xE8\xA8\xDDb\xAC\x17\xE8\x13\x92V\x9E\x00!\x1F\xD4\x00\x92T\x15\xDE\xA4\xCA\xE9\xC1\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m",
+ },
+ "hmac-sha2-512" => {
+ false => "\xA8\x02\xB4-\xFBYo4F\"\xCF\xB8\x92\xF08\xAC\xE8\xECk\xECO\xE7\xF8\x01\xF8\xB0\x9E\x05\xFB\xA7\xA7\x91#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\xA8\x02\xB4\x1D\xE2%\xF2V'F\xA6\xBC\x17\xDE\x04\x86\xA5\xC8JD\x83\xAC\xFFs\xE8\xA8\xDDb\xAC\x17\xE8\x13\x92V\x9E\x00!\x1F\xD4\x00\x92T\x15\xDE\xA4\xCA\xE9\xC1N\x05f\xBDu\x98\xE4xF\xEC+RSTS\xF0\x9D\x04\xC9$cW\xEFo\"fy\x19\xD1yX\tYK\xE7\xF3kd\a\x12\xC7r\x7F[ \xBC\x0E4\x92\xC0 \x1F\xD8<\xB4\x01^\xA6\xDF\x04\xF5\x9B\x82\xC8",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\xA8\x02\xB4-\xFBYo4F\"\xCF\xB8\x92\xF08\xAC\xE8\xECk\xECO\xE7\xF8\x01\xF8\xB0\x9E\x05\xFB\xA7\xA7\x91#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\xA8\x02\xB4\x1D\xE2%\xF2V'F\xA6\xBC\x17\xDE\x04\x86\xA5\xC8JD\x83\xAC\xFFs\xE8\xA8\xDDb\xAC\x17\xE8\x13\x92V\x9E\x00!\x1F\xD4\x00\x92T\x15\xDE\xA4\xCA\xE9\xC1N\x05f\xBDu\x98\xE4xF\xEC+R",
+ },
+ },
+ "aes256-ctr" => {
+ "hmac-sha2-256" => {
+ false => "M\x1DcA\r]\\\x95?&\xE3D[\xCC1\x9B\xE0\xAF\x96\xA8\x86Y\xBD\x16\xE5xR%u\xC9(\r7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "M\x1Dcq\x14!\xC1\xF7^B\x8A@\xDE\xE2\r\xB1\xAD\x8B\xB7\x00J\x12\xBAd\xF5`\x11B\"yg\x8F\x9F\xAB\xC8 d\xB4\xE7^w\xC4\x89\a\x17\x15\x82\n\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m'\xE7k\xAB\xF9\xE1\xD6\xAC\xEE\xB3[\xA12\xC2R\xD0\xBC\xF5\xAD\x03",
+ },
+ "hmac-sha2-256-96" => {
+ false => "M\x1DcA\r]\\\x95?&\xE3D[\xCC1\x9B\xE0\xAF\x96\xA8\x86Y\xBD\x16\xE5xR%u\xC9(\r7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "M\x1Dcq\x14!\xC1\xF7^B\x8A@\xDE\xE2\r\xB1\xAD\x8B\xB7\x00J\x12\xBAd\xF5`\x11B\"yg\x8F\x9F\xAB\xC8 d\xB4\xE7^w\xC4\x89\a\x17\x15\x82\n\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m",
+ },
+ "hmac-sha2-512" => {
+ false => "M\x1DcA\r]\\\x95?&\xE3D[\xCC1\x9B\xE0\xAF\x96\xA8\x86Y\xBD\x16\xE5xR%u\xC9(\r#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "M\x1Dcq\x14!\xC1\xF7^B\x8A@\xDE\xE2\r\xB1\xAD\x8B\xB7\x00J\x12\xBAd\xF5`\x11B\"yg\x8F\x9F\xAB\xC8 d\xB4\xE7^w\xC4\x89\a\x17\x15\x82\nN\x05f\xBDu\x98\xE4xF\xEC+RSTS\xF0\x9D\x04\xC9$cW\xEFo\"fy\x19\xD1yX\tYK\xE7\xF3kd\a\x12\xC7r\x7F[ \xBC\x0E4\x92\xC0 \x1F\xD8<\xB4\x01^\xA6\xDF\x04\xF5\x9B\x82\xC8",
+ },
+ "hmac-sha2-512-96" => {
+ false => "M\x1DcA\r]\\\x95?&\xE3D[\xCC1\x9B\xE0\xAF\x96\xA8\x86Y\xBD\x16\xE5xR%u\xC9(\r#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "M\x1Dcq\x14!\xC1\xF7^B\x8A@\xDE\xE2\r\xB1\xAD\x8B\xB7\x00J\x12\xBAd\xF5`\x11B\"yg\x8F\x9F\xAB\xC8 d\xB4\xE7^w\xC4\x89\a\x17\x15\x82\nN\x05f\xBDu\x98\xE4xF\xEC+R",
+ },
+ },
+ "cast128-ctr" => {
+ "hmac-sha2-256" => {
+ false => "\x10\xA0cJ6W\xC9\xC7\x02\xF8\xCD\xE31\xF9\xE7n\x0Fj\x7F\x99\x8A\f\x84\x80\x80\xE8p\x9C\x14\x83\x1C\xC77{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\x10\xA0cr7+T\xA5c\x9C\xA4\xE7\xB4\xD7\xDBDBN^1FG\x83\xF2\x90\xF03\xFBC3SE\xF7x;q\x89\xA80\xEA\xF7F\x99v\xB5o\f9$\x94\x81\e\xF4+\x96H\xFC\xFF=\ts\x82`\x16\e,\xE7\t\x8F\x86t\xC7",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\x10\xA0cJ6W\xC9\xC7\x02\xF8\xCD\xE31\xF9\xE7n\x0Fj\x7F\x99\x8A\f\x84\x80\x80\xE8p\x9C\x14\x83\x1C\xC77{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\x10\xA0cr7+T\xA5c\x9C\xA4\xE7\xB4\xD7\xDBDBN^1FG\x83\xF2\x90\xF03\xFBC3SE\xF7x;q\x89\xA80\xEA\xF7F\x99v\xB5o\f9$\x94\x81\e",
+ },
+ "hmac-sha2-512" => {
+ false => "\x10\xA0cJ6W\xC9\xC7\x02\xF8\xCD\xE31\xF9\xE7n\x0Fj\x7F\x99\x8A\f\x84\x80\x80\xE8p\x9C\x14\x83\x1C\xC7#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\x10\xA0cr7+T\xA5c\x9C\xA4\xE7\xB4\xD7\xDBDBN^1FG\x83\xF2\x90\xF03\xFBC3SE\xF7x;q\x89\xA80\xEAQ\xC92O\x93\xF1\x8E\x9D\x12\x8E\x0E2\xAE\xE3\x8C\xD0\v\xD1\xF6/$\x0F]2\xC2\xE35\x8F\xD4\xA5\x1F\xC1\x95p\xB8\x91c\xC7\xC2u\x8Bb 4#\x82PFI\xF9\xB7l\xFC\xC9\x01\xB2z(\xDD|\xDC\xA46\x96",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\x10\xA0cJ6W\xC9\xC7\x02\xF8\xCD\xE31\xF9\xE7n\x0Fj\x7F\x99\x8A\f\x84\x80\x80\xE8p\x9C\x14\x83\x1C\xC7#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\x10\xA0cr7+T\xA5c\x9C\xA4\xE7\xB4\xD7\xDBDBN^1FG\x83\xF2\x90\xF03\xFBC3SE\xF7x;q\x89\xA80\xEAQ\xC92O\x93\xF1\x8E\x9D\x12\x8E\x0E2",
+ },
+ },
+ "camellia128-ctr@openssh.org" => {
+ "hmac-sha2-256" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m'\xE7k\xAB\xF9\xE1\xD6\xAC\xEE\xB3[\xA12\xC2R\xD0\xBC\xF5\xAD\x03",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m",
+ },
+ "hmac-sha2-512" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9N\x05f\xBDu\x98\xE4xF\xEC+RSTS\xF0\x9D\x04\xC9$cW\xEFo\"fy\x19\xD1yX\tYK\xE7\xF3kd\a\x12\xC7r\x7F[ \xBC\x0E4\x92\xC0 \x1F\xD8<\xB4\x01^\xA6\xDF\x04\xF5\x9B\x82\xC8",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9N\x05f\xBDu\x98\xE4xF\xEC+R",
+ },
+ },
+ "camellia192-ctr@openssh.org" => {
+ "hmac-sha2-256" => {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ "hmac-sha2-256" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m'\xE7k\xAB\xF9\xE1\xD6\xAC\xEE\xB3[\xA12\xC2R\xD0\xBC\xF5\xAD\x03",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m",
+ },
+ "hmac-sha2-512" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93N\x05f\xBDu\x98\xE4xF\xEC+RSTS\xF0\x9D\x04\xC9$cW\xEFo\"fy\x19\xD1yX\tYK\xE7\xF3kd\a\x12\xC7r\x7F[ \xBC\x0E4\x92\xC0 \x1F\xD8<\xB4\x01^\xA6\xDF\x04\xF5\x9B\x82\xC8",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93N\x05f\xBDu\x98\xE4xF\xEC+R",
+ },
+ },
+ "camellia128-ctr" => {
+ "hmac-sha2-256" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m'\xE7k\xAB\xF9\xE1\xD6\xAC\xEE\xB3[\xA12\xC2R\xD0\xBC\xF5\xAD\x03",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m",
+ },
+ "hmac-sha2-512" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9N\x05f\xBDu\x98\xE4xF\xEC+RSTS\xF0\x9D\x04\xC9$cW\xEFo\"fy\x19\xD1yX\tYK\xE7\xF3kd\a\x12\xC7r\x7F[ \xBC\x0E4\x92\xC0 \x1F\xD8<\xB4\x01^\xA6\xDF\x04\xF5\x9B\x82\xC8",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\xE4>\xD9'`\xA5W\x9A\xB7\x19\xA9\x98\xB0\x87f2}\x0F\xBE\xBDS\xA8\xA5\x17\x10\x80\x10 "\xE4>\xD9\x17y\xD9\xCA\xF8\xD6}\xC0\x9C5\xA9Z\x180+\x9F\x15\x9F\xE3\xA2e\x00\x98S[\x00\xC71\x9D\xAEx\x19\x17m\x9E\xD6\xC5\x90\xE2d\xFA#\xEB\x94\xA9N\x05f\xBDu\x98\xE4xF\xEC+R",
+ },
+ },
+ "camellia192-ctr" => {
+ "hmac-sha2-256" => {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ false => "\xEE8:\xB5\x0E\xED\xF4?yh\x8A\xB2{\xF5\x8DH\x95\xA4\xFA\xDF\x01\xAC\xC4\xD5Xb\xBB\xC1\x8B\xD7\xBC\xBE#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\xEE8:\x85\x17\x91i]\x18\f\xE3\xB6\xFE\xDB\xB1b\xD8\x80\xDBw\xCD\xE7\xC3\xA7Hz\xF8\xA6\xDCg\xF3 {
+ "hmac-sha2-256" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0-\xBD\xCA~\x8F\x10U\xED\x01\xFF\x95F\xE5\x86\xAD\xC7\x13N\xE8J",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m'\xE7k\xAB\xF9\xE1\xD6\xAC\xEE\xB3[\xA12\xC2R\xD0\xBC\xF5\xAD\x03",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC7{\xD0\xCE\xF5Wy\"c\x1Ey\xB0",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93\xFB\x1D\xDC\xE0M\x1AB\xC7\xD4\x9A\x89m",
+ },
+ "hmac-sha2-512" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC#/\xCF\x00\xE0I\xBC\xF3_\x95U*\xD7z\x81\xCEc\xC3\xBDA\xF2\xD8^J\xBF\xC05oI\xBA\xF2\xEA\x86\xF8h\x8B\xB2\xC89\xC8v\x1F\x04\x12\x80]&\xF5\xC8\xC0\x90D[\xE8\x1E\x95\x89\xEB\xF1\xF6\x9F\xB7\x84\xD5",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93N\x05f\xBDu\x98\xE4xF\xEC+RSTS\xF0\x9D\x04\xC9$cW\xEFo\"fy\x19\xD1yX\tYK\xE7\xF3kd\a\x12\xC7r\x7F[ \xBC\x0E4\x92\xC0 \x1F\xD8<\xB4\x01^\xA6\xDF\x04\xF5\x9B\x82\xC8",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\xE3-1\x8E\xA1\xB7\x95\x9E`\x1E\xFB:[\xFD\x15\x8Ee\xD6|\xB6q\xF98\xFF\t\xB3\xD4F\x03\xB3\xFA\xEC#/\xCF\x00\xE0I\xBC\xF3_\x95U*",
+ :standard => "\xE3-1\xBE\xB8\xCB\b\xFC\x01z\x92>\xDE\xD3)\xA4(\xF2]\x1E\xBD\xB2?\x8D\x19\xAB\x97!T\x03\xB5n\xC0)\xBE.]\x92\xF5\x05~\t\x04\x99\xFB\xDC\xD6\x93N\x05f\xBDu\x98\xE4xF\xEC+R",
+ },
+ },
+ "none" => {
+ "hmac-sha2-256" => {
+ false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\2127{\320\316\365Wy\"c\036y\260-\275\312~\217\020U\355\001\377\225F\345\206\255\307\023N\350J",
+ :standard => "\000\000\000$\tx\234bad``\340LIM*MO\317\314K\ar\030\000\000\000\000\377\377\b\030CgWO\260\212^\367F\231v\265o\f9$\224\201\e\364+\226H\374\377=\ts\202`\026\e,\347\t\217\206t\307",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\2127{\320\316\365Wy\"c\036y\260",
+ :standard => "\000\000\000$\tx\234bad``\340LIM*MO\317\314K\ar\030\000\000\000\000\377\377\b\030CgWO\260\212^\367F\231v\265o\f9$\224\201\e",
+ },
+ "hmac-sha2-512" => {
+ false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\212#/\317\000\340I\274\363_\225U*\327z\201\316c\303\275A\362\330^J\277\3005oI\272\362\352\206\370h\213\262\3109\310v\037\004\022\200]&\365\310\300\220D[\350\036\225\211\353\361\366\237\267\204\325",
+ :standard => "\000\000\000$\tx\234bad``\340LIM*MO\317\314K\ar\030\000\000\000\000\377\377\b\030CgWO\260\212^Q\3112O\223\361\216\235\022\216\0162\256\343\214\320\v\321\366/$\017]2\302\3435\217\324\245\037\301\225p\270\221c\307\302u\213b 4#\202PFI\371\267l\374\311\001\262z(\335|\334\2446\226",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\000\000\000\034\b\004\001\000\000\000\tdebugging\000\000\000\000\b\030CgWO\260\212#/\317\000\340I\274\363_\225U*",
+ :standard => "\000\000\000$\tx\234bad``\340LIM*MO\317\314K\ar\030\000\000\000\000\377\377\b\030CgWO\260\212^Q\3112O\223\361\216\235\022\216\0162",
+ },
+ },
+ "rijndael-cbc@lysator.liu.se" => {
+ "hmac-sha2-256" => {
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\3407{\320\316\365Wy\"c\036y\260-\275\312~\217\020U\355\001\377\225F\345\206\255\307\023N\350J",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\373\035\334\340M\032B\307\324\232\211m'\347k\253\371\341\326\254\356\263[\2412\302R\320\274\365\255\003",
+ },
+ "hmac-sha2-256-96" => {
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\3407{\320\316\365Wy\"c\036y\260",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365\373\035\334\340M\032B\307\324\232\211m",
+ },
+ "hmac-sha2-512" => {
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340#/\317\000\340I\274\363_\225U*\327z\201\316c\303\275A\362\330^J\277\3005oI\272\362\352\206\370h\213\262\3109\310v\037\004\022\200]&\365\310\300\220D[\350\036\225\211\353\361\366\237\267\204\325",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365N\005f\275u\230\344xF\354+RSTS\360\235\004\311$cW\357o\"fy\031\321yX\tYK\347\363kd\a\022\307r\177[ \274\0164\222\300 \037\330<\264\001^\246\337\004\365\233\202\310",
+ },
+ "hmac-sha2-512-96" => {
+ false => "\266\001oG(\201s\255[\202j\031-\354\353]\022\374\367j2\257\b#\273r\275\341\232\264\255\340#/\317\000\340I\274\363_\225U*",
+ :standard => "\251!O/_\253\321\217e\225\202\202W\261p\r\357\357\375\231\264Y,nZ/\366\225G\256\3000\036\223\237\353\265vG\231\215cvY\236%\315\365N\005f\275u\230\344xF\354+R",
+ },
+ },
+ }
+ sha2_packets.each do |key, val|
+ PACKETS[key].merge!(val)
+ end
+ end
+
ciphers = Net::SSH::Transport::CipherFactory::SSH_TO_OSSL.keys
hmacs = Net::SSH::Transport::HMAC::MAP.keys
ciphers.each do |cipher_name|
- next unless Net::SSH::Transport::CipherFactory.supported?(cipher_name)
-
- # TODO: How are the expected packets generated?
- if cipher_name =~ /arcfour/
+ unless Net::SSH::Transport::CipherFactory.supported?(cipher_name)
puts "Skipping packet stream test for #{cipher_name}"
- next
+ next
end
-
+
# JRuby Zlib implementation (1.4 & 1.5) does not have byte-to-byte compatibility with MRI's.
# skip these 80 or more tests under JRuby.
if defined?(JRUBY_VERSION)
@@ -391,8 +1694,9 @@
hmac_method_name = hmac_name.gsub(/\W/, "_")
define_method("test_next_packet_with_#{cipher_method_name}_and_#{hmac_method_name}_and_#{compress}_compression") do
- cipher = Net::SSH::Transport::CipherFactory.get(cipher_name, :key => "ABC", :iv => "abc", :shared => "123", :digester => OpenSSL::Digest::SHA1, :hash => "^&*", :decrypt => true)
- hmac = Net::SSH::Transport::HMAC.get(hmac_name, "{}|")
+ opts = { :shared => "123", :hash => "^&*", :digester => OpenSSL::Digest::SHA1 }
+ cipher = Net::SSH::Transport::CipherFactory.get(cipher_name, opts.merge(:key => "ABC", :decrypt => true, :iv => "abc"))
+ hmac = Net::SSH::Transport::HMAC.get(hmac_name, "{}|", opts)
stream.server.set :cipher => cipher, :hmac => hmac, :compression => compress
stream.stubs(:recv).returns(PACKETS[cipher_name][hmac_name][compress])
@@ -407,13 +1711,14 @@
end
define_method("test_enqueue_packet_with_#{cipher_method_name}_and_#{hmac_method_name}_and_#{compress}_compression") do
- cipher = Net::SSH::Transport::CipherFactory.get(cipher_name, :key => "ABC", :iv => "abc", :shared => "123", :digester => OpenSSL::Digest::SHA1, :hash => "^&*", :encrypt => true)
- hmac = Net::SSH::Transport::HMAC.get(hmac_name, "{}|")
+ opts = { :shared => "123", :digester => OpenSSL::Digest::SHA1, :hash => "^&*" }
+ cipher = Net::SSH::Transport::CipherFactory.get(cipher_name, opts.merge(:key => "ABC", :iv => "abc", :encrypt => true))
+ hmac = Net::SSH::Transport::HMAC.get(hmac_name, "{}|", opts)
srand(100)
stream.client.set :cipher => cipher, :hmac => hmac, :compression => compress
stream.enqueue_packet(ssh_packet)
- assert_equal stream.write_buffer, PACKETS[cipher_name][hmac_name][compress]
+ assert_equal PACKETS[cipher_name][hmac_name][compress], stream.write_buffer
stream.cleanup
end
end
@@ -445,4 +1750,4 @@
end
end
-end
\ No newline at end of file
+end
diff -Nru ruby-net-ssh-2.2.1/test/transport/test_session.rb ruby-net-ssh-2.6.7/test/transport/test_session.rb
--- ruby-net-ssh-2.2.1/test/transport/test_session.rb 2011-08-30 05:46:38.000000000 +0000
+++ ruby-net-ssh-2.6.7/test/transport/test_session.rb 2013-06-16 17:57:19.000000000 +0000
@@ -28,6 +28,10 @@
assert_instance_of Net::SSH::Verifiers::Strict, session(:paranoid => :very).host_key_verifier
end
+ def test_paranoid_secure_uses_secure_verifier
+ assert_instance_of Net::SSH::Verifiers::Secure, session(:paranoid => :secure).host_key_verifier
+ end
+
def test_paranoid_false_uses_null_verifier
assert_instance_of Net::SSH::Verifiers::Null, session(:paranoid => false).host_key_verifier
end
@@ -312,4 +316,4 @@
alias session! session
end
-end
\ No newline at end of file
+end