anchor.diff:  %% %% Select algorithms
   handle_kexdh_reply(#ssh_msg_kexdh_reply{public_host_key = HostKey, f = F,
   					h_sig = H_SIG}, 
  -		   #ssh{keyex_key = {{Private, Public}, {_G, P}}} = Ssh0) ->
  +		   #ssh{keyex_key = {{Private, Public}, {_G, P}}} = Ssh0) when 1=<F, F=<(P-1)->
       K = ssh_math:ipow(F, Private, P),
       H = kex_h(Ssh0, HostKey, Public, F, K),
   
  
positive.code: 
  handle_kexdh_init(#ssh_msg_kexdh_init{e = E}, Ssh0) ->
      {G, P} = dh_group1(),
      {Private, Public} = dh_gen_key(G, P, 1024),
      K = ssh_math:ipow(E, Private, P),
      Key = get_host_key(Ssh0),
      H = kex_h(Ssh0, Key, E, Public, K),
      H_SIG = sign_host_key(Ssh0, Key, H),
      {SshPacket, Ssh1} = ssh_packet(#ssh_msg_kexdh_reply{public_host_key = Key,
  							f = Public,
  							h_sig = H_SIG
  						       }, Ssh0),
  
      {ok, SshPacket, Ssh1#ssh{keyex_key = {{Private, Public}, {G, P}},
  			     shared_secret = K,
  			     exchanged_hash = H,
  			     session_id = sid(Ssh1, H)}}.
  
  handle_kex_dh_gex_group(#ssh_msg_kex_dh_gex_group{p = P, g = G}, Ssh0) ->
      {Private, Public} = dh_gen_key(G,P,1024),
  
negative.code: 	      description = "Key exchange failed",
  	      language = "en"},
  	    throw({Error, Disconnect})
      end;
  handle_kexdh_reply(#ssh_msg_kexdh_reply{}, _SSH) ->
      Error = {error,bad_f_from_peer},
      Disconnect = #ssh_msg_disconnect{
  		    code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
  		    description = "Key exchange failed, 'f' out of bounds",
  		    language = "en"},
      throw({Error, Disconnect}).
  
  
  handle_kex_dh_gex_request(#ssh_msg_kex_dh_gex_request{min = _Min,
  						      n   = _NBits,
  