code: def verify_leaf_hash_inclusion(self, leaf_hash: bytes, leaf_index: int,
                                     proof: List[bytes], sth: STH):
          
          leaf_index = int(leaf_index)
          tree_size = int(sth.tree_size)
          # TODO(eranm): Verify signature over STH
          if tree_size <= leaf_index:
              raise ValueError("Provided STH is for a tree that is smaller "
                               "than the leaf index. Tree size: %d Leaf "
                               "index: %d" % (tree_size, leaf_index))
          if tree_size < 0 or leaf_index < 0:
              raise ValueError("Negative tree size or leaf index: "
                               "Tree size: %d Leaf index: %d" %
                               (tree_size, leaf_index))
          calculated_root_hash = self._calculate_root_hash_from_audit_path(
              leaf_hash, leaf_index, proof[:], tree_size)
          if calculated_root_hash == sth.sha256_root_hash:
              return True
  
          raise error.ProofError("Constructed root hash differs from provided "
                                 "root hash. Constructed: %s Expected: %s" %
                                 (hexlify(calculated_root_hash).strip(),
                                  hexlify(sth.sha256_root_hash).strip()))
docs: Verify a Merkle Audit Path.
  
          See section 2.1.1 of RFC6962 for the exact path description.
  
          Args:
              leaf_hash: The hash of the leaf for which the proof was provided.
              leaf_index: Index of the leaf in the tree.
              proof: A list of SHA-256 hashes representing the  Merkle audit
              path.
              sth: STH with the same tree size as the one used to fetch the
              proof.
              The sha256_root_hash from this STH will be compared against the
              root hash produced from the proof.
  
          Returns:
              True. The return value is enforced by a decorator and need not be
                  checked by the caller.
  
          Raises:
              ProofError: the proof is invalid.