Soak the beans for a couple of hours at least or overnight, then cooked in a pressure cooker until really tender. If you are cooking on the stovetop, place enough water in the pan to cover the beans by an inch, bring to a boil, lower the heat to a simmer, cover, and let the beans cook until tender. You might need to add more water as they cook, so check every once in a way. The beans should take about an hour to become tender. Reserve the beans and the cooking liquid.
Heat the oil in a large saucepan. Add the cumin and carom seeds. Stir-fry for 30 seconds, then add the onions.
Saute the onions until brown spots start to appear. Add the ginger-garlic paste, saute for a few seconds, then add the tomatoes.
Add the garam masala, coriander powder, paprika and cayenne. Stir to mix well. Cover the saucepan with a lid and let the tomatoes cook on medium heat until they are completely broken down. You can help the process along by adding ½ cup of the bean stock.
Add the beans to the saucepan, stir well to mix, then add the kasoori methi, crushing the dry leaves as you add to powder them.
Add some water or the bean cooking stock to thin out the gravy, if it's too thick. I like to take a potato masher at this point and mash some of the kidney beans to make the gravy thick and creamy.
Cover the saucepan with a lid and let the beans cook for another 10 minutes. Add salt to taste.
Stir in coriander leaves and take off the heat. Stir in the optional vegan butter at this point.