Put the oil into a large wide pan and set it over a medium-high heat.
When very hot put in the cardamom pods and cinnamon stick.
Stir once then add the onions.
Stir until they begin to turn brown at the edges.
Add the ginger and garlic and cook stirring for 1 minute.
Add the cumin, coriander, turmeric, cayenne and paprika and stir for 30 seconds.
Add the tomatoes, tomato purée and garam masala and cook stirring for a minute.
Pour in the water and bring to a simmer.
Cover and turn the heat to low and simmer gently for 10 minutes.
Taste for salt adding about ¾ teaspoon or as needed.
Add the tofu pieces then raise the heat to high and fold the tofu into the sauce.
The sauce should thicken and cling to the tofu pieces.