Mix the chilli powder, paprika, coriander powder, cumin powder and turmeric with about 1/3 cup water until smooth. Set aside.
Using a food processor or stick blender, blend together the onion, garlic, ginger, lemongrass, shrimp paste into a smooth paste. Set aside.
Heat the oil in a wok or large saucepan over a moderate heat until hot.Add the curry leaves and let them splutter briefly before adding the curry paste. Cook this gently for about 4-5 minutes (be careful to not have the pan too hot as you'll burn the spices).
Add the onion paste and stir well.Stir in the cinnamon and star anise. Cook this paste gently for another 5 minutes. You should have a nice separation of oil around the paste.
Pour in the stock, tamarind, lime leaves, galangal and lemongrass stalks and bring to a simmer. Gently simmer the sauce for 10 minutes - a gentle bubble of a simmer.
Pour in the coconut milk and stir well.Gently slide in the fish followed by the tofu. Let this cook for 4-5 minutes until the fish is cooked through.
Remove from the heat and carefully stir in the beans and tomatoes. Serve hot!
I like to serve mine with jasmine rice to help soak up the plentiful sauce, but you can also serve with Malaysian roti breads - you can find those in the frozen section of most Asian supermarkets.
Video
Notes
Instead of Asian long beans / snake beans, you can use French beans. For a more authentic version of this curry, use okra. I hate okra, so this was never going to happen.