Heat oil in a large heavy-bottomed pan over medium heat.
Add chopped onions and sauté until golden brown and caramelized, about 15-20 minutes.
Add all whole spices (cardamom, cassia bark, cloves, bay leaves) and cook for 1 minute until fragrant.
Stir in ginger/garlic paste and cook for 2 minutes until aromatic.
Add turmeric, paprika, and chilli powder, stirring constantly to prevent burning.
Add chopped tomatoes and tomato purée, cooking until tomatoes break down, about 5 minutes.
Pour in water and salt, bring to a boil, then reduce heat and simmer for 15 minutes.
Allow to cool slightly before storing or using as a base for curries.