anchor.diff:  	  (byte_size(HashAlgorithmBin)), HashAlgorithmBin/binary,
   	  (byte_size(BlockCryptoBin)), BlockCryptoBin/binary,
   	  KeyLen, TagLen>>,
  -    <<KeySalt:KeyLen/binary, OtherSalt:KeyLen/binary, IV:IVLen/binary>> =
  -        Data = crypto:strong_rand_bytes(IVLen + KeyLen + KeyLen),
  +    <<KeySalt:KeyLen/binary, OtherSalt:KeyLen/binary,
  +      IVSalt:IVSaltLen/binary, IVNo:48>> =
  +        Data = crypto:strong_rand_bytes(KeyLen + KeyLen + IVSaltLen + 6),
       {#params{
           socket = Socket,
           protocol = Protocol,
           hash_algorithm = HashAlgorithm,
           block_crypto = BlockCrypto,
  -        iv = IV,
  +        iv = {IVSalt, IVNo},
           key = {KeySalt, OtherSalt},
           tag_len = TagLen,
           rekey_interval = RekeyInterval}, Header, Data}.
  
positive.code: encrypt_and_send_chunk(
    #params{
       socket = Socket, rekey_interval = Seq,
       key = Key, iv = IV, hash_algorithm = HashAlgorithm} = Params,
    Seq, Cleartext) ->
      %%
      KeyLen = byte_size(Key),
      IVLen = byte_size(IV),
      Chunk = <<IV_1:IVLen/binary, KeySalt:KeyLen/binary>> =
          crypto:strong_rand_bytes(IVLen + KeyLen),
      case
          gen_tcp:send(
            Socket, encrypt_chunk(Params, Seq, [?REKEY_CHUNK, Chunk]))
      of
          ok ->
              Key_1 = hash_key(HashAlgorithm, Key, KeySalt),
              Params_1 = Params#params{key = Key_1, iv = IV_1},
              Result =
                  gen_tcp:send(Socket, encrypt_chunk(Params_1, 0, Cleartext)),
              {Params_1, 1, Result};
  
negative.code:     KeyLen = byte_size(Key),
      PacketLen = KeyLen,
      <<Ciphertext:PacketLen/binary, CipherTag:TagLen/binary>> = Packet,
      IVBin = <<IVSalt/binary, IVNo:48>>,
      Zeros = binary:copy(<<0>>, KeyLen),
      case
          crypto:block_decrypt(
            BlockCrypto, Key, IVBin, {AAD, Ciphertext, CipherTag})
      of
          Zeros ->
              ok;
  