anchor.diff:          crypto:generate_key(Type, Params),
       #key_pair{public = Public, private = Private}.
   
  +
   cancel_timer(undefined) ->
       ok;
   cancel_timer(Timer) ->
  +    erlang_cancel_timer(Timer).
  +
  +start_rekey_timer(Time) ->
  +    Timer = erlang:start_timer(Time, self(), rekey_time),
  +    {timeout, Timer, rekey_time}.
  +
  +cancel_rekey_timer({timeout, Timer, rekey_time}) ->
  +    erlang_cancel_timer(Timer).
  +
  +erlang_cancel_timer(Timer) ->
       case erlang:cancel_timer(Timer) of
           false ->
               receive
  
positive.code:             end
      end.
  
  output_handler_send(Params, Seq, {_, Size, _} = Q) ->
      if
          ?CHUNK_SIZE < Size ->
              output_handler_send(Params, Seq, Q, ?CHUNK_SIZE);
          true ->
              case get_data(Params#params.dist_handle, Q) of
                  {_, 0, _} ->
                      {Params, Seq};
                  {_, Size, _} = Q_1 -> % Got no more
                      output_handler_send(Params, Seq, Q_1, Size);
                  Q_1 ->
                      output_handler_send(Params, Seq, Q_1)
              end
      end.
  
  output_handler_send(Params, Seq, Q, Size) ->
      {Cleartext, Q_1} = deq_iovec(Size, Q),
      case
          encrypt_and_send_chunk(Params, Seq, [?DATA_CHUNK, Cleartext])
  
negative.code: %% this time encrypted with the session keys for verification
  %% by the other side, plus the rekey interval.  The rekey interval
  %% is just there to get an early check for if the other side's
  %% maximum rekey interval is acceptable, it is just an embryo
  %% of some better check.  Any side may rekey earlier but if the
  %% rekey interval is exceeded the connection fails.
  %%
  