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ϙOJ vΓ,ɉ3jeL*p L} )Kc +o)5b\Y:+j߄?Mu'+zZCHR-3Bs|-{If6 EY!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