diff options
| author | Hans Nilsson <[email protected]> | 2015-08-06 11:58:58 +0200 | 
|---|---|---|
| committer | Hans Nilsson <[email protected]> | 2015-08-06 11:58:58 +0200 | 
| commit | ef50fce3ae60630b512225bc75ba786aaf1fce6c (patch) | |
| tree | 3dbc40a56843ff38abeb36f40efdaabeaca7be03 /lib/ssh | |
| parent | 18559812dbc892a76bd900427ff65735c6c902ce (diff) | |
| parent | ee5587d585052fe7b64c972029a6c68c403b71dc (diff) | |
| download | otp-ef50fce3ae60630b512225bc75ba786aaf1fce6c.tar.gz otp-ef50fce3ae60630b512225bc75ba786aaf1fce6c.tar.bz2 otp-ef50fce3ae60630b512225bc75ba786aaf1fce6c.zip | |
Merge branch 'maint'
* maint:
  ssh: announce dh-group-exchange
  ssh: document new options in doc/ssh.xml
  ssh: more dh_gex test cases
  ssh: options 'dh_gex_groups' and 'dh_gex_limits'
Diffstat (limited to 'lib/ssh')
| -rw-r--r-- | lib/ssh/doc/src/ssh.xml | 18 | ||||
| -rw-r--r-- | lib/ssh/src/ssh.erl | 26 | ||||
| -rw-r--r-- | lib/ssh/src/ssh_transport.erl | 81 | ||||
| -rw-r--r-- | lib/ssh/src/ssh_transport.hrl | 20 | ||||
| -rw-r--r-- | lib/ssh/test/ssh_protocol_SUITE.erl | 82 | ||||
| -rw-r--r-- | lib/ssh/test/ssh_protocol_SUITE_data/dh_group_test | 3 | 
6 files changed, 184 insertions, 46 deletions
| diff --git a/lib/ssh/doc/src/ssh.xml b/lib/ssh/doc/src/ssh.xml index d24025ca4d..cf5e8f1aff 100644 --- a/lib/ssh/doc/src/ssh.xml +++ b/lib/ssh/doc/src/ssh.xml @@ -43,7 +43,7 @@        <item>Supported public key algorithms: ssh-rsa and ssh-dss.</item>        <item>Supported MAC algorithms: hmac-sha2-256 and hmac-sha1.</item>        <item>Supported encryption algorithms: aes128-ctr, aes128-cb and 3des-cbc.</item> -      <item>Supported key exchange algorithms: diffie-hellman-group1-sha1.</item> +      <item>Supported key exchange algorithms: diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group-exchange-sha1 and diffie-hellman-group-exchange-sha256.</item>        <item>Supported compression algorithms: none, zlib, [email protected],</item>        <item>Supports unicode filenames if the emulator and the underlaying OS support it.        See section DESCRIPTION in the @@ -240,6 +240,13 @@ kex is implicit but public_key is set explicitly.</p>  	</warning>  	  </item> +	  <tag><c><![CDATA[{dh_gex_limits,{Min=integer(),I=integer(),Max=integer()}}]]></c></tag> +	  <item> +	    <p>Sets the three diffie-hellman-group-exchange parameters that guides the connected server in choosing a group. +	    See RFC 4419 for the function of thoose.  The default value is <c>{512, 1024, 4096}</c>. +	    </p> +	  </item> +  	  <tag><c><![CDATA[{connect_timeout, timeout()}]]></c></tag>  	  <item>  	    <p>Sets a time-out on the transport layer @@ -449,6 +456,15 @@ kex is implicit but public_key is set explicitly.</p>  	</warning>  	  </item> +	  <tag><c><![CDATA[{dh_gex_groups, [{Size=integer(),G=integer(),P=integer()}] | {file,filename()} }]]></c></tag> +	  <item> +	    <p>Sets the groups that the server may choose among when diffie-hellman-group-exchange is negotiated. +	    See RFC 4419 for details. +	    </p> +	    <p>If the parameter is <c>{file,filename()}</c>, the file must exist and have one or more three-tuples terminated by a dot. The interpretation is as if the tuples had been given directly in the option.  The file is read when the daemon starts. +	    </p> +	  </item> +  	  <tag><c><![CDATA[{pwdfun, fun(User::string(), password::string()) -> boolean()}]]></c></tag>  	  <item>  	    <p>Provides a function for password validation. This function is called diff --git a/lib/ssh/src/ssh.erl b/lib/ssh/src/ssh.erl index 370f086600..5b2e0a988c 100644 --- a/lib/ssh/src/ssh.erl +++ b/lib/ssh/src/ssh.erl @@ -373,6 +373,10 @@ handle_option([{auth_method_kb_interactive_data, _} = Opt | Rest], SocketOptions      handle_option(Rest, SocketOptions, [handle_ssh_option(Opt) | SshOptions]);  handle_option([{preferred_algorithms,_} = Opt | Rest], SocketOptions, SshOptions) ->      handle_option(Rest, SocketOptions, [handle_ssh_option(Opt) | SshOptions]); +handle_option([{dh_gex_groups,_} = Opt | Rest], SocketOptions, SshOptions) -> +    handle_option(Rest, SocketOptions, [handle_ssh_option(Opt) | SshOptions]); +handle_option([{dh_gex_limits,_} = Opt | Rest], SocketOptions, SshOptions) -> +    handle_option(Rest, SocketOptions, [handle_ssh_option(Opt) | SshOptions]);  handle_option([{quiet_mode, _} = Opt|Rest], SocketOptions, SshOptions) ->      handle_option(Rest, SocketOptions, [handle_ssh_option(Opt) | SshOptions]);  handle_option([{idle_time, _} = Opt | Rest], SocketOptions, SshOptions) -> @@ -411,6 +415,28 @@ handle_ssh_option({user_interaction, Value} = Opt) when is_boolean(Value) ->      Opt;  handle_ssh_option({preferred_algorithms,[_|_]} = Opt) ->       handle_pref_algs(Opt); +handle_ssh_option({dh_gex_groups,L=[{I1,I2,I3}|_]}) when is_integer(I1), I1>0,  +							 is_integer(I2), I2>0, +							 is_integer(I3), I3>0 -> +    {dh_gex_groups, lists:map(fun({N,G,P}) -> {N,{G,P}} end, L)}; +handle_ssh_option({dh_gex_groups,{file,File=[C|_]}}=Opt) when is_integer(C), C>0 -> +    %% A string, (file name) +    case file:consult(File) of +	{ok, List} -> +	    try handle_ssh_option({dh_gex_groups,List}) of +		{dh_gex_groups,_} = NewOpt -> +		    NewOpt +	    catch +		_:_ -> +		    throw({error, {{eoptions, Opt}, "Bad format in file"}}) +	    end; +	Error -> +	    throw({error, {{eoptions, Opt},{"Error reading file",Error}}}) +    end; +handle_ssh_option({dh_gex_limits,{Min,I,Max}} = Opt) when is_integer(Min), Min>0,  +							  is_integer(I),   I>=Min, +							  is_integer(Max), Max>=I -> +    Opt;  handle_ssh_option({connect_timeout, Value} = Opt) when is_integer(Value); Value == infinity ->      Opt;  handle_ssh_option({max_sessions, Value} = Opt) when is_integer(Value), Value>0 -> diff --git a/lib/ssh/src/ssh_transport.erl b/lib/ssh/src/ssh_transport.erl index 69ba797faf..38a0b7ec7c 100644 --- a/lib/ssh/src/ssh_transport.erl +++ b/lib/ssh/src/ssh_transport.erl @@ -67,10 +67,7 @@ default_algorithms(compression) ->      %% Do not announce '[email protected]' because there seem to be problems      supported_algorithms(compression, same(['[email protected]']));  default_algorithms(kex) -> -    %% Do not announce the experimental 'diffie-hellman-group-exchange-sha*' yet -    supported_algorithms(kex, ['diffie-hellman-group-exchange-sha1', -			       'diffie-hellman-group-exchange-sha256' -			      ]); +    supported_algorithms(kex, []);  default_algorithms(Alg) ->      supported_algorithms(Alg). @@ -404,9 +401,10 @@ handle_kexdh_reply(#ssh_msg_kexdh_reply{public_host_key = HostKey,  %%%   handle_kex_dh_gex_request(#ssh_msg_kex_dh_gex_request{min = Min,  						      n   = NBits, -						      max = Max}, Ssh0) when Min=<NBits, NBits=<Max -> +						      max = Max},  +			  Ssh0=#ssh{opts=Opts}) when Min=<NBits, NBits=<Max ->      %% server -    {G, P} = dh_gex_group(Min, NBits, Max), +    {G, P} = dh_gex_group(Min, NBits, Max, proplists:get_value(dh_gex_groups,Opts)),      {Private, Public} = dh_gen_key(G, P, 1024),      {SshPacket, Ssh} =   	ssh_packet(#ssh_msg_kex_dh_gex_group{p = P, g = G}, Ssh0), @@ -1220,37 +1218,46 @@ peer_name({Host, _}) ->  %%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% rfc 2489, ch 6.2 -dh_group1() -> -    {2, 16#FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF}. - -%%% rfc 3526, ch3 -dh_group14() -> -    {2, 16#FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF}. - -%%% rfc 3526, ch4 -dh_group15() -> -   {2, 16#FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF}. - -%%% rfc 3526, ch5 -dh_group16() -> -   {2, 16#FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF}. - - -dh_group('diffie-hellman-group1-sha1') -> dh_group1(); -dh_group('diffie-hellman-group14-sha1') -> dh_group14(). -     - -%%% First try exact match: -dh_gex_group(_Min, N, _Max) when N==1024 -> dh_group1(); -dh_gex_group(_Min, N, _Max) when N==2048 -> dh_group14(); -dh_gex_group(_Min, N, _Max) when N==3072 -> dh_group15(); -dh_gex_group(_Min, N, _Max) when N==4096 -> dh_group16(); -%%% If not an exact match, select the largest possible: -dh_gex_group(Min, _N, Max) when Min=<4096, 4096=<Max -> dh_group16(); -dh_gex_group(Min, _N, Max) when Min=<3072, 3072=<Max -> dh_group15(); -dh_gex_group(Min, _N, Max) when Min=<2048, 2048=<Max -> dh_group14(); -dh_gex_group(Min, _N, Max) when Min=<1024, 1024=<Max -> dh_group1(). +dh_group('diffie-hellman-group1-sha1') -> ?dh_group1; +dh_group('diffie-hellman-group14-sha1') -> ?dh_group14. + +dh_gex_default_groups() -> +    [{1024, ?dh_group1 }, +     {2048, ?dh_group14}, +     {3072, ?dh_group15}, +     {4096, ?dh_group16}]. + + +dh_gex_group(Min, N, Max, undefined) -> +    dh_gex_group(Min, N, Max, dh_gex_default_groups()); +dh_gex_group(Min, N, Max, Groups) -> +    %% First try to find an exact match. If not an exact match, select the largest possible. +    {_,Group} = +	lists:foldl( +	  fun(_, {I,G}) when I==N -> +		  %% If we have an exact match already: use that one +		  {I,G}; +	     ({I,G}, _) when I==N -> +		  %% If we now found an exact match: use that very one +		  {I,G}; +	     ({I,G}, {Imax,_Gmax}) when Min=<I,I=<Max, % a) {I,G} fullfills the requirements +				        I>Imax ->      % b) {I,G} is larger than current max +		  %% A group within the limits and better than the one we have +		  {I,G}; +	     (_, IGmax) -> +		  %% Keep the one we have +		  IGmax +	  end, {-1,undefined}, Groups), + +    case Group of +	undefined -> +	    throw(#ssh_msg_disconnect{ +		     code = ?SSH_DISCONNECT_PROTOCOL_ERROR, +		     description = "No possible diffie-hellman-group-exchange group found",  +		     language = ""}); +	_ -> +	    Group +    end.  dh_gen_key(G, P, _) -> diff --git a/lib/ssh/src/ssh_transport.hrl b/lib/ssh/src/ssh_transport.hrl index ab59742b96..9e1de171c2 100644 --- a/lib/ssh/src/ssh_transport.hrl +++ b/lib/ssh/src/ssh_transport.hrl @@ -188,4 +188,24 @@  -define(SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE,  14).  -define(SSH_DISCONNECT_ILLEGAL_USER_NAME,  15). +%% groups + +%%% rfc 2489, ch 6.2 +-define(dh_group1, +    {2, 16#FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF}). + +%%% rfc 3526, ch3 +-define(dh_group14, +    {2, 16#FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF}). + +%%% rfc 3526, ch4 +-define(dh_group15, +   {2, 16#FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF}). + +%%% rfc 3526, ch5 +-define(dh_group16, +   {2, 16#FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF}). + + +  -endif. % -ifdef(ssh_transport). diff --git a/lib/ssh/test/ssh_protocol_SUITE.erl b/lib/ssh/test/ssh_protocol_SUITE.erl index d82cdaf2c7..246e3d4898 100644 --- a/lib/ssh/test/ssh_protocol_SUITE.erl +++ b/lib/ssh/test/ssh_protocol_SUITE.erl @@ -56,7 +56,11 @@ groups() ->  		       lib_no_match  		      ]},       {kex, [], [no_common_alg_server_disconnects, -		no_common_alg_client_disconnects +		no_common_alg_client_disconnects, +		gex_client_init_default_noexact, +		gex_client_init_default_exact, +		gex_client_init_option_groups, +		gex_client_init_option_groups_file  		]}      ]. @@ -68,9 +72,32 @@ end_per_suite(Config) ->      stop_apps(Config). + +init_per_testcase(TC, Config) when TC == gex_client_init_default_noexact ; +				   TC == gex_client_init_default_exact ; +				   TC == gex_client_init_option_groups ; +				   TC == gex_client_init_option_groups_file -> +    Opts = case TC of +	       gex_client_init_option_groups -> +		   [{dh_gex_groups, [{2345, 3, 41}]}]; +	       gex_client_init_option_groups_file -> +		   DataDir = ?config(data_dir, Config), +		   F = filename:join(DataDir, "dh_group_test"), +		   [{dh_gex_groups, {file,F}}]; +	       _ -> +		   [] +	   end, +    start_std_daemon(Config, +		     [{preferred_algorithms, ssh_transport:supported_algorithms()} +		      | Opts]);  init_per_testcase(_TestCase, Config) ->      check_std_daemon_works(Config, ?LINE). +end_per_testcase(TC, Config) when TC == gex_client_init_default_noexact ; +				  TC == gex_client_init_default_exact ; +				  TC == gex_client_init_option_groups ; +				  TC == gex_client_init_option_groups_file -> +    stop_std_daemon(Config);  end_per_testcase(_TestCase, Config) ->      check_std_daemon_works(Config, ?LINE). @@ -293,6 +320,48 @@ no_common_alg_client_disconnects(Config) ->  	X -> ct:fail(X)      end. +%%%-------------------------------------------------------------------- +gex_client_init_default_noexact(Config) -> +    do_gex_client_init(Config, {2000, 3000, 4000}, +		       %% Warning, app knowledege: +		       ?dh_group15). + + +gex_client_init_default_exact(Config) -> +    do_gex_client_init(Config, {2000, 2048, 4000}, +		       %% Warning, app knowledege: +		       ?dh_group14). + + +gex_client_init_option_groups(Config) -> +    do_gex_client_init(Config, {2000, 2048, 4000}, {3,41}). + + +gex_client_init_option_groups_file(Config) -> +    do_gex_client_init(Config, {2000, 2048, 4000}, {5,61}). + +do_gex_client_init(Config, {Min,N,Max}, {G,P}) -> +    {ok,_} = +	ssh_trpt_test_lib:exec( +	  [{set_options, [print_ops, print_seqnums, print_messages]}, +	   {connect, +	    server_host(Config),server_port(Config), +	    [{silently_accept_hosts, true}, +	     {user_dir, user_dir(Config)}, +	     {user_interaction, false}, +	     {preferred_algorithms,[{kex,['diffie-hellman-group-exchange-sha1']}]} +	    ]}, +	   receive_hello, +	   {send, hello}, +	   {send, ssh_msg_kexinit}, +	   {match, #ssh_msg_kexinit{_='_'}, receive_msg}, +	   {send, #ssh_msg_kex_dh_gex_request{min = Min,  +					      n = N, +					      max = Max}}, +	   {match, #ssh_msg_kex_dh_gex_group{p=P, g=G, _='_'},  receive_msg} +	  ] +	 ). +  %%%================================================================  %%%==== Internal functions ========================================  %%%================================================================ @@ -353,6 +422,7 @@ stop_std_daemon(Config) ->      ct:log("Std server ~p at ~p:~p stopped", [server_pid(Config), server_host(Config), server_port(Config)]),      lists:keydelete(server, 1, Config). +  check_std_daemon_works(Config, Line) ->      case std_connect(Config) of  	{ok,C} -> @@ -362,13 +432,9 @@ check_std_daemon_works(Config, Line) ->  	    ok = ssh:close(C),  	    Config;  	Error = {error,_} -> -	    {fail, -	     lists:flatten( -	       io_lib:format("Standard server ~p:~p ~p is ill at line ~p: ~p", -			     [server_host(Config), server_port(Config),  -			      server_pid(Config), Line, Error]) -	      ) -	    } +	    ct:fail("Standard server ~p:~p ~p is ill at line ~p: ~p", +		    [server_host(Config), server_port(Config),  +		     server_pid(Config), Line, Error])      end.  server_pid(Config)  -> element(1,?v(server,Config)). diff --git a/lib/ssh/test/ssh_protocol_SUITE_data/dh_group_test b/lib/ssh/test/ssh_protocol_SUITE_data/dh_group_test new file mode 100644 index 0000000000..2887bb4b60 --- /dev/null +++ b/lib/ssh/test/ssh_protocol_SUITE_data/dh_group_test @@ -0,0 +1,3 @@ +{2222, 5, 61}. +{1111, 7, 91}. + | 
