code: def generate_hashes(peaks, fan_value: int = DEFAULT_FAN_VALUE):
      
      if PEAK_SORT:
          peaks = sorted(peaks, key=lambda x: x[1])
          # peaks.sort(key=itemgetter(1))
  
      for i in range(len(peaks)):
          for j in range(1, fan_value):
              if (i + j) < len(peaks):
  
                  freq1 = peaks[i][IDX_FREQ_I]
                  freq2 = peaks[i + j][IDX_FREQ_I]
                  t1 = peaks[i][IDX_TIME_J]
                  t2 = peaks[i + j][IDX_TIME_J]
                  t_delta = t2 - t1
  
                  if MIN_HASH_TIME_DELTA <= t_delta <= MAX_HASH_TIME_DELTA:
                      key = "{}|{}|{}".format(freq1, freq2, t_delta)
                      h = hashlib.sha1(key.encode('utf-8'))
                      yield (h.hexdigest()[0:FINGERPRINT_REDUCTION], t1)
docs: Hash list structure:
         sha1_hash[0:20]    time_offset
      [(e05b341a9b77a51fd26, 32), ... ]