# File lib/net/ssh/transport/kex/dh.rb, line 206
          def exchange_keys( session, data )
            data = data.dup
            dh = generate_key( session, data )

            buffer = send_kexinit( dh, session )

            result = parse_kex_reply( dh, buffer, session )

            verify_server_key( result[:server_key], session )

            session_id = verify_signature( dh, data, result )

            confirm_newkeys( session )

            return Struct.new( :session_id,
              :server_key, :shared_secret, :hashing_algorithm ).new(
                session_id, result[:server_key], result[:shared_secret],
                @digester )
          end