Amplify Shunt Resistor Voltage to an Arduino Using an Op-Amp
You are looking for a 'sensitivity' of 0.1A in 40A (1 part in 400), at a gain of 70, which is not a very difficult spec. Ideally an op amp with an open-loop gain exceeding 300,000, which any precision op-amp should be able to meet. If there is a requirement to pass frequencies beyond a few Hz you will need to increase that number- for example, at 100Hz you had best have an amplifier with a gain of a couple million. 

The offset voltage requirement is more stringent - your signal at 100mA is only about 100uV so you would like the offset voltage to be much less. 

Pretty much any 'zero drift' op-amp and many 'precision' op-amps will meet these requirements. You can use a simple differential amplifier as below, but note carefully the Kelvin connections to the shunt resistor. Layout is paramount to success- even a small length of copper trace in the wrong place will destroy your accuracy and temperature stability. 







simulate this circuit &ndash; Schematic created using CircuitLab

The voltage at the top end of Rs is subtracted from the voltage at the bottom end of Rs and multiplied by 70 in the above circuit. It is assumed that the voltage at the bottom end is much less, so matching requirements for R1/R3 and R4/R5 are minimal. There is a slight theoretical error due to the parasitic resistances (not shown) on Rs but it will not be significant relative to the errors in the resistor ratios. 

If you need to operate from a single supply you will have to place some additional constraints on the op-amp- input common mode voltage must extend to the negative rail and it must be able to swing the output to within a few mV of the negative rail. 

Again, there will still be plenty of available parts once you apply those constraints, and I leave the selection up to you.