code: def _tls_P_hash(secret, seed, req_len, hm):
      
      hash_len = hm.hash_alg.hash_len
      n = (req_len + hash_len - 1) // hash_len
      seed = bytes_encode(seed)
  
      res = b""
      a = hm(secret).digest(seed)  # A(1)
  
      while n > 0:
          res += hm(secret).digest(a + seed)
          a = hm(secret).digest(a)
          n -= 1
  
      return res[:req_len]
docs: Provides the implementation of P_hash function defined in
      section 5 of RFC 4346 (and section 5 of RFC 5246). Two
      parameters have been added (hm and req_len):
  
      - secret : the key to be used. If RFC 4868 is to be believed,
                 the length must match hm.key_len. Actually,
                 python hmac takes care of formatting every key.
      - seed : the seed to be used.
      - req_len : the length of data to be generated by iterating
                 the specific HMAC function (hm). This prevents
                 multiple calls to the function.
      - hm : the hmac function class to use for iteration (either
             Hmac_MD5 or Hmac_SHA1 in TLS <= 1.1 or
             Hmac_SHA256 or Hmac_SHA384 in TLS 1.2)