code: def signature(f, s=None, block_size=RS_DEFAULT_BLOCK_LEN):
      
      if s is None:
          s = tempfile.SpooledTemporaryFile(max_size=MAX_SPOOL, mode='wb+')
      job = _librsync.rs_sig_begin(block_size, RS_DEFAULT_STRONG_LEN)
      try:
          _execute(job, f, s)
      finally:
          _librsync.rs_job_free(job)
      return s
docs: Generate a signature for the file `f`. The signature will be written to `s`.
      If `s` is omitted, a temporary file will be used. This function returns the
      signature file `s`. You can specify the size of the blocks using the
      optional `block_size` parameter.