Wash and soak the kidney beans for at least 7-8 hours or overnight.
Put the soaked kidney beans, around 3 cups of water, and salt in a pressure cooker. Cook on medium flame till around 5 whistles or till the beans get cooked nicely without losing the shape.
In a grinder add the onion, garlic, ginger and make a paste. Take out the paste in a bowl and keep aside. In the same grinder make a paste of tomatoes and green chilies, keep it aside.
Heat oil in a pot and add bay leaves, cinnamon stick, peppercorns, cloves, black cardamom, and cumin seeds. Saute for a few seconds or till the spices become fragrant.
Add the onion paste and cook for around 12-15 minutes or till the paste turns golden brown. Every time the onion paste starts sticking to the bottom add around 1-2 tablespoons of water, mix, and continue cooking until it starts turning golden brown.
Next, add in the tomato paste and all the dry spices except garam masala. Mix well and cook for around 10-12 minutes till the tomatoes are nicely cooked with the spices.
Once the masala is ready, add the cooked beans, coriander leaves, and the water in which beans were cooked. Add more water if required. Allow to cook for about 7-8 minutes.
Finally, add the garam masala and cook for another 1-2 minutes before switching off the gas.
Garnish with some coriander leaves and serve with basmati rice or roti.