1. A method of approximate functional matching comprising: identifying one or more subsets of a description of an integrated circuit or software program either having similar functionality to the one or more subsets or having functionality similar to a given template; assigning combinations of logic values to control inputs of the subsets; capturing a plurality of co-factors performed by the subsets for each of the assigned combinations of logic values, wherein the co-factors represent functions performed by the subsets based on the assigning; performing functional matching using the plurality of co-factors of the subsets, applying one or more hash functions to the plurality of co-factors; matching the plurality of co-factors with hash functions of equal or similar values to avoid having to consider all pairs of co-factors; constructing intermediate representations of the plurality of co-factors; and applying the one or more hash functions on the intermediate representations of the co-factors, wherein at least one of the identifying, assigning, capturing, performing, applying, matching, constructing, and applying is performed using a processor.