Elevation is measured using a vertical coordinate system (vertical datum), and this vertical coordinate system can differ even if your ground coordinate system (horizontal datum) is the same. There are two main types of coordinate system for the elevation, above ellipsoid or above sea-level (which can be further divided into local seal level and geoid) :
Height above ellipsoid (HAE) the elevation is measured from the datum of the geographic coordinate system that gives your position on the Earth surface. This is typically the case of the raw elevation coordinates that you get from a GNSS system. The differences can be very large (roughly between -100 to +80 m, note that Southern India is -100m).
Height above local mean sea level (MSL): the sea level is a local parameter which can differ between two neighboring countries. Rigourous measurement takes the average of the tides over nearly two decades, at one point (for India, it seems to be at Cochin, Southwest Coast of India). The coordinates are then obtained by levelling. The countries that maintain a levelling network usually provide an altimetric correction grid because the difference between MSL and HAE is not constant. However, if you don't have such a grid, using a constant correction factor will remove the bias, which is the main component of the errors, but local differences will still remain (especially on a large area). Just to give you an idea, their can still be a difference of two meters after removing the bias in Belgium (about 300 km distance). This vertical datum is often used with topographic maps.
Orthometric height : the elevation is measured above the geoid, an imaginary surface defined based on the gravity field. As mentioned by @Michael Stimson, SRTM uses the EGM96. This is global surface fitted on the MSL, therefore it differs from local MSL datums which are only based on one point of reference.
That being said, your mentioned difference (12m) between the "approximate MSL" and the EGM96 seems quite large to me. It is in many places around 2 m, so part of the difference could be due to the combined uncertainty of the contour map and of the SRTM. It is however possible because India is quite large, so local and global MSL could differ. If you need to know what to trust, take some GPS coordinates and compare them with elevation on your maps (using EGM96 data to convert from HAE to orthometric height).
Remark: For (very) precise measurement, one should also take into account the definition of the verticality. It can be defined as the normal to a given surface or as the direction of the gravity field.