A computer-implemented method for enabling a software application to be executed on a hardware device in dependence of a hardware circuit in the hardware device, the method comprising: inputting challenge data originating, at least in part, from execution of the software application to the hardware circuit of the hardware device, wherein the hardware circuit is configured to perform a deterministic function; generating response data using the function with the challenge data as input to the function; and using the response data to manipulate at least a part of the software application to thereby enable the software application to be executed; characterised in that the software application comprises a first secured software part, a second secured software part and an inverse module configured to perform an inverse function to invert the function of the hardware circuit, wherein the challenge data comprises at least a part of runtime data of the software application at the end of the first secured software part when being executed in a processing unit, and wherein the using of the response data comprises: inputting the response data to the inverse function in the inverse module to thereby obtain an inverted response data, wherein the inverted response data is equal to the challenge data if the inverse function in the inverse module matches the function in the hardware circuit; and providing the inverted response data to the second secured software part for further execution of the software application. inputting challenge data originating, at least in part, from execution of the software application to the hardware circuit of the hardware device, wherein the hardware circuit is configured to perform a deterministic function; generating response data using the function with the challenge data as input to the function; and using the response data to manipulate at least a part of the software application to thereby enable the software application to be executed; characterised in that the software application comprises a first secured software part, a second secured software part and an inverse module configured to perform an inverse function to invert the function of the hardware circuit, wherein the challenge data comprises at least a part of runtime data of the software application at the end of the first secured software part when being executed in a processing unit, and wherein the using of the response data comprises: inputting the response data to the inverse function in the inverse module to thereby obtain an inverted response data, wherein the inverted response data is equal to the challenge data if the inverse function in the inverse module matches the function in the hardware circuit; and providing the inverted response data to the second secured software part for further execution of the software application. inputting the response data to the inverse function in the inverse module to thereby obtain an inverted response data, wherein the inverted response data is equal to the challenge data if the inverse function in the inverse module matches the function in the hardware circuit; and providing the inverted response data to the second secured software part for further execution of the software application.